Recentemente, fiquei interessado em práticas ágeis no desenvolvimento de software e, desde então, vi muitos artigos apontarem que essas práticas permitem reduzir custos gerais.
A lógica por trás disso geralmente é assim: se seus requisitos forem alterados, você poderá refletir essa alteração no próximo backlog do sprint e isso levará a custos reduzidos, porque projetar o novo recurso e implementá-lo é muito próximo em termos de tempo; o custo diminui, de acordo com a famosa regra de que quanto mais tarde você precisar alterar seus requisitos, mais caro será para satisfazer esse requisito.
Mas projetos de software de médio a grande porte são complexos. Uma mudança repentina nos requisitos não significa que você não precisará tocar em outras partes do seu sistema para satisfazer esse requisito. Em muitos casos, a arquitetura precisará ser modificada significativamente, o que também significa que você precisará reimplementar todos os recursos que dependiam da arquitetura antiga. Portanto, todo o ponto de custos reduzidos desaparece aqui. É claro que se um novo requisito exige uma nova parte independente do sistema, isso não é um problema, a arquitetura antiga cresce, ela não precisa ser repensada e reimplementada.
E o oposto Se você estiver usando o waterfall e de repente perceber que um novo requisito deve ser introduzido, você poderá alterar o design. Se exigir que a arquitetura existente seja alterada, você a redesenha. Se ele realmente não mexer com ele, mas apenas introduzir uma nova parte do sistema, você fará todo o trabalho, sem problemas aqui.
Com isso dito, parece-me que a única vantagem que o desenvolvimento ágil tem é trabalhar com recursos completos entre sprints e, para muitas pessoas e projetos, isso não é crítico. Além disso, o ágil parece resultar em uma arquitetura de software ruim em geral, porque os recursos meio que se misturam, as equipes ágeis só se importam com o fato de um recurso funcionar, não com o que ele funciona. Parece que quando os sistemas crescem em complexidade com o tempo, as práticas de desenvolvimento ágil aumentam o caos na arquitetura geral do produto, resultando em custos mais altos, uma vez que será cada vez mais difícil introduzir mudanças, enquanto a cascata permite aperfeiçoar sua arquitetura antes de liberar qualquer coisa.
Alguém pode me indicar onde estou errado aqui, porque obviamente muitas pessoas usam o Agile em ambientes de produção, por isso devo estar errado em algum lugar.