Je me suis récemment intéressé aux pratiques agiles dans le développement de logiciels et depuis, j'ai vu beaucoup d'articles souligner que ces pratiques permettent de réduire les coûts globaux.
La logique derrière cela se présente généralement comme suit: si vos besoins changent, vous pouvez refléter ce changement dans le prochain backlog de sprint et cela entraînera une réduction des coûts, car la conception de la nouvelle fonctionnalité et son implémentation sont proches en termes de temps, de sorte que le le coût diminue, selon la célèbre règle selon laquelle plus vous devez apporter de modifications à vos exigences plus tard il sera coûteux de satisfaire à cette exigence.
Mais les projets logiciels moyens à grands sont complexes. Une modification soudaine des exigences ne signifie pas que vous n'aurez pas à toucher à d'autres parties de votre système pour satisfaire à cette exigence. Dans de nombreux cas, l'architecture devra être modifiée de manière très significative, ce qui signifie également que vous devrez réimplémenter toutes les fonctionnalités qui reposaient sur l'ancienne architecture. Donc, tout l'intérêt de la réduction des coûts disparaît un peu ici. Bien sûr, si une nouvelle exigence nécessite une nouvelle partie indépendante du système, ce n'est pas un problème, l'ancienne architecture ne fait que croître, elle n'a pas besoin d'être repensée et réimplémentée.
Et l'inverse. Si vous utilisez une cascade et que vous réalisez soudainement qu'une nouvelle exigence doit être introduite, vous pouvez aller changer votre conception. S'il nécessite que l'architecture existante soit modifiée, vous devez la repenser. Si cela ne dérange pas vraiment, mais introduit simplement une nouvelle partie du système, alors vous allez faire tout le travail, pas de problème ici.
Cela dit, il me semble que le seul avantage du développement agile est de créer des fonctionnalités complètes entre les sprints, et pour beaucoup de gens et de projets, ce n'est pas critique. De plus, l'agile semble entraîner une mauvaise architecture logicielle dans l'ensemble, car les fonctionnalités sont en quelque sorte giflées les unes sur les autres, les équipes agiles ne se soucient que du fonctionnement d'une fonctionnalité, pas de la façon dont elle fonctionne. Il semble que lorsque les systèmes deviennent de plus en plus complexes avec le temps, les pratiques de développement agiles augmentent en fait le chaos dans l'architecture globale du produit, ce qui entraîne finalement des coûts plus élevés, car il sera de plus en plus difficile d'introduire des changements, tandis que la cascade vous permettra de perfectionner votre architecture. avant de libérer quoi que ce soit.
Quelqu'un peut-il me dire où je vais mal ici, car de toute évidence beaucoup de gens utilisent l'agilité dans les environnements de production, donc je dois me tromper quelque part.
Réponses:
Tout d'abord, le modèle «cascade» a toujours été un homme de paille décrivant comment NE PAS exécuter un projet de développement logiciel. Cherchez-le.
Quoi qu'il en soit, la plupart des projets SDLC «en cascade» impliquent un processus de «gestion du changement», car lorsque les gens découvrent que les hypothèses qui ont été inscrites dans les spécifications ne sont plus valables (et cela se produit toujours sur de grands projets complexes). Malheureusement, le processus de gestion du changement est conçu comme une mesure de gestion des exceptions et est stupidement coûteux, ce qui signifie que le projet se terminera tard ou de mauvaise qualité.
L'idée derrière les méthodologies Agile est que le changement est une donnée - il se produira. Par conséquent, vous devez effectuer une opération standard de «gestion des modifications» plutôt que la gestion des exceptions. Ce n'est pas facile, mais les gens ont constaté que si vous utilisez beaucoup de bonnes pratiques de conception, vous pouvez le faire.
Un autre problème majeur avec la conception à chargement frontal est que (le plus souvent) beaucoup de temps est consacré à la collecte et à la conception des exigences, au développement et aux tests en souffrent. De plus, si le test est la dernière phase et qu'un problème grave est découvert, il est très peu probable qu'il soit résolu dans votre délai.
L'une des meilleures caractéristiques d'une approche Agile est peut-être qu'elle exige une interaction continue (c'est-à-dire une communication réelle) entre l'équipe qui développe la solution et le client qui en a besoin. Des priorités sont établies, de sorte que les éléments de priorité la plus élevée soient effectués en premier (et si le temps est écoulé, ce sont les éléments de faible priorité qui sont coupés). Les commentaires arrivent rapidement.
Revenons à la question des changements spectaculaires - vous devez vraiment utiliser des méthodes qui atténuent les changements. Les bons principes SOLID OO peuvent jouer un rôle important, tout comme la création de suites de tests automatisées solides afin que vous puissiez tester en régression votre logiciel. Vous devriez faire ces choses quelle que soit votre méthodologie, mais elles deviennent vraiment essentielles si vous essayez d'être agile.
la source
Eh bien, il y a quelques avantages. Le premier est que les clients ne lisent pas les documents de spécification. Déjà. Waterfall suppose que tout le monde sera bien d'accord avec une spécification au début, puis lorsque le logiciel sera livré au client un an plus tard, il sera heureux. Dans la pratique, les clients ne découvrent jamais que tout ce dont ils ont vraiment besoin, n'ont vraiment pas besoin et doivent vraiment être quelque chose de différent lorsqu'ils jouent activement avec le logiciel lui-même. Agile obtient un prototype fonctionnel entre les mains des clients, de sorte que ces déconnexions sont immédiatement prises. Agile ne consiste pas seulement à réagir à l'évolution des exigences. Il s'agit également de faire en sorte que ces exigences changeantes surviennent tôt, lorsque le coût du changement est faible, et non à la fin, lorsque le coût du changement est élevé.
Un deuxième avantage est que, car Agile a souvent des livrables très visibles, les projets sont moins susceptibles de dérailler. Avec un grand projet Waterfall, il est trop facile de prendre du retard sans même s'en rendre compte. Waterfall produit des marches de la mort sur plusieurs mois à la fin du projet. Avec Agile, parce que vous livrez aux clients toutes les deux semaines, tout le monde sait exactement où se trouve le projet et les fiches sont prises (et ajustées) rapidement. D'après mon expérience, Waterfall produit des semaines ou des mois de 100 heures à la fin. Agile signifie que vous devrez peut-être mettre quelques jours de 12 heures à la fin du sprint.
Un troisième avantage est que les projets Agiles ont tendance à être plus motivants. Il est très difficile pour les gens d'avoir une sorte de motivation dans un projet d'un an. La date limite semble si lointaine et ce manque d'immédiateté signifie que les gens ont tendance à tergiverser, à sur-polir les dessins et à défaut, ils ne fonctionnent pas de manière très productive. Cela est particulièrement vrai parce que les premiers mois sont consacrés à des choses que les gens n'aiment pas faire, comme les documents techniques. Parce que Agile a toujours des délais très immédiats et concrets dans un avenir très proche, les gens ont tendance à être plus motivés. Il est beaucoup plus difficile de tergiverser avec un délai concret pour un ensemble fixe de tâches qui doit arriver la semaine prochaine.
la source
En réponse à la citation de la question, qui est une idée fausse fondamentale des opposants anti-agiles
"... alors que la cascade vous permet de perfectionner votre architecture avant de libérer quoi que ce soit." est une erreur, laissez-moi le réparer pour vous; "... alors que la cascade vous permet de perfectionner votre architecture pour ne jamais rien lâcher. "
L'implication selon laquelle Waterfall fournit une architecture de meilleure qualité est fondamentalement fausse et complètement réfutée par des preuves historiques empiriques.
Si Facebook a été conçu à la manière d'une cascade avec 500 millions d'utilisateurs comme une exigence difficile et rapide et qu'il n'a pas été publié avant une architecture de support perfectionnée, personne n'en aurait jamais entendu parler aujourd'hui.
Même chose avec YouTube, Twitter et d'innombrables autres sociétés.
Ils ont obtenu quelque chose que le client pouvait toucher et réagir au travail et l'ont publié le plus rapidement possible. Ils ont reçu des commentaires, les ont affinés et les ont à nouveau publiés; répéter. C'est ainsi que dans ces trois exemples, ils répondent avec uniquement des fonctionnalités que les clients acceptent et veulent et perdent le moins de temps possible sur des choses que les clients trouvent peu ou pas de valeur.
Quiconque possède des années importantes d'expérience en développement de logiciels conviendra qu'il n'existe pas d' architecture perfectionnée . Juste une qui commence plus loin de l'entropie et de la grosse boule de boue que d'autres alternatives. Agile le reconnaît et en tient compte. Construire dans le processus, ceci comme dette technique, re-priorisation rapide et refactoring.
la source
Scrum en lui-même ne prescrit aucune pratique technique car il s'agit d'un cadre général.
Le développement logiciel agile requiert l'excellence technique de l'équipe. Cela vient des pratiques techniques suivantes de XP (programmation extrême). Par exemple, vous devez vous renseigner sur le refactoring, le tdd, toute l'équipe, la programmation par paires, la conception incrémentale, le ci, la collaboration, etc.
Le faire de cette façon permet de gérer le changement rapidement et en toute sécurité, ce qui est également la principale raison d'utiliser le développement agile en premier lieu.
La seule mesure de l'agilité qui compte, c'est si vous parvenez régulièrement (chaque semaine, toutes les deux semaines) à fournir à votre client un logiciel de travail précieux. Peux-tu faire ça? Alors tu es agile dans mon livre.
la source
Pour moi, le principal avantage de l'agile est de réduire les risques dans le projet.
En fournissant de manière itérative et en obtenant de nombreux commentaires de votre base d'utilisateurs, vous augmentez les chances que vous livriez quelque chose qu'ils veulent réellement, et vous le ferez en leur fournissant de manière pragmatique les fonctionnalités les plus importantes pour eux le plus tôt possible. En théorie, cela se fera avec de meilleures estimations et une meilleure planification. C'est évidemment très attrayant du point de vue des entreprises - bien plus que la version libérable.
Vous pourriez faire valoir que ce changement constant compromet votre système et réduit la qualité, mais je dirais deux choses. 1) Ce changement se produit de toute façon sur les projets de livraison de logiciels plus traditionnels - il n'est tout simplement pas pris en compte et se produit plus tard dans le projet, c'est-à-dire lorsque, comme vous l'avez souligné, les choses sont plus difficiles et plus coûteuses à modifier. 2) Agile a beaucoup à dire sur la manière de faire face à ce changement en termes de recours à des personnes motivées expérimentées et à des pratiques telles que le TDD, le jumelage et les revues de code. Sans ce changement de mentalité vers la qualité et l'amélioration continue, j'accepte que les changements fréquents qu'implique l'agile puissent commencer à causer des problèmes.
la source
Si votre architecture doit être modifiée de manière significative à la suite d'un changement d'exigences, vous avez une mauvaise architecture ou une mauvaise exigence. Une bonne architecture vous permet de reporter autant de décisions que possible et de découpler les composants de votre système. Les bonnes exigences (utilisateur) ne sont pas des choses comme "utiliser une base de données différente".
Donc, fonctionnons sous l'hypothèse que nous avons une bonne architecture de travail. Si tel est le cas, les méthodologies de développement agiles perdent ce "lavage" avec les méthodologies de conception à grande échelle. Après tout, une caractéristique essentielle des méthodologies de développement agile est des pratiques comme TDD qui favorisent le couplage lâche dans le code, permettant au projet de continuer à grande vitesse, qu'il soit proche du début ou très mature.
la source
Suite à un processus agile, il y a de meilleures chances d'attraper cette exigence avant que trop de logiciels aient été développés (et doivent être modifiés.). Lorsque vous passez plusieurs mois sans travailler avec le client et lui donner quelque chose à regarder, vous n'attrapez ces problèmes architecturaux majeurs qu'après avoir "pensé" que vous êtes prêt à livrer.
Je préfère essayer d'implémenter ces changements dans une application qui a une couverture de test plutôt qu'une énorme pile de code qui ne compile même pas. Tout en étant responsable du support technique, on m'a remis un CD d'une application qui avait été en mois de développement et qui ne serait même pas installée. Nous aurions pu trouver ce problème la première semaine, mais au lieu de cela, il était temps de commander le dîner car c'était une longue nuit.
la source