Páginas

09 outubro 2007

Lean Software Development

Saudações!!

Você ainda não ouviu falar de Lean Thinking? Então é melhor se atualizar...
=)

Fontes: Lean Institue Brasil, Poppendieck LLC
Video ao final do Texto

Lean Thinking

Introdução

"Lean Thinking" (ou "Mentalidade Enxuta") é um termo cunhado por James Womack e Daniel Jones para denominar uma filosofia de negócios baseada no Sistema Toyota de Produção que olha com detalhe para as atividades básicas envolvidas no negócio e identifica o que é o desperdício e o que é o valor a partir da ótica dos clientes e usuários.

As práticas envolvem a criação de fluxos contínuos e sistemas puxados baseados na demanda real dos clientes, a análise e melhoria do fluxo de valor das plantas e da cadeia completa, desde as matérias primas até os produtos acabados, e o desenvolvimento de produtos que efetivamente sejam soluções do ponto de vista do cliente. A adoção dessa filosofia tem trazido resultados extraordinários para as empresas que a praticam. Mas prepare-se para as dificuldades na implantação. Poucas empresas têm conseguido replicar totalmente o sucesso e a eficiência operacional da Toyota. Originalmente concebida por Taiichi Ohno e colaboradores, essencialmente como práticas de manufatura, tem sido gradualmente disseminadas em todas as áreas da empresa e também para empresas dos mais diferentes tipos e setores, tornando-se efetivamente uma filosofia e uma cultura empresarial.

Os resultados obtidos geralmente implicam em um aumento da capacidade de oferecer os produtos que os clientes querem, na hora que eles querem, nos preços que eles estão dispostos a pagar, com custos menores, qualidade superior, "lead times" curtos, garantindo assim uma maior rentabilidade ao negócio. Onde Aplicar Desenvolvido originalmente no ambiente de produção da indústria de manufatura, o lean thinking vem sendo aplicado, com grandes resultados em eliminação de desperdícios, nos mais diferentes ambientes das organizações, dentro do conceito de "Lean Enterprise" (administração, desenvolvimento de produto e produção), bem como em empresas de diversos setores, tais como: automobilístico e seus fornecedores, aeronáutico, eletrônico, serviços, construção, mineração, saúde, produção sob encomenda, etc.

Os princípios são listados abaixo:

Elimine o Desperdício (Eliminate Waste)

Os três maiores disperdícios em software development:

  • Funcionalidades Extras
    • É necessário um processo que permita criarmos apenas os 20% de funcionalidades que nos dará 80% de valor
  • Imobilidade
    • Se seus requisitos são imutáveis, você especifica muito cedo. Se possui ciclos de testes-correção, você testa muito tarde
  • Fronteiras bem definidas
    • Fronteiras organizacionais geralmente ampliam em cerca de 25% o custo, criando pontos que diminuem o tempo de resposta e interferem na comunicação

Crie Conhecimento (Create Knowledge )

Planejar é muito importante. Aprender é essencial.

  • Utilize o método científico
    • Ensine equipes a: estabelecer hipóteses, conduzir vários experimentos rápidos, crie uma documentação concisa e implemente a melhor alternativa
  • Padrões existem para serem desafiados e melhorados
    • Encorpore a melhor prática atual que todos seguem, enquanto ativamente encoraja a todos o desafio de mudar os padrões
  • Performance futura é guiada pelo Feedback
    • Uma organização não "advinha" sobre o futuro e cria um plano; ela desenvolve a capacidade de responder rapidamente ao futuro à medida que ele se desponta no horizonte

Produza com qualidade (Build Quality In)

Se rotineiramente você encontra defeitos nos sistemas em um processo de verificação, seu processo é defeituoso

  • Código à prova de erros com Desenvolvimento Orientado a Testes
    • Escreva especificações executáveis ao invés de requisitos
  • Pare de construir código legado
    • Código legado é um código que não possui testes de aceitação ou testes unitários automatizados
  • O Big Bang está obsoleto
    • Use Integração Contínua é auto sincronização

Crie comprometimento (Defer Commitment)

