Comment fonctionne l'agile lors du remplacement d'un système fonctionnel?

15

Dans un monde Agile idéal, vous créez rapidement un sous-ensemble petit mais utile du système d'extrémité souhaité et le donnez aux utilisateurs. Ils sont excités, car c'est utile, ils commencent à l'utiliser et donnent leur avis. Vous déterminez ensuite ce que vous voulez y ajouter, créez cela et répétez jusqu'à ce que vous manquiez de temps.

J'ai eu quelques projets récemment qui impliquaient le remplacement d'une sorte de système de travail. Le modèle ci-dessus ne fonctionnait pas du tout: jusqu'à ce que vous ayez construit un système qui comprenait pratiquement toutes les fonctionnalités du système existant, les utilisateurs n'avaient aucun intérêt. Ils ne l'utiliseraient pas.

Comment appliquez-vous Agile lorsque "le plus petit sous-ensemble utile" est "tout cela"?

Steve Bennett
la source
3
J'ai une question, ce nouveau système est-il un miroir direct d'un ensemble de fonctionnalités existant, et si oui, pourquoi le modifiez-vous?
Les utilisateurs peuvent manifester un intérêt ou ne jamais obtenir la nouvelle fonctionnalité. C'est leur choix, mais dans certains milieux d'affaires, ils peuvent avoir des superviseurs qui pensent autrement.
JeffO

Réponses:

14

La solution agile pourrait ne pas être de tout remplacer en une seule fois, mais d'introduire progressivement le remplacement.

Présentez le nouveau système progressivement, petit à petit, en maintenant le fonctionnement de certaines parties de l'ancien système. L'ancien système n'est pas éteint d'un seul coup, il s'estompe. Les nouvelles pièces offrent de nouvelles fonctionnalités ou d'autres avantages, les utilisateurs sont donc ravis de les utiliser. C'est également moins risqué, car vous avez un système 100% fonctionnel à tout moment.

MarkJ
la source
2
+1 n'a même pas vu votre réponse ici avant que je dise pratiquement la même chose. Grands esprits et tout;)
Michael Brown
+1 pour avoir démontré qu'Agile n'est peut-être pas une approche idéale pour certains types d'implémentations réelles.
pap
@pap Oui, agile (TM) a été tellement excité qu'il y a un danger d'utiliser aveuglément une méthodologie fixe, sans penser à votre propre situation spécifique.
MarkJ
Garder certaines parties de l'ancien système en marche implique de consacrer des efforts de développement à l'intégration avec l'ancien système, non?
Steve Bennett
1
@SteveBennett: Oui, c'est le cas. C'est, bien sûr, un compromis. Mais le gain est considérablement réduit, et vous n'avez qu'à refaire la partie qui a besoin d'être refaite.
sleske
6

Plutôt que de réécrire le système existant (qui, comme vous l'avez mentionné, prendra beaucoup d'efforts avant que le nouveau système ne corresponde à la fonctionnalité existante), envisagez l' approche de la vigne étranglante . Fondamentalement, vous implémentez de nouvelles fonctionnalités en utilisant votre nouvelle approche au-dessus de l'application existante. Finalement, lorsque vous corrigerez les lacunes de l'ancien système pour remédier aux nouvelles fonctionnalités, le nouveau code remplacera entièrement l'ancien.

Cela nécessite plus de précision et d'efforts qu'un "redémarrage" de l'ancienne application. Mais vous obtenez un temps de retour sur investissement plus court. De plus, en passant par le processus, vous pouvez mettre en place des crochets pour permettre au «nouveau» système d'être plus facilement étranglé par le prochain «nouveau» système.

Michael Brown
la source
5

Libérer de petits incréments dans le monde pourrait fonctionner pour des projets entièrement nouveaux, mais même dans ce cas, le petit nombre de fonctionnalités pourrait ne pas être trop utile.

Scrum préconise qu'après chaque sprint que le produit soit "potentiellement expédiable". Il ne doit pas être expédié mais doit avoir la qualité d'un produit livrable.

