Lean Thinking e Qualidade do Software
Como qualquer setor industrializado, a produção de software enfrenta os mesmos desafios de ganhar produtividade, reduzir custos, produzir inovação e garantir qualidade. No pós-guerra, o pensamento enxuto, o Lean Thinking, possibilitou aos segmentos, como a indústria automotiva, alcançar novos patamares produtivos. Por que não possibilitaria o mesmo à produção de software?
Redução de desperdícios, melhoria contínua e produção puxada são ações que também fazem todo o sentido na produção de software. Por isso, empresas, organizações de qualidade de software, vêm consolidando o pensamento Lean para o mundo de produção da tecnologia, em especial, de software e “traduziram” Lean Thinking em 7 princípios relacionados a software:
- Elimine o desperdício
- Empowerment: ‘Empoderar” os Times
- Faça entregas rápidas
- Inclua a Qualidade no Processo
- Crie Conhecimento
- Adie Decisões e Comprometimentos
- Otimize o Todo
Neste post:
- Elimine o desperdício
Desperdício é tudo aquilo que não traz valor para um cliente final, um usuário e acaba, ao contrário, gerando custo e esforço inútil. Em matéria de software, por exemplo, são:
- funcionalidades pouco encontradas ou pouco usadas;
- processos mais complexos do que deveriam ser (criando passos extras para se chegar a um resultado, uma ação)
- documentação que nunca vai ser lida, etc.
Alguns exemplos de onde estão os desperdícios que o pensamento Lean pretende erradicar no processo de desenvolvimento de software:
Na Gerência de Requisitos:
Quando se estabelece previamente e muito antecipadamente requisitos, como nas práticas tradicionais de desenvolvimento de software, a chance de se desenvolver requisitos que já foram superados são enormes.
A bem da verdade, essa é uma questão que transcende os requisitos e acaba na codificação. Há cerca de 5 anos, o Standish Group dizia no seu “Chaos Report” que apenas 7% das funcionalidades escritas em um software comercial nos EUA eram utilizadas sempre e que 45% das funcionalidades nunca eram usadas.
A equação, porém, é simples: se escreve código demais, gerando complexidade, mais necessidades de testes; volumes grandes de documentação, necessidades maiores de manutenção… Custo… Custo…. Custo
Na Estruturação dos Processos:
A pergunta deve ser sempre a mesma: tudo isso é realmente necessário? Passos a mais é burocracia. Desperdício de tempo e de dinheiro. E muito provavelmente insatisfação do usuário.
- Empowerment: “Empoderamento” do time
Outro pilar fundamental é a forma de organizar e gerir a equipe. É precioso apostar num ambiente com autonomia, no sentido de possibilitar que a equipe se organize e se auto-oriente. As reflexões que você deve fazer:
1) Todo o time se envolve suficientemente nas análises, discussões e decisões?
2) A sinergia, o modus operandi do time favorece o desenvolvimento das pessoas?
3) Os softwares, os produtos refletem o pensamento e o estilo de toda a equipe?
4) Atuamos muito no micro-gerenciamento? Ou praticamos auto-gestão e feedback?
- Faça entregas rápidas
Só um enunciado bastaria: entregar software de maior valor, de forma rápida e contínua significa maximizar o ROI (Return Of Investiment) do projeto. Entregar mais rápido significa também colher feedback; significa errar mais cedo e aprender com os erros. Em resumo, o desenvolvimento de um software precisa ser um processo iterativo.