Penso que esta questão é o cerne da questão do ciclo de vida ágil versus cascata.
Se você está agilizando, uma premissa básica é que o código associado à interação estreita com o desenvolvedor é melhor e mais rápido que a especificação detalhada. A equipe prioriza o lançamento de novos recursos e alta qualidade sobre outras coisas - como mecanismos formais de comunicação, como especificações detalhadas do projeto. Mas há um comércio aqui - você precisa ter canais de comunicação entre os membros da equipe que permitam que eles perguntem sobre nuances e intenção detalhada do projeto quando necessário.
Se você está fazendo cascata, está trabalhando com a suposição de que o trabalho de preencher o código sob o design detalhado e testá-lo é significativo. E você deseja fornecer às partes interessadas informações precoces sobre como esse trabalho continuará e como será quando terminar. Isso pode estar avaliando o design com o cliente para garantir que você tenha escolhido os recursos que fazem sentido. Pode ser também consultá-lo com especialistas em outras áreas - como análises de segurança, análises de segurança e análises de membros da equipe que precisam se integrar ao seu código. A suposição é de que essas revisões economizarão tempo a longo prazo, pois evitarão que você investigue uma grande quantidade de tempo no desenvolvimento da coisa errada.
Ultimamente, tenho visto uma fusão realmente excelente entre projetos detalhados e ferramentas de comentários de código - JavaDoc, por exemplo. Como os designs mais detalhados são pegadas do código e explicações curtas sobre o que ele fará - isso é mais ou menos a mesma coisa que você esperaria dos comentários do código. Portanto, é ótimo ter uma ferramenta que transformará os comentários do código em uma especificação detalhada do projeto - uma maneira muito melhor de mantê-lo atualizado do que fazê-lo manualmente.
Acredito que a avaliação imprecisa de como o design deve ser detalhado para o projeto é um fator importante no aumento de custos. A pior parte é que você está condenado se fizer isso e condenado se não fizer:
- Se o seu design é muito detalhado para o tamanho da equipe, a complexidade do trabalho e os requisitos dos portões que você deve cumprir (análises de segurança, análises de segurança etc.), você desperdiçou tempo e dinheiro preciosos em um artefato que você nunca usará.
- Se seu projeto não for detalhado o suficiente, você desperdiçará dinheiro, pois os membros da equipe fazem suposições incorretas que levam a problemas de integração e corre o risco de retrabalhar muito quando uma auditoria final de segurança ou segurança descobre problemas que poderiam ter sido corrigidos mais cedo e mais barato se tivessem sido executados. aspectos claros do design antes da implementação.
Não acho que seja um gabinete preto e branco - pode haver muitas vezes em que alguns componentes são "bons o suficiente" se projetados em um nível alto, enquanto outros precisam de um trabalho detalhado e rigoroso. E a mudança de ambientes de equipe ou projeto pode ditar novas necessidades de design à medida que o projeto evolui.