Gestão
Desperdícios do desenvolvimento de software
3 minutos de leitura
Um dos focos do modelo de gestão Lean é combater os desperdícios, eliminando atividades que não criam valor e somente oneram, gerando custo e esforço desnecessários no fluxo da entrega. Assim, podemos conceituar desperdício como qualquer atividade que consome recursos sem gerar valor.
Na perspectiva do cliente, ele não está disposto a pagar por desperdícios, e sim pelas atividades que resultam em entregas que impactam seu negócio. De acordo Taiichi Ohno, considerado o principal responsável pela criação do Sistema Toyota de Produção, “desperdício é tudo aquilo que não agrega valor ao cliente”.
Podemos ter algumas atividades que são necessárias, como legais, regulatórias e outras que precisam ser executadas para dar suporte para atividades de valor agregado. Nesses casos, temos que ter clareza e consciência da sua necessidade.
De acordo com o Lean, no ambiente de produção de uma fábrica, podem ter 7 categorias de desperdícios, que vamos ver abaixo:
- Estoque: o estoque na linha de produção são os materiais ou trabalho em processamento ou produtos na fila de espera.
- Superprodução: produzir mais rápido ou em maior quantidade que a demanda do cliente.
- Processamento excessivo: executar atividades redundantes ou desnecessárias.
- Transporte: realizar movimentação (insumos, materiais, ferramentas) em excesso ou desnecessária.
- Movimentação: movimento desnecessário de pessoas.
- Espera: é o tempo que produtos ou pessoas ficam aguardando para poder seguir com seu processo ou atividades.
- Defeitos: ocorrência de erros que geram retrabalho
Pensando no contexto da engenharia de software, Mary Poppendieck, no livro Implementando o Desenvolvimento Lean de Software: Do Conceito ao Dinheiro, faz uma relação entre os desperdícios no contexto de produção e desenvolvimento de software. Logo, a seguir vamos explorar cada um deles.
- Trabalho inacabado: O estoque do desenvolvimento é o trabalho inacabado, como documentação ainda não codificada, código ainda não sincronizado, código ainda não testado, código ainda não instalado, entre outros. A forma de minimizar o estoque é dividindo o trabalho em pequenos lotes e iterações.
- Funcionalidades extras: É adicionar funcionalidades que não são necessárias para que o trabalho do cliente seja realizado, ou ainda, desenvolver funcionalidades que não são imprescindíveis em uma release impactando no seu prazo de entrega.
- Reaprendizagem: é quando não aplicamos o aprendizado e experiências anteriores no contexto que estamos atuando no momento.
- Transferência de controle: Quando transferimos o controle do trabalho para colegas, uma vasta quantidade de conhecimento tácito é deixada para trás. A cada transferência de controle deixamos parte do conhecimento para trás. Assim, quanto mais diretamente a informação for passada para o time melhor.
- Troca de tarefas: O desenvolvimento de software requer muita reflexão e concentração. Mudanças de contexto gera perda de foco, distração, toma tempo e piora os resultados de ambas as tarefas.
- Atrasos: Esperar pela disponibilidade/informação das pessoas para seguir o trabalho é uma grande causa de desperdício. Como por exemplo, o desenvolvedor ficar aguardando uma definição de negócio para seguir com o desenvolvimento de uma funcionalidade.
- Defeitos: Se o software entrar costumeiramente com defeitos na verificação final, então ele está sendo produzido por um processo defeituoso, gerando retrabalho e falta de qualidade da entrega para o cliente. Quando mais tarde o defeito é identificado, maior será seu custo de correção.
Assim, para combater desperdícios no desenvolvimento de software, primeiramente o time tem que conhecer quais são os possíveis desperdícios e, a partir disso, ter um olhar para identificá-los e definir ações para eliminá-los ou reduzi-los, atuando em um processo de melhoria continua.
É importante também, ter um ambiente onde os integrantes do time possam falar abertamente sobre os problemas, tendo espaço para opinar e expor suas ideias, se sentindo empoderados e com autonomia para discutir e implementar ações para resolução sistemática de problemas.
Referências:
- https://www.lean.org.br
- https://agilemanifesto.org/iso/ptbr/principles.html
- Implementando o Desenvolvimento Lean de Software: Do Conceito ao Dinheiro (Mary Poppendieck e Tom Poppendieck).
- Pensamento Lean – A Filosofia das Organizações Vencedoras (João Paulo Pinto).