Si vous souhaitez donner aux utilisateurs une version incrémentielle de l'application, vous pouvez la classer en versions Alpha, Bêta puis Release Candidate tout en ayant toujours la vraie application Production en cours d'utilisation.

Vous pourriez constater que de nouvelles fonctionnalités sont ajoutées et que les anciennes sont supprimées si vous intégrez les commentaires des utilisateurs.

aqwert
la source
1
+1 c'est exactement ainsi que nous l'avons abordé. Bien que l'idée de «recommencer» soit très peu agile. Dans quelle mesure avez-vous essayé d'envisager de remplacer progressivement l'ancienne solution?
Kris Van Bael
@KrisVanBael c'est théoriquement mieux (et certainement un idéal) mais c'est une autre de ces questions "ça dépend" - certaines anciennes solutions sont vraiment anciennes (donc on regarde les changements de plateforme) ou le processus est câblé / intégré de bout en bout dans le système et les "bits" peuvent être assez gros.
Murph
Je travaillais quelque part où l'original a été expédié sur le marché très rapidement et donc la conception était assez mauvaise. Nous avons eu l'idée de recommencer avec une meilleure idée de ce qu'il faut faire et, espérons-le, un meilleur code. Il ne s'est jamais concrétisé, ce qui était pour la meilleure cause, car le coût des avantages n'était pas viable. Si le système existant fonctionne, apportez-y de petites améliorations au fil du temps.
aqwert
3

J'ai travaillé sur une énorme gamme d'applications de remplacement pour un grand réseau national de télévision par câble. Le développement du nouveau système a été fait avec SCRUM, il s'agissait d'un projet de développement de 18 à 24 mois pour réimplémenter presque tous les principaux sous-systèmes; qui approchaient de 10 ans.

Il y avait une phase de planification d'environ 6 mois avant le début du développement, mais elle a également été abordée comme SCRUM. C'est là que le propriétaire du produit a écrit des magasins et des épopées de haut niveau après l'analyse du système existant et des entretiens avec les clients.

Le système existant était extrêmement stable et est passé en mode de maintenance critique; seuls les problèmes de stopper ont été corrigés, tout est simplement enregistré à des fins historiques et pour s'assurer que les mêmes problèmes n'apparaissent pas dans le nouveau système.

Le nouveau système a évolué comme décrit dans un processus Agile, il était extrêmement lisse pour la plupart. Lorsque le système de remplacement a atteint la part de fonctionnalité, il n'est pas entré en production, mais dans des essais de production parallèles. Un sous-ensemble de travailleurs non critiques a commencé à utiliser les deux systèmes pour valider que le nouveau système se comportait comme l'ancien; avec les anciens bugs corrigés bien sûr.

Lorsque le nouveau système a atteint presque 100% de nouvelles fonctionnalités, il a été déployé pour des cycles de production parallèles généraux, qui ont duré quelques mois.

Une fois que le client a jugé qu'il répondait à ses besoins, l'ancien système a été sauvegardé, éteint et assis. Je suppose qu'ils ont réutilisé l'ancien matériel du système, car ils n'ont jamais eu besoin de revenir à l'ancien système après la coupure.


la source
Cool. La chose cruciale dans cette histoire était la disponibilité de travailleurs désireux de travailler simultanément sur les deux systèmes.
Steve Bennett
2

Je pense toujours que l'agilité ajoute beaucoup de valeur dans ce scénario.

C'est juste que vous avez un objectif final très défini de «remplacer le système actuel».

Les techniques et processus agiles peuvent encore vous y mener plus efficacement.

Par exemple:

Vous pouvez toujours livrer le système de manière itérative et en petits sprints.

Vous pouvez toujours utiliser des techniques agiles pour hiérarchiser le travail après avoir communiqué avec les personnes clés.

Vous pouvez toujours utiliser Agile pour planifier en fonction de la vitesse observée.

Vous pouvez toujours utiliser des techniques et des philosophies agiles telles que la diffusion des connaissances, le TDD, le codage propre pour améliorer la qualité et la conception interne du projet.

