Eu usei essa analogia ... muitos projetos de software começam porque a pessoa que precisa de algum software conhece o equivalente a um "trabalhador braçal", e eles contratam essa pessoa para construir o equivalente em software a um abrigo de jardim. É um aplicativo pequeno e útil que faz seu trabalho muito bem.
O cliente, em seguida, volta ao trabalhador manual, satisfeito com seu trabalho, e pede que ele mude o software para fazer mais uma coisa. Muitas vezes, esse novo recurso não tem muito a ver com a solicitação original, então é quase como se eles estivessem pedindo para você construir outra sala na parte de trás do galpão do jardim com uma entrada separada.
Então eles querem colocar uma luz dentro do galpão, para que eles tenham o ajudante de volta, e ele dirige um único circuito no painel principal da casa, instala um interruptor de corrente no teto de cada quarto e os conecta ao circuito .
O cliente decide então que deseja usar algumas ferramentas elétricas, mas ele continua acionando o disjuntor, então eles ligam para a pessoa de volta e ele realmente precisa interromper o único circuito que executou no painel principal e instalar um condutor maior e um sub-painel no galpão. Ele teve que passar o fio duas vezes e pagar por duas licenças elétricas, etc. Isso é ineficiente.
Então o cliente pede algo absurdo: você pode transformar meu galpão em uma garagem? Não quero que você refaça tudo o que fez ... Só quero que você a torne maior para que eu possa estacionar meu carro lá. Então, em muitos casos, o faz-tudo pensa "o cliente está sempre certo" e passa a acrescentar três lados do galpão para torná-lo maior, derrubando a parede entre as divisórias, etc. É claro que o teto termina flacidez porque não foi construído corretamente, etc.
Portanto, o cliente não está mais tão impressionado, mas ainda quer mais. Eles pedem repetidamente ao técnico para adicionar mais uma sala ou alterar a sala existente para fazer isso etc. Você acaba com algo que se parece com The Burrow e é tão arquitetonicamente bom.
Agora, a maioria das pessoas não é tola o suficiente para tentar isso no mundo da construção, mas isso acontece o tempo todo no mundo do software, porque as pessoas não fazem essas conexões:
Uma pessoa qualificada para construir um galpão de jardim realmente agradável não é necessariamente qualificada para construir uma casa.
Se você soubesse antecipadamente que iria construir uma casa em etapas, mas só iria começar como um abrigo de jardim, você faria as coisas de maneira diferente e o abrigo de jardim custaria muito mais (você colocaria uma almofada muito grossa, certifique-se de executar um condutor grande o suficiente para a carga total de uma casa pronta, etc.).
Em muitos casos, a atualização de um estágio para outro envolve desfazer muito do trabalho que foi feito anteriormente, tornando-o mais caro do que parece.
No mundo da construção, podemos dar ao cliente uma boa idéia de como será o resultado durante a fase de design, mas não temos essa capacidade no mundo do software. Se você chegou a esse ponto, basicamente escreveu uma parte significativa do software.
O Manifesto Ágil é o resultado de reconhecer que a analogia de software / construção está quebrada. Coisas como testes de unidade automatizados e ciclos de liberação iterativos não têm paralelo na construção. Essas coisas tiram vantagem do custo quase zero de ir do design ao protótipo (chamamos de compilação ou construção).