Supposons que vous deviez réécrire une application entière en utilisant des méthodologies Agiles, comment feriez-vous?
Je suppose que vous pourriez écrire un tas d'histoires d'utilisateurs basées sur le comportement de votre système actuel. Et puis implémentez-les par petites itérations. Mais cela ne veut pas dire que nous avons les exigences HAUT FRONT ??
Aussi, quand commenceriez-vous à sortir? Agile dit que nous devrions publier tôt et souvent, mais cela n'a pas beaucoup de sens de sortir avant la fin de la réécriture.
Réponses:
Décomposez-le en épopées de haut niveau. Prenez chaque domaine fonctionnel de l'application, une étape à la fois.
Décomposez une épopée en un groupe d'histoires (morceaux utilisables - tout ce qui améliore l'application) et gérez-les comme vous le feriez si vous n'aviez pas d'application existante, à une exception près: si c'est possible, faites en sorte que vous peut implémenter cette seule fonctionnalité dans le cadre de, ou parallèlement, à l'application d'origine.
Quand les Agilistes disent "sortez tôt et souvent", cela ne signifie pas nécessairement pour la production. Si vous envisagez de remplacer une application existante, vous devez utiliser une zone de transfert pour effectuer des versions fréquentes et vous assurer que vos utilisateurs y testent le système. Cela leur donnera encore de la place pour prioriser le prochain travail et pour s'assurer que rien de ce que vous mettez en production ne déprécie le produit.
Une fois que vous avez mis un composant en production, passez au suivant.
la source
nous venons de vivre une telle expérience (moi en tant que propriétaire de produit Scrum). Il nous a fallu deux ans pour arriver à quelque chose de libérable. Mais encore, l'agilité nous a apporté de nombreux avantages.
Premièrement: une réécriture totale n'est par nature pas agile du tout. Vous devriez plutôt envisager de refactoriser le produit existant pièce par pièce. Cela a été discuté dans une autre question. Supposons donc que ce soit une réécriture.
Ensuite, en effet, vous commencez avec un journal de bord qui couvre tous les cas d'utilisation pertinents du produit existant. Mais ne l'abordez pas comme des spécifications d'écriture. Ce serait trop de détails. Il doit être complet (sinon vous ne pouvez pas faire de planification de version). Et cela ne devrait pas être trop élaboré (sinon vous écrivez des spécifications à l'avance). Voici comment nous avons abordé cela:
catégoriser les utilisateurs de l'ancien produit. Identifiez les utilisateurs qui n'ont besoin que d'une petite partie de l'ancien produit tout en en tirant quelque chose d'utile. Ils définissent vos premières épopées.
Ajoutez ensuite des épopées qui permettraient à une autre catégorie d'utilisateurs de passer au nouveau produit. Etc. jusqu'à ce que vous ayez un journal de bord qui couvre tous les utilisateurs.
très probablement, ces épopées devront être divisées davantage. Si possible, essayez de diviser afin que chaque partie ait encore une certaine valeur. Si ce n'est pas faisable, assurez-vous au moins que chaque partie peut être démontrée.
lorsque vous avez 20 à 50 épopées, demandez à l'équipe de les estimer.
divisez les épopées les plus populaires en histoires d'utilisateurs que l'équipe estime réalisables dans un sprint. Ne le faites pas encore pour toutes les épopées, seulement celles en haut. Vous aurez tout le temps de partager le reste.
Quand sortir en externe! C'est une décision commerciale. Au moins, cette approche vous donne la possibilité de publier plus tôt dans certaines catégories d'utilisateurs. Cela peut être utile si la direction s'inquiète de ce projet apparemment sans fin.
la source
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.
Un mot plus vrai n'a jamais été prononcé.Libérez maintenant si vous le pouvez
Votre question sur le moment où vous commencez à publier le code est excellente. Je pense que deux réserves s'appliquent. Premièrement, que vous avez "une qualité suffisante", et deuxièmement que vous remplissez les conditions requises pour un MVP (produit minimum viable).
Rome (et Agile) n'a pas été construite en un jour
Peut-être que vous êtes prêt avec une équipe agile clé en main pour prendre le relais dès le premier jour. Pour la plupart des organisations, il y a le travail et les frais de formation, de réoutillage et du cycle habituel de formation, d'assaut, de normalisation et d'exécution de la constitution d'une équipe. Soyez à l'affût des risques et des coûts, veillez à définir des attentes réalistes, et soyez optimiste et prêt à défendre votre approche.
Soyez un Bootstrapper de réutilisation
Comme la puissance de fusion, la réutilisation du code est et sera toujours la solution future à nos problèmes économiques. Mon sentiment est que les développeurs disent souvent qu'ils croient à la réutilisation, mais seulement au type de réutilisation qui commence après avoir construit un nouveau framework, plutôt qu'au type où ils s'appuient sur ce que quelqu'un d'autre a déjà fait. Comment cela peut-il fonctionner jusqu'à ce que quelqu'un veuille choisir de s'appuyer sur les fondations de quelqu'un d'autre? Au mieux, cela signifie une réécriture toutes les quelques années lorsque le leadership de l'équipe change.
Pourquoi sortir tôt et souvent?
Communiquer tôt et souvent est un mantra pour de nombreuses raisons. Il donne vie à nos discussions sur ce que le produit devrait devenir, il rend réel où nous en sommes et il nous donne une base pour des changements itératifs / incrémentiels. Le rythme des versions est à peu près un invariant pour l'agile, la différence étant qui reçoit les versions (substituts clients ou utilisateurs finaux). Avant l'agilité, la maintenance représentait 60% du coût des systèmes logiciels. C'est une source de consternation pour les managers et autres, certains qui pensent que la sortie du produit est l'endroit où le logiciel va mourir. Pour eux, tout après la sortie est retravaillé et payé pour réparer un produit qu'ils ont déjà payé une fois.
La pré-version n'est pas naturelle
Kent Beck écrit que la pré-version est un état contre nature pour les produits logiciels. C'est certainement un moment gênant car c'est un moment où vous n'avez pas de clients et vous payez le produit plutôt que le produit qui vous paie.
Ne critiquez pas l'équipe précédente
Bien que cela puisse configurer les développeurs qui prennent en charge la réécriture en tant que héros et salut du projet, je pense qu'il y a un coût à critiquer les réalisations de l'équipe précédente.
la source
Invité par les commentaires de @Chuck et les références à Netscape disant essentiellement de ne pas réécrire, et les réponses valides rétorquant qu'il OP ne demande pas s'il le devrait. - Un cycle de développement logiciel vraiment agile empêche la réécriture. La réécriture rompt presque toujours bon nombre des principes qui se cachent derrière Agile. En utilisant le logiciel actuel comme ligne de base, ces principes Agiles (du Manifeste Agile ) ne peuvent pas être satisfaits par une réécriture.
La question est basée sur une fausse prémisse - Qu'une réécriture peut être considérée comme Agile.
la source
Demandez-vous si vous pouvez publier l'application réécrite un morceau à la fois et la faire cohabiter avec l'ancienne.
Pour les applications Web en particulier, il peut être assez facile de déplacer une seule partie de l'application vers une nouvelle plate-forme et de faire acheminer vos demandes d'équilibrage de charge vers le système approprié. Ensuite, écrivez les histoires qui vous permettront de mettre votre première page en production et de les livrer de manière agile.
Les applications de bureau peuvent être plus compliquées, mais ce sera souvent possible.
Vous cherchez des coutures - des endroits où il est possible pour l'ancien système d'avoir ses responsabilités reprises par le nouveau, sans avoir besoin d'une réécriture complète.
Peut-être existe-t-il une logique métier autonome qui peut être déplacée dans un nouveau service Web ou une nouvelle infrastructure, et l'ancienne application peut être modifiée en utilisant cela au lieu de son ancien code. Continuez à découper des morceaux sur les coutures jusqu'à ce que ce qui reste soit gérable en une seule bouchée.
Si vous ne trouvez aucune couture, vous devrez peut-être en effet rechercher le type d'approche big bang suggérée dans certaines des autres réponses. Mais préparez-vous à une longue marche avant d'arriver à destination, surtout si vous devez continuer à développer l'ancien système en parallèle ...
la source
En fait, à mon humble avis, c'est le point clé - plus tôt vous obtenez des parties de l'application réécrite en production (et, idéalement, en remplaçant les fonctionnalités de l'ancien système), plus les chances sont grandes que votre projet réussisse. Si vous pensez que cela n'a pas beaucoup de sens, réfléchissez bien - il y a presque toujours des possibilités de libérer des pièces.
Cela signifiera probablement que quelqu'un doit changer quelque chose dans l'ancienne application, par exemple, ajouter de nouvelles interfaces pour interagir avec l'application réécrite pendant que la réécriture n'est pas terminée. Mais d'après mon expérience, un tel travail supplémentaire est toujours rentable.
Une fois les premières parties de la nouvelle application en production, l'approche agile et itérative deviendra évidente. Les exigences changeront, vos histoires d'utilisateurs changeront ou obtiendront de nouvelles priorités, et nous espérons que vous remplacerez de plus en plus de fonctionnalités de l'ancien système par petites étapes.
la source