Si vous avez des gens qui ne sont vraiment pas intéressés par le projet et ne s'engagent pas dans le projet jusqu'à ce qu'ils aient un remplacement parfait, vous avez un problème plus important, que vous utilisiez la cascade, l'agile ou tout autre processus.

Benjamin Wootton
la source
1

Cela fonctionne de la même manière, mais cette approche sera plus difficile à vendre aux utilisateurs existants. Ils peuvent ne pas vouloir le nouveau système et ils ne veulent pas être interrompus par des tests périodiques. Ils veulent attendre aussi longtemps que possible et ensuite le tester à la fin. La plupart des utilisateurs ressentent cela dans une certaine mesure, mais c'est aux responsables de les éduquer. Dans leur esprit, vous travaillez avec une application existante, vous devez donc savoir ce qu'elle est censée faire, pourquoi les déranger?

Faites-leur comprendre que vous ne voulez pas le faire de cette façon parce que vous pensez que ce sera amusant et que vous vous sentez seul en utilisant un processus en cascade. Cela fera une meilleure application à long terme.

Un argument de vente clé peut être d'implémenter ce changement lors de la construction de la nouvelle application qu'ils ont toujours voulu, mais ne pouvaient jamais intégrer dans l'ancien système.

JeffO
la source
0

Si j'ai une vieille voiture rouillée que je dois conduire pour me rendre au travail, et je vais chez le concessionnaire pour acheter une nouvelle voiture. Le modèle que je veux est en rupture de stock, ils doivent donc le commander à l'usine et il faudra un peu de temps avant qu'il ne rentre.

Le concessionnaire décide alors de bonne foi de vous remettre le bloc moteur de la voiture jusqu'à ce que la voiture que vous avez commandée soit entrée. Que devez-vous faire avec un moteur de voiture? Bien sûr, je peux brancher certains composants pour le tester et le faire fonctionner, mais cela ne m'aide pas vraiment à travailler demain où la vieille voiture rouillée le fait.

Certes il est un bien cry différent entre la construction d' une voiture et la construction de logiciels personnalisés, mais nous allons ignorer que , pour les besoins du raisonnement. Le but de l'histoire n'est pas de laisser perplexe le fait que le client ne trouve aucune utilité pour des changements incrémentiels lorsqu'il dispose déjà d'un logiciel suffisamment bon pour faire le travail maintenant. Cela répond déjà à leurs besoins pour le moment.

Cela ne veut pas dire qu'Agile n'est pas un élément important du processus ici car il permet une rétroaction continue au client sur l'état du projet. Ils peuvent s'assurer que des progrès sont réalisés avant les étapes et les livrables majeurs. Ils peuvent identifier les problèmes et les problèmes potentiels plus tôt avant qu'il ne devienne une erreur trop coûteuse à corriger.

Peut-être en tant que client de la voiture, vous voulez juste regarder et évaluer le moteur pour vous assurer que vous obtiendrez bien ce que vous attendiez. Oups, je voulais en fait un moteur 6 cylindres au lieu du moteur 4 cylindres! Je ne vous l'ai pas dit plus tôt? Pas de problème, permet de mettre une modification dans la commande d'usine.

Vendez l'idée aux clients qu'il est dans leur intérêt d'utiliser les nouvelles versions du logiciel non pas pour le moment, mais pour l'évaluer et s'assurer qu'elles sont satisfaites de chaque étape du processus.

maple_shaft
la source
Oui, mais mon expérience a été jusqu'à présent, pour suivre la métaphore, que les clients des voitures ne connaissent rien aux moteurs et ne peuvent rien vous dire d'utile en les regardant. Quand ils sont en mode hypothétique, la rétroaction est assez superficielle "oh, on dirait que cela ferait ce que nous voulons" et vous n'obtenez pas grand-chose jusqu'à ce qu'ils l'utilisent pour la première fois pour résoudre un problème réel.
Steve Bennett