Vi várias postagens recentemente dizendo que uma das principais razões pelas quais o Agile é usado é porque os clientes geralmente alteram os requisitos.
No entanto, digamos que os clientes não alterem os requisitos com frequência . De fato, os clientes têm requisitos firmes, embora possam ser um pouco vagos (mas nada excessivamente vago), mas eu uso o Agile de qualquer maneira.
A razão pela qual emprego o Agile é porque o software é complexo o suficiente para haver detalhes, problemas que eu não reconheceria até os enfrentar. Eu poderia fazer uma abordagem de planejamento pesado em grande escala, como cascata, mas levaria alguns meses para finalizar todo o design de alto nível e assinaturas de codificação de baixo nível. Existe um projeto arquitetônico fixo muito específico para o sistema.
Minha pergunta é: isso seria considerado ruim, codificação de cowboy, anti-padrão etc.? Devemos empregar a cascata e planejar o máximo possível em grandes detalhes antes de começarmos a codificar quando os requisitos são estáveis, em vez dessa mentalidade de 'vamos fazer' no Agile?
EDIT: O ponto principal aqui é o seguinte: NÃO PODEMOS culpar os clientes por mudanças nos requisitos. Suponha que os clientes nos apontaram um problema muito concreto, nos dê uma lista de desejos com detalhes razoáveis e nos deixem em paz (ou seja, os clientes têm suas próprias coisas produtivas para fazer, não os incomode mais. Apenas faça uma demonstração para eles perto do terminar quando você tiver um protótipo de trabalho mínimo). Seria errado usar o Agile nesse cenário?
fonte
Respostas:
Resposta curta: não. Agir corretamente não significa "sem planejamento", significa não analisar demais as coisas.
Essa é uma declaração simplista demais. "Alterar requisitos" também é sobre como o entendimento da equipe sobre os requisitos muda. E é sobre como as prioridades do cliente sobre o requisito mudam quando ele realmente vê algumas versões do software.
De fato, "ágil" funciona IMHO melhor exatamente na situação que você descreve - o cliente tem um bom conhecimento sobre seus requisitos gerais, você pode escrever um plano geral, preencher sua lista de pendências com muitas "histórias de usuários" e já informações suficientes para escolher a arquitetura correta do sistema. As breves iterações de uma estratégia de desenvolvimento ágil ajudarão a tornar os "requisitos vagos" mais precisos, com muito feedback se você ainda estiver indo na direção certa. Ele também fornecerá um feedback antecipado sobre o esforço e os custos reais (que é algo que você ainda pode falhar em uma abordagem em cascata, mesmo que conheça todos os requisitos em detalhes).
fonte
Usar o ágil nessa situação ainda é uma ideia muito boa. Há muitos benefícios para o ágil, apenas um dos quais é o feedback regular do cliente e a capacidade de responder às mudanças nos requisitos mencionados.
Uma das principais razões pelas quais os projetos em cascata são notórios por falhas é o problema 'quase pronto' - testar pilhas de bugs produzidos no final, deixando um produto não-liberável e sem idéia se é necessário mais dois dias ou dois anos para corrigir os bugs pendentes. O Agile remove esse risco completamente. Se um projeto ágil estiver em execução, você ainda poderá fornecer uma versão funcional que:
A) Prova para o cliente que você está quase lá por meio de demos ("Todas essas histórias estão concluídas, podemos fazer as últimas, se você quiser") e mais algum tempo obterá exatamente o que deseja.
B) Potencialmente é bom o suficiente para que eles sejam felizes de qualquer maneira e se libertem.
Para mim, remover esse risco de falha completa já é motivo suficiente para uma empresa passar para um processo de desenvolvimento ágil; a capacidade de criar um software melhor do que o planejado inicialmente está no topo. Como mencionado em outras respostas, esses requisitos "concretos" ainda são surpreendentemente maleáveis.
fonte
O Agile é ideal se você precisar de um ciclo de feedback frequente com o cliente. Isso pode ocorrer porque os requisitos mudam com frequência, mas também por outros motivos.
Por outro lado, o Agile pode funcionar igualmente bem se os requisitos forem totalmente estáveis e o cliente esperar apenas uma única entrega do big-bang, mas talvez seja necessário adaptar as coisas um pouco para a quantidade de envolvimento que o cliente espera ter durante o processo. projeto. Isso significa que a função Dono do produto deve ser preenchida na própria organização e essa pessoa deve ter mandato suficiente do cliente para tomar decisões.
fonte
Você sempre pode dividir o grande lançamento em lançamentos menores (sprints) e pedir feedback ao seu cliente. Dessa forma, você tem certeza de que está fazendo a coisa certa e o cliente pode acompanhar o seu progresso.
Se houver algo errado, você pode oferecer ao seu cliente a chance de corrigi-lo mais cedo, o que é muito bom. É melhor corrigir seus erros o mais rápido possível, em vez de mostrar uma besteira para ele no final e tentar corrigi-lo quando você nem sabe por onde começar.
fonte