segunda-feira, 2 de fevereiro de 2015

Overview - Lean Software Development

O conceito “Lean Production” surgiu com o lançamento do livro “The Machine That Changed the World”  em 1990 quando a Toyota era da metade do tamanho da GM (General Motors). Hoje em dia a Toyota está passando a GM como maior montadora do mundo e se posiciona no mercado como a empresa mais bem sucedida nos últimos cinquenta anos. O livro trata de um sistema de produção enxuta (Lean Production System) com conceitos que tornaram-se a base para esse sucesso duradouro.
            Esse modelo de produção enxuta (Lean production) vai além da indústria automotiva, os princípios do pensamento enxuto são universais e têm sido aplicados com sucesso em muitas áreas; na indústria de software esse modelo é chamado Lean Software Development, onde seus criadores Mary e Tom Poppendieck (defensores de agile e maiores autores de livros de Lean Software) apresentam essa abordagem voltada para o processo desenvolvimento de software, detalhado a seguir.
            O desenvolvimento de software lean é baseado em sete princípios, nos quais nem os próprios autores entram em um concenso. Em cada novo livro publicado os princípios são ligeiramente modificados, podendo ser novos princípios e/ou em alguns casos apenas alteração dos nomes e descrição dos detalhes. Embora a base do processo lean seja os sete princípios, (analogia ao número mágico: The Magic Number Seven), atualmente na página oficial de Tom e Mary são apresentados oito princípios. No entanto vou detalhar aqui apenas os sete princípios apresentados em seu primeiro livro: “Lean Software Development: An Agile Toolkit.
1.    Elimine desperdícios (Eliminate waste): O objetivo é entregar exatamente aquilo que o cliente quer, nem mais nem menos do que exatamente o que o cliente quer. Para isso são apresentados alguns pontos nos quais ensinam a identificar esses desperdícios (Learning to see waste).  Abaixo são mostrados esses pontos usando como exemplo as práticas de XP (Extreme Programming).
o   Funcionalidades extras: Desenvolva apenas as estórias de hoje;
o   Requisitos: Estórias são detalhadas somente na iteração atual (não detalhar estórias antes de entrarem no planejamento da iteração);
o   Passos extras: Codifique diretamente das estórias; esclareça as dúvidas diretamente com clientes (stakeholder);
o   Encontrar informação: Acomode todos do projeto na mesma sala, incluindo clientes (stakeholder);
o   Defeitos não encontrados por testes: Teste primeiro, ambos desenvolvedores e clientes testam;
o   Espere, inclua clientes (stakeholder): Faça pequenas entregas;
o   Troca de tarefas: Desenvolvedores trabalham diretamente com clientes(stakeholder)

2.    Crie conhecimento (Amplify learning/ Learn first/ Create Knowledge): Consiste em criar o máximo de conhecimento sobre o que está sendo desenvolvido, não só em suas fases iniciais, como é sugerido em cascata(requisitos definidos), mas o aprendizado deve ser constante, sendo ele  antes, durante e depois do desenvolvimento. Esse princípio visa trazer à tona todo conhecimento absorvido pelos integrantes do projeto, o conhecimento tácito deve se tornar explicíto e fazer parte da organização como um todo. O ponto principal por parte das empresas, seria  entender que aprender sobre o produto em desenvolvimento é importante mas codificar conhecimento para uso futuro é essencial.

3.    Adie decisões (Delay/Defer commitment): Adiar decisões importantes para o mais tarde possível no projeto. Com essa prática, toda decisão que tem impacto irreversível  no projeto é feita com muito mais maturidade, dentro do processo como um todo. Uma decisão de arquitetura por exemplo, pode mudar todo comportamento do sistema, quanto mais distante decisões importantes de arquiteturas forem tomadas mais assertivas elas serão. Isso não significa não ter comprometimento com o projeto, essas decisões devem ser tomadas por time e/ou pessoas experientes, com domínio tanto na tecnologia que está sendo usada quanto no produto e/ou área de negócio do sistema que está sendo desenvolvido; Esse time experiente e comprometido, saberá até quando manter uma decisão importante em aberto. Um mito conhecido é afirmar que seguir a risca um planejamento é ter comprometimento. O planejamento deve ser aberto a mudanças, pode-se criar um plano de alto nível e deixar os detalhes em aberto, para que as decisões importantes sejam tomadas na hora certa, isso é,  planejar cuidadosamente e o comprometer-se com moderação.

