Suponha que você precise reescrever um aplicativo inteiro usando metodologias Agile, como você faria isso?
Eu acho que você pode escrever um monte de histórias de usuários com base no comportamento do seu sistema atual. E, em seguida, implemente-os em pequenas iterações. Mas isso não significa que temos os requisitos PARA CIMA NA FRENTE ??
Além disso, quando você começaria a lançar? O Agile diz que devemos lançar cedo e frequentemente, mas não faz muito sentido lançar antes que a reescrita completa seja concluída.
Respostas:
Divida-o em épicos de alto nível. Tome cada área funcional do aplicativo, uma etapa de cada vez.
Divida uma epopeia em um grupo de histórias (partes utilizáveis - qualquer coisa que melhore o aplicativo) e gerencie-as como faria se não houvesse uma aplicação existente, com uma exceção: se possível, faça com que você pode implementar essa parte da funcionalidade como parte ou ao lado do aplicativo original.
Quando os agilistas dizem "liberar cedo e frequentemente", isso não significa necessariamente produção. Se você for substituir um aplicativo existente, use uma área de teste para liberar frequentemente e verifique se seus usuários estão testando o sistema lá. Isso ainda lhes dará espaço para priorizar o próximo trabalho e garantir que nada que você libere para a produção deprecie o produto.
Depois de liberar um componente para produção, passe para o próximo.
fonte
acabamos de passar por essa experiência (eu como proprietário do produto scrum). Levamos dois anos para chegar a algo liberável. Mas ainda assim, o ágil nos trouxe muitos benefícios.
Primeiro: uma reescrita total não é, por natureza, ágil. Em vez disso, considere refatorar o produto existente, peça por peça. Isso foi discutido em outra pergunta. Então, vamos supor que seja uma reescrita.
Então, de fato, você começa com um log reverso que abrange todos os casos de uso relevantes do produto existente. Mas, por favor, não o aborde como escrever especificações. Isso seria muitos detalhes. Deve estar completo (caso contrário, você não poderá executar o planejamento da liberação). E não deve ser muito elaborado (caso contrário, você está escrevendo especificações antecipadamente). Veja como abordamos isso:
categorizar os usuários do produto antigo. Identifique os usuários que precisam apenas de uma pequena parte do produto antigo e ainda assim obtenham algo útil. Eles definem seus primeiros épicos.
Em seguida, adicione épicos que permitam que outra categoria de usuários passe para o novo produto. Etc. até você ter um log reverso que cubra todos os usuários.
muito provavelmente, esses épicos precisarão ser divididos ainda mais. Se possível, tente dividir para que cada parte ainda tenha algum valor. Se isso não for possível, certifique-se de que cada parte possa ser demonstrada.
quando você tiver de 20 a 50 épicos, peça à equipe que os avalie.
divida os principais épicos em Histórias de usuários que a equipe acredita serem viáveis em um sprint. Não faça isso para todos os épicos ainda, apenas os que estão no topo. Você terá tempo de sobra para dividir o resto.
Quando liberar externamente! Essa é uma decisão de negócios. Pelo menos, essa abordagem oferece a oportunidade de liberar anteriormente para determinadas categorias de usuários. Isso pode ser útil se a gerência ficar nervosa com esse projeto aparentemente interminável.
fonte
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.
Palavras mais verdadeiras nunca foram ditas.Libere agora se puder
Sua pergunta sobre quando você começa a liberar o código é ótima. Eu acho que duas condições se aplicam. Primeiro, que você tenha "qualidade suficiente" e, em seguida, que atenda aos requisitos de um MVP (produto mínimo viável).
Roma (e Agile) não foram construídas em um dia
Talvez você esteja pronto com uma equipe ágil pronta para assumir o primeiro dia. Para a maioria das organizações, há o trabalho e as despesas de treinamento, reequipamento e o ciclo habitual de formação, assalto, normatização e execução da formação de uma equipe. Seja franco quanto aos riscos e custos, tenha cuidado para estabelecer expectativas realistas e esteja preparado para defender sua abordagem.
Seja um Bootstrapper reutilizado
Como o poder de fusão, a reutilização de código é e sempre será a solução futura para nossos problemas econômicos. Meu sentimento é que os desenvolvedores costumam dizer que acreditam na reutilização, mas apenas o tipo de reutilização que começa após a construção de uma nova estrutura, em vez do tipo em que se baseia no que outra pessoa já fez. Como isso pode funcionar até que alguém esteja disposto a escolher construir o alicerce de outra pessoa? Na melhor das hipóteses, significa reescrever a cada poucos anos quando a liderança da equipe muda.
Por que lançar cedo e frequentemente?
Liberar cedo e muitas vezes é um mantra por muitas razões. Isso dá vida às nossas discussões sobre o que o produto deve se tornar, torna real onde estamos e fornece uma base para mudanças iterativas / incrementais. O ritmo dos lançamentos é praticamente invariável para o ágil, com a diferença de quem recebe os lançamentos (substitutos do cliente ou usuários finais). Antes do Agile, a manutenção era estimada em 60% do custo dos sistemas de software. Essa é uma fonte de muita consternação para gerentes e outros, alguns que acham que o lançamento do produto é onde o software morre. Para eles, tudo após o lançamento é retrabalhado e pago para consertar um produto pelo qual eles já pagaram uma vez.
Pré-lançamento não é natural
Kent Beck escreve que o pré-lançamento é um estado não natural para produtos de software. Certamente é um momento inconveniente, porque é um momento em que você não tem clientes e está pagando pelo produto, e não pelo produto que está pagando por você.
Não critique a equipe anterior
Embora possa configurar os desenvolvedores que assumem a reescrita como heróis e salvação do projeto, acho que há um custo em criticar as realizações da equipe anterior.
fonte
Solicitados pelos comentários do @Chuck e referências ao Netscape dizendo essencialmente não reescrever, e respostas válidas replicando que o OP não está perguntando se deveria. - Um ciclo de desenvolvimento de software verdadeiramente ágil impede a reescrita. Reescrever quase sempre quebra muitos dos princípios por trás do Agile. Usando o software atual como linha de base, esses princípios do Agile (do Agile Manifesto ) não podem ser reescritos.
A pergunta é baseada em uma premissa falsa - Que uma reescrita pode ser considerada ágil.
fonte
Considere se você pode liberar o aplicativo reescrito uma peça de cada vez e tê-lo em produção lado a lado com o antigo.
Para aplicativos da Web em particular, pode ser bastante fácil mover uma única parte do aplicativo para uma nova plataforma e ter suas solicitações de rota do balanceador de carga para o sistema apropriado. Em seguida, escreva as histórias que permitirão que você coloque sua primeira página em produção e as entregue de maneira ágil.
Os aplicativos de desktop podem ser mais complicados, mas muitas vezes serão possíveis.
Você está procurando costuras - locais onde é possível que o sistema antigo assuma suas responsabilidades pelo novo, sem precisar de uma reescrita completa.
Talvez exista alguma lógica comercial independente que possa ser movida para um novo serviço ou estrutura da Web, e o aplicativo antigo possa ser modificado usando-o em vez de seu código antigo. Continue cortando pedaços nas costuras até que o que resta seja administrável, tudo de uma só vez.
Se você não encontrar costuras, talvez seja necessário procurar o tipo de abordagem do big bang sugerida em algumas das outras respostas. Mas esteja preparado para uma longa marcha antes de chegar ao seu destino, especialmente se você espera continuar desenvolvendo o sistema antigo em paralelo ...
fonte
Na verdade, IMHO, esse é o ponto principal - quanto mais cedo você obtém partes do aplicativo reescrito na produção (e, idealmente, substituindo a funcionalidade do sistema antigo), maiores são as chances de o seu projeto ser bem-sucedido. Se você acha que isso não faz muito sentido, pense mais a respeito - quase sempre há possibilidades de liberar peças.
Provavelmente, isso significa que alguém precisa alterar algo no aplicativo antigo, por exemplo, adicionar algumas novas interfaces para interagir com o aplicativo reescrito durante o tempo em que a reescrita não estiver concluída. Mas, para minha experiência, esse trabalho adicional sempre se paga.
Quando as primeiras partes do novo aplicativo estiverem em produção, a abordagem ágil e iterativa se tornará óbvia. Os requisitos mudarão, suas histórias de usuário mudarão ou obterão novas prioridades, e esperamos que você substitua cada vez mais a funcionalidade do sistema antigo em pequenas etapas.
fonte