"o software é feito quando está pronto, nem antes, nem depois."
Isso é verdade, mas para cada tarefa em que seus desenvolvedores começam a trabalhar, todos na sua organização entendem a Definição de Concluído para cada tarefa?
Parece que um dos seus maiores problemas é Estimation , mas os desenvolvedores só podem fornecer uma estimativa realista quando tiverem uma 'definição de pronto' inequívoca e claramente especificada. (Que inclui problemas de processo da empresa - por exemplo, documentação do usuário, pacotes de trabalho em uma liberação formal, etc.)
Não é de surpreender que a superestimação esteja causando um problema, uma vez que a maioria dos desenvolvedores vê que estimar o tempo necessário para concluir uma tarefa é a mais difícil.
No entanto, a maioria dos desenvolvedores tende a ter um controle razoável (embora otimista ) da quantidade de esforço que é capaz de realizar, por um determinado período de tempo.
O problema geralmente é que os desenvolvedores lutam para criar um relacionamento entre uma tarefa e a quantidade total de esforço necessária quando lidam com informações incompletas - principalmente se são pressionados a apresentar todas as respostas antecipadamente para uma tarefa realmente enorme .
Isso naturalmente leva a que as estimativas de tempo sejam desconectadas da realidade e elas perdem de vista coisas como o processo de construção e a documentação do usuário.
A desconexão tende a começar no início, quando a tarefa é descrita; e geralmente é composto por uma pessoa não técnica que elabora uma lista de requisitos sem ter idéia da quantidade de esforço necessário.
Às vezes, as pessoas da gerência sênior especificam tarefas e ignoram completamente os problemas de processo da empresa; não é incomum para a gerência sênior pensar que coisas como definir testes ou criar uma versão formal liberada ou atualizar um documento do usuário acontecem magicamente sem tempo ou esforço. requeridos.
Às vezes, os projetos falham antes que um desenvolvedor escreva uma linha de código porque alguém, em algum lugar, não está fazendo seu trabalho corretamente.
Se a equipe de desenvolvimento não estiver envolvida na aceitação de requisitos ou na captura de critérios de aceitação, isso significa uma falha no gerenciamento - porque significa que alguém que não conhece o código e os problemas técnicos comprometeu os negócios com um conjunto incompleto de requisitos, e deixou o projeto aberto a erros de interpretação, fluência no escopo, revestimento de ouro etc.
Se a equipe de desenvolvimento estiver envolvida na captura e na concordância de requisitos, pode ser uma falha da equipe, responsável por esclarecer os detalhes (e os critérios de aceitação - por exemplo, "Como é a entrega do produto? Quando é feito ?" ) A equipe de desenvolvimento também é responsável por dizer NÃO quando houver outros problemas de bloqueio no caminho ou se um requisito for apenas irrealista.
Portanto, se os desenvolvedores estiverem envolvidos na captura de requisitos:
- A equipe tem a oportunidade de se sentar com o gerente de produto para esclarecer os requisitos / definição de pronto?
- A equipe faz perguntas suficientes para esclarecer os requisitos implícitos / assumidos? Com que frequência essas perguntas são respondidas satisfatoriamente?
- A equipe exige critérios de aceitação (definição de concluído) antes de fornecer uma estimativa?
- Quão bem os critérios de aceitação geralmente são capturados para cada tarefa? É um documento vago com detalhes esparsos ou descreve a funcionalidade tangível e as palavras que um desenvolvedor poderia traduzir inequivocamente em um teste?
As chances são de que a produtividade da sua equipe não seja um problema; sua equipe provavelmente está envidando todo o esforço possível para desenvolver. Seus problemas reais podem ser um ou mais dos seguintes:
- Requisitos incompletos e vagos.
- Requisitos / tarefas que são grandes demais em primeiro lugar.
- Má comunicação entre a equipe de desenvolvimento e a alta gerência.
- Falta de critérios de aceitação claramente definidos antes das tarefas serem entregues à equipe.
- Especificação incompleta ou vaga / ambígua de testes de aceitação. (ie Definição de Concluído)
- Tempo insuficiente alocado para definir / concordar com os critérios de aceitação.
- Os desenvolvedores não consideraram tempo para testar o código de linha de base existente ou corrigir os erros existentes
- Os desenvolvedores testaram o código de linha de base existente, mas não apresentaram os bugs como problemas de bloqueio antes de fornecer estimativas sobre os requisitos
- A gerência viu os problemas / bugs e decidiu que os bugs não precisam ser corrigidos antes de escrever um novo código.
- Os desenvolvedores estão sob pressão para contabilizar 100% de seu tempo, mesmo que possivelmente 20% (ou algum número semelhante) seja provavelmente ocupado por reuniões, distrações, e-mails etc.
- As estimativas são acordadas com o valor de face e ninguém ajusta espaço para erro ou contingência (por exemplo, "decidimos que isso deve levar 5 dias, portanto esperamos que seja feito em 8.").
- As estimativas são tratadas por todos (desenvolvedores e gerenciamento) como números únicos, em vez de números "intervalo" realistas - ou seja,
- Melhor estimativa de caso
- Estimativa realista
- Estimativa do pior caso
... a lista poderia durar muito mais tempo do que isso.
Você precisa fazer alguma "descoberta de fatos" e descobrir exatamente por que as estimativas são constantemente desconectadas da realidade. O software de linha de base existente é ruim? Falta cobertura de teste de unidade? Seus desenvolvedores evitam a comunicação com o gerenciamento? O gerenciamento evita a comunicação com os desenvolvedores? Existe uma desconexão entre as expectativas de gerenciamento e as expectativas dos desenvolvedores quando se trata de "Definição de Concluído" ?