J'ai utilisé cette analogie ... beaucoup de projets logiciels commencent parce que la personne qui a besoin d'un logiciel connaît l'équivalent d'un "bricoleur", et ils embauchent cette personne pour leur construire l'équivalent logiciel d'un abri de jardin. C'est une petite application utile qui fait très bien son travail.
Le client retourne ensuite chez le bricoleur, satisfait de son travail, et lui demande de changer de logiciel pour faire encore une chose. Souvent, cette nouvelle fonctionnalité n'a pas grand-chose à voir avec la demande d'origine, c'est donc presque comme s'ils vous demandaient de construire une autre pièce à l'arrière de l'abri de jardin avec une entrée séparée.
Ensuite, ils veulent mettre une lumière à l'intérieur du hangar, donc ils ont le bricoleur en arrière, et il exécute un seul circuit à partir du panneau principal de la maison, installe un interrupteur d'éclairage à chaîne à tirer au plafond de chaque pièce et les connecte au circuit .
Le client décide alors qu'il veut faire fonctionner des outils électriques, mais il continue de faire sauter le disjoncteur, alors il rappelle la personne et il doit en fait arracher le seul circuit qu'il a dirigé vers le panneau principal, et installer un conducteur plus gros et un sous-panneau dans la remise. Il a dû passer deux fois le fil et payer deux permis d'électricité, etc. C'est inefficace.
Le client demande alors quelque chose d'absurde: pouvez-vous transformer mon abri de jardin en garage? Je ne veux pas que tu refasses tout ce que tu as fait ... Je veux juste que tu l'agrandisses pour que je puisse y garer ma voiture. Ensuite, dans de nombreux cas, le bricoleur pense que "le client a toujours raison" et procède à des ajouts sur 3 côtés du hangar pour l'agrandir, fait tomber le mur entre les cloisons, etc. Bien sûr, les extrémités du toit jusqu'à s'affaisser parce qu'il n'est pas construit correctement, etc.
Le client n'est donc plus si impressionné, mais il en veut toujours plus. Ils demandent au bricoleur encore et encore d'ajouter simplement une pièce de plus, ou de changer cette pièce existante pour le faire, etc. Vous vous retrouvez avec quelque chose qui ressemble à The Burrow et qui est à peu près aussi solide sur le plan architectural.
Maintenant, la plupart des gens ne sont pas assez stupides pour essayer cela dans le monde de la construction, mais cela arrive tout le temps dans le monde du logiciel, car les gens ne font pas ces connexions:
Une personne qualifiée pour construire un abri de jardin vraiment agréable n'est pas nécessairement qualifiée pour construire une maison.
Si vous saviez à l'avance que vous alliez construire une maison par étapes, mais que cela ne commencerait que comme un abri de jardin, vous feriez les choses différemment et l'abri de jardin coûterait beaucoup plus cher (vous verseriez un pad très épais, assurez-vous d'avoir un conducteur suffisamment gros pour la pleine charge d'une maison finie, etc.).
Dans de nombreux cas, la mise à niveau d'une étape à une autre implique l'annulation d'une grande partie du travail effectué précédemment, ce qui le rend plus cher qu'il n'y paraît.
Dans le monde de la construction, nous pouvons donner au client une bonne idée de ce à quoi le résultat ressemblera pendant la phase de conception, mais nous n'avons pas cette capacité dans le monde du logiciel. Si vous en êtes arrivé à ce point, vous avez essentiellement écrit une partie importante du logiciel.
Le Manifeste Agile est le résultat de la reconnaissance que l'analogie logiciel / construction est rompue. Des choses comme les tests unitaires automatisés et les cycles de publication itératifs n'ont pas de parallèle dans la construction. Ces choses profitent du coût presque nul de passer de la conception au prototype (nous l'appelons compilation ou construction).