4.    Entregue rapidamente (Deliver fast):  Esse princípio significa fazer entregas o mais rápido possível, como exemplificado nessa frase do livro “Implementing Lean”: “The moral of this story is that we need to figure out how to deliver software so fast that our customers don’t have time to change their minds.” Nós precisamos entregar software tão rápido que nossos clientes não tenham tempo para mudar de opinião (mudanças durante o projeto). No entanto fazer entregas rápidas não significa baixa qualidade, é possível fazer rápidas entregas com excelente qualidade. Segundo os autores existem 2 maneiras de fazer entregas com qualidade, lenta com máximo de cuidado e atenção aos mínimos detalhes ou rápida onde as pessoas têm autonomia para aplicar melhorias em seus processos. Empresas com pensamento lean trabalham com padrões de qualidade, mas essas normas existem porque eles incorporam as melhores práticas em como fazer com excelência seus respectivos trabalhos.
 
5.    Dê poder ao time(Empower the team/ Respect People/ Energize Workers): Esse princípio nada mais é do que dar importância a quem está fazendo o trabalho em si. Essas são as melhores pessoas para sugerir melhorias que resulta no aumento de produtividade e excelência do time. Investir no conhecimento para o desenvolvimento profissional do time também é uma prática importante nesse princípio, quanto mais as pessoas obtiverem conhecimentos que agreguem valor ao processo, maior será o retorno pra empresa. Criar maturidade do time é confiar em sua capacidade de ser auto-gerenciável. Confiar na opinião do profissional que está na linha de frente do trabalho, é dar ferramentas para que ele próprio encontre maneiras de colocar em prática essas melhorias, pois não existe nenhum processo tão bom, que não possa ser melhorado.

6.    Inclua integridade (Build Integrity In/ quality in): Um mito existente é que teste é feito para encontrar defeitos, sendo que na verdade teste é para prevenir defeito. Quando o conceito de construir o software com integridade e qualidade desde o início é aplicado, testar entra em primeiro plano (test first). Hoje em dia, existem metodologias de desenvolvimento orientada a testes, como o TDD que tem como objetivo diminuir o número de defeitos inseridos durante a fase de desenvolvimento. Construir com qualidade desde o início não exclui a necessidade de testes, até mesmo em fases finais do desenvolvimento, mas simplesmente oferece meios de diminuir drasticamente os defeitos encontrados em fases finais do projeto. Desenvolver com foco total em qualidade é absorver a cultura de que tudo deve ser feito para prevenir defeitos e não para encontrá-los.

7.    Otimize o todo (See the Whole/ Optimize the Whole): Otimizar o todo é olhar para toda organização quando uma decisão de negócio for tomada. Essas decisões abrangem sistemas que serão desenvolvidos e/ou atualizados. Um exemplo real de um estudo de caso aconteceu na Fujitsu, que recebia muitas ligações da BMI em seu help desk, para manutenção e suporte às suas impressoras. Após um estudo interno foi descoberto que grande parte das ligações eram relacionadas a impressoras de modelos antigos e convenceram a BMI a trocar para novos modelos de impressoras. Após as novas impressoras serem colocadas em uso, o número de ligações caiu em 40%, seria um caso de sucesso se a Fujitsu tivesse se atentado ao fato de que a sua receita também  era composta  pela quantidade de ligações recebidas em seu help desk; Com a queda de ligações a receita foi  igualmente reduzida. Esse fato está relacionado ao mito de otimizar pela decomposição, onde os departamentos trabalham de maneira completamente independente, essa prática tende a tomada decisões como essa feita na Fujitsu, onde o lucro da área de vendas aumentou mas o rendimento que deixou de entrar pelo help desk teve impacto significativo na receita de toda compania.

Do meu ponto de vista, o  maior problema que vem acontecendo hoje em dia é que muitas pessoas confundem os conceitos de ágil com o seu  real significado. Já ouvi empresas falando que aplicam “técnicas ágeis” com paradgmias antigos e outras com bastante desleixo em relação a padrões e normas de qualidade. Como afirmado pelos autores, mas que ao meu ver se aplica todas as metodologias ágeis,  “Lean Software Development is very disciplined. It’s just that you look at discipline a bit differently.”  O Desenvolvimento de software lean (ágil) é sim bastante disciplinado, mas é apenas uma forma um pouco diferente de disciplina.




Referências
Ø  http://www.poppendieck.com/, último acesso: dez/2013
Ø  Poppendieck, Tom/ Mary , Implementing Lean Software Development, 1ª edição, Addison-Wesley Professional , Setembro 2006

Ø  Poppendieck, Tom/ Mary , Lean Software Development - An Agile Toolkit, 1ª edição, Addison-Wesley Professional , Maio 2003

Nenhum comentário:

Postar um comentário