Elimine a idéia de que iniciar o desenvolvimento deve acontecer através de uma especificação completa

  • Quebre dependências
    • A Arquitetura de um sistema deve suportar a adição de qualquer nova funcionalidade a qualquer momento
  • Mantenha opções
    • Pense no código como um experimento - faça-o ser tolerante a mudanças
  • Adie decisões irreversíveis para o último momento
    • Aprenda o máximo possível até tomar uma decisão irreversível

Entregue rápido (Deliver Fast)

Listas e filas servem apenas para atrasar as coisas

  • Entregas Rápidas, Qualidade Total e Baixo Custo são completamente compatíveis
    • Empresas que competem com base na velocidade possuem uma grande vantagem em custo, entregam qualidade superior e são mais alinhadas às necessidades dos clientes
  • Teoria das Filas funciona para o desenvolvimento, não apenas servidores
    • Focar-se em utilização cria um problema de tráfego que reduz a própria utilização. Diminua o tempo entre ciclos com menos funcionalidades e menos itens em processo.
  • Limite o trabalho à sua capacidade
    • Estabeleça uma velocidade confiável e cíclica com o desenvolvimento iterativo. Agressivamente limite o número de listas e filas de espera à sua capacidade de entrega

Respeito as pessoas (Respect People)

Pessoas inteligentes e comprometidas provém a maior vantagem competiva da empresa

  • Equipes despontam através de Orgulho, Comprometimento, Confiança e Aplausos
    • O que nos trasforma em uma equipe? Membros estão mutualmente comprometidos a alcançar um objetivo comum
  • Forneca liderança efetiva
    • Equipes eficientes possuem líderes eficientes que conseguem obter o máximo da equipe
  • Respeito parceiros
    • Alianças em join ventures não devem nunca criar conflito de interesses.

Melhore o sistema (Improve the System)

Produtos brilhantes emergem da combinação única de Oportunidade e Tecnologia

  • Foque-se em Toda a Cadeia de Valor
    • Do conceito ao faturamento
    • Da requisição do cliente à instalação do software
  • Entregue um produto completo
    • Desenvolva um produto completo, não apenas software. Produtos completos são criados por equipes completas
  • Meça
    • Meça capacidade do processo através de ciclos de tempo. Mensure a performance do time através de entrega de valor de negócio. Mensure satisfação do cliente através da promoção de redes.







08 outubro 2007

Compartilhando equipes Ágeis



Product Owner único, Scrum Master responsável por manter a ordem e o foco no projeto, e uma equipe isolada do mundo exterior, criada somente para trabalhar num único projeto.
Seria o ideal, mas o mundo não funciona deste jeito. Na verdade o que acaba acontecendo é que empresas não possuem pessoas suficientes para tocar todos os projetos, fazendo com que um único desenvolvedor seja responsável por mais de um projeto.
A resposta natural ao problema de possuir uma única equipe e vários projetos é dividir o time. Simples e funcional... mas muitas vezes o tamanho da equipe não permite tal divisão. Então como tratar?

Kelly Water, do AllAboutAgile, dá uma solução interessante em poucos passos:

Trate a equipe como um único elemento
Não divida a equipe, tente reuní-la em torno de um único foco por vez. como fazer isso?
Tenha um Product Owner para cada projeto que a equipe será responsável. (muito importante!)
Determine, baseado em seu orçamento, o percentual de utilização da equipe para cada projeto. ex: 3 projetos: 70% 10% 20% da capacidade da equipe será alocada (leia-se velocidade).
Faça reuniões com todos os Product Owners e esclareça que eles só terão o percentual definido de tarefas para uma Sprint.

Talvez seja necessário aumentar a granularidade dos requisitos de cada Product Backlog, mas não se esqueça: estime apenas no Sprint Planning.

Deixe a cargo da Equipe a divisão do trabalho para os projetos. Lembre-se que agora você trabalha com uma equipe auto-gerenciável.

É isso...

05 outubro 2007

Paintball Ágil?



Ontem fomos nos aventurar num paintball... estávamos em 12 pessoas. Foi uma experiência muito marcante para mim (literalmente - alguns hematomas no braço podem confirmar)...
Mas o que achei interessante da brincadeira foi o extremo cansaço que todos sairam do jogo. Até mesmo os mais atléticos que eu (o que é muito simples de ser) estavam exaustos, mais todos ainda aguentamos duas horas de conversas à respeito de nossa aventura...

Como isso pode ser Ágil?
Paintball indor é um exemplo bastante rico de como deveriamos levar nossos projetos. Existe uma proteção que impede que pessoas fora do jogo sejam atingidas, ou que quem está dentro do jogo ser atrapalhado. Além disso, existe uma pessoa responsável por manter a ordem e garantir que regras do jogo não sejam quebradas... (como um scrum master?)
O jogo consiste em ciclos curtos em que o time inteiro tenta marcar os adversários, manchando-os de tinta... Quando todos são marcados o ciclo termina para ser reiniciado... é nesse momento que o time discute suas melhores táticas para vencer a próxima partida... não há tempo para grandes discussões, é necessário ser o mais pragmático possível para se obter o melhor resultado dessa pequena reunião. Depois de alguns ciclos (ou games), as equipes estão mais atentas, com tiros mais certeiros e melhores resultados...
Depois de um ciclo intenso de uma hora, mesmo exaustos, é o momento de descontrair e relatar os fatos que ocorreram na partida, para que no próximo evento todos estejam melhores e mais dispostos...


Seria a comparação um tanto equivocada?? Talvez nem tanto... talvez sejam os hematomas (e dois headshots que levei)
Adorei o esporte! Quem sabe mês que vem tire (e atire) para conclusões...

Net Fone - O mais barato

Telefone da Net consegue ser o mais barato em são paulo! Alguém sabe se o serviço é de qualidade?
Aki na ilha da magia as coisas não são das melhores, ainda nao vi nenhuma pessoa que estivesse satisfeita com o serviço da net...

Veja o estudo abaixo
Fonte: InfoMoney
Perfis

Para elaboração do estudo, o Idec escolheu três perfis de gasto:
  • 200 minutos mensais para fixo + 100 minutos mensais para celular;
  • 250 minutos mensais para fixo + 50 minutos mensais para celular;
  • 400 minutos mensais para fixo + 300 minutos mensais para celular.
Quanto fica
Na tabela abaixo é possível verificar os preços dos serviços prestados em São Paulo pela Telefônica, Net e Skype. O tempo de ligação para celular foi estimado pela entidade em dois minutos:

Perfil 1
Empresa Gasto com fixo Gasto com celular Total
Telefônica R$ 38,80 R$ 69,14 R$ 107,94
Net Fone R$ 20 R$ 65 R$ 85
Skype* R$ 26,40 R$ 65,70 R$ 108,99
Perfil 2
Empresa Gasto com fixo Gasto com celular Total
Telefônica R$ 43,58 R$ 34,57 R$ 78,15
Net Fone R$ 25 R$ 32,50 R$ 57,50
Skype* R$ 33 R$ 32,85 R$ 82,74
Perfil 3
Empresa Gasto com fixo Gasto com celular Total
Telefônica R$ 57,91 R$ 207,42 R$ 265,33
Net Fone R$ 40 R$ 195 R$ 235
Skype* R$ 52,80 R$ 197,10 R$ 266,79

04 outubro 2007

Acertando do início!



Saudações!
Desculpem a demora... estou preparando uma apresentação para a semana acadêmica do senac-RS e ando meio ocupado para escrever... mas vamos lah!

Texto muito bom de Jean MacAuliffe da NetObjectives (sempre ouço o podcast deles...), que trata sobre qualidade de software baseada nos princípios do Lean Thinking e Desenvolvimento Ágil, e a imensa diferença entre nossa abordagem e a abordagem tradicional.

Resumão:

Test-Driven Development unido a Pair Programming, Code review e Shared code Responsablities são as principais práticas para que se possa criar um ambiente onde a qualidade é o principal do desenvolvimento do produto.
O princípio Build quality in do Lean Manufacturing pode ser realmente aplicado num ambiente de desenvolvimento de software...
Pense nisso...

Pessoalmente acredito que outras práticas não tão relacionadas a desenvolvimento podem ser muito importantes para este estado de qualidade total... inclusive já escrevi sobre elas aqui.


Arquivo: Get it Right from the Start

=)