Problème: Il semble que, avec presque tous les efforts de développement, je participe, quel que soit le temps passé à planifier avant de commencer le développement, il y a toujours une grande quantité de changements requis soit à mi-chemin ou vers la fin. du projet. Ce sont parfois de gros changements qui nécessitent beaucoup de re-développement.
Je ne travaille pas pour les clients qui paient de l'argent, il s'agit d'une équipe de développement interne sur les sites Web de développement interne. Donc, ce n'est pas comme si je peux charger pour cela ou quoi que ce soit. Et à la fin de la journée, nous devons essayer de frapper des délais.
Questions: Quelles sont certaines des meilleures façons que vous avez trouvées pour minimiser et empêcher les changements de spécification de la culture à mi-chemin ou après le développement?
Il y a un dicton militaire célèbre, attribué à Helmut Von Moltke: "Aucun plan de bataille survit au contact de l'ennemi". Dans la même veine, je ne pense pas qu'il soit possible de faire une spécification qui n'aura pas à être changé - non à moins que vous ne puissiez prédire l'avenir et que vous lisez les esprits des parties prenantes (même à ce moment-là, ils n'ont peut-être pas encore eu leur esprit, même si Ils prétendent qu'ils l'ont fait). Je suggérerais plutôt de l'approcher de différentes manières:
Livrer quelque chose (j'hésite à utiliser tout autre chose) tôt et livrer souvent. C'est - utiliser une sorte de méthodologie de développement itératif.
C'est la base du développement agile, mais peut être utilisé avec (presque) toute méthodologie.
En brisant le projet dans une série de mini projets, vous obtenez plus de contrôle car vous pouvez mettre quelque chose devant le client tôt, vous n'êtes pas enfermé dans un large échéancier de développement qui devient obsolète lorsque le client change d'esprit (comme elles vont).
Lorsqu'ils voient le système évoluer, certaines exigences vont changer, certaines deviendront redondantes et d'autres augmenteront de priorité. Cependant, en ayant un cycle de vie de projet court, vous pourrez faire face à ces changements.
La théorie qu'il est possible de spécifier complètement un projet logiciel de toute taille significative est un fantasme complet. Cette théorie a été trouvée à ne pas travailler dans des organisations de grand à petit pour toute l'histoire du développement de logiciels.
Vous devez trouver un moyen d'accommoder les changements que vous allez! Ils vont se passer, car la plupart des parties prenantes, même s'ils disent "oui, c'est ce que je veux" n'a aucune idée de ce qu'ils veulent jusqu'à ce qu'il soit devant eux. C'est pourquoi nous avons tellement de gens adoptant des méthodes itératives.
Que vous ayez itérer le produit ou quoi que ce soit, vous devez trouver un moyen de trouver un moyen de répondre à ces changements, car essayez de trouver des moyens de ne pas avoir de changements à ne pas demander à la gravité de se transformer pendant quelques minutes afin que vous puissiez aller voler.
N'essayez pas d'empêcher le changement, Embrace. Plus vous planifiez à l'avance, plus votre plan change probablement. Donc, plan moins, pas plus. Adoptez une méthodologie de développement agile où vous fournissez fréquemment des petits morceaux de code de travail, donnant au client la chance de modifier les spécifications toutes les deux semaines.
Vous posez la mauvaise question. Les changements de spécification seront toujours se produisent dans des projets de développement de logiciels de toute taille.
Souvent, c'est parce que les exigences commerciales changent, mais je l'ai également vue que cela se produise parce que les clients (internes ou externes) peuvent avoir du mal à visualiser ce qui est possible sans voir quelque chose à itérer, alors ils ont une vision qui change lentement lorsqu'ils changent lentement à mesure qu'ils changent avec la développer une solution.
La question que vous devriez demander n'est pas "Comment puis-je verrouiller les spécifications", c'est "Comment puis-je structurer mon code et processus pour répondre à un environnement en mutation sans supprimer tout ce que j'ai déjà écrit?"
Cela vous mène ensuite à la Buzzword Bingo Arena: méthodologies agiles, développement itératif et solutions techniques telles que le codage composant/modulaire, l'intégration continue ... La liste passe.
Je ne dis pas que ce sont des balles d'argent à tous vos problèmes, mais ils sont tous venus à cause d'un désir de gérer la situation même que vous décrivez donc à tout le moins qu'ils valent une certaine enquête.
Désolé si cela ne propose pas de solutions concrètes, mais j'ai tendance à penser qu'un changement de mentalité dans l'acceptation et la gestion des changements paiera de plus gros dividendes que d'essayer de l'éviter.
Un changement n'est qu'une surprise ... si c'est une surprise!
Je suggérerais de penser à:
Le changement est la nature de ce que nous faisons. Depuis quand avez-vous codé un algorithme exactement comme envisagé le jour 1?
Mais si vous voulez éviter de perpétuellement être le développeur frustré "surpris" par des changements, je pense que vous devez vous trouver bien plus près de l'action de l'endroit où les décisions sont prises. Après tout, je suis sûr que vous avez une charge d'idées de seau de la manière dont vous pourriez améliorer le produit. Obtenez un siège à la table ou acceptez à jamais que vous devrez simplement traiter ces "changements surprises".
La participation active des utilisateurs tout au long du cycle de développement et l'utilisation de la méthodologie d'Agile que possible nous aide vraiment à nous avec nos produits.
Les changements de spécification sont inévitables, mais en étant transparent avec les utilisateurs et surtout, les consulter fréquemment signifie que la plupart des modifications sont capturées le plus tôt possible.
C'est pourquoi il est presque impossible de planifier trop loin à l'avance, mais pas une excuse pour ne pas planifier du tout. Ne tombez pas trop profondément amoureux de vos projets et vous n'aurez pas à vous soucier de vous briser votre cœur.
À l'intérieur de votre entreprise, il y a un coût pour utiliser les ressources informatiques si quelqu'un l'admet, la piste ou doit être budgétiser pour cela ou non. La réalité est que votre équipe ne peut créer autant de code que dans un certain temps. Tous les départements et projets partageent ce budget.
Vous ne pouvez empêcher personne de vouloir modifier les exigences, mais ils ne peuvent pas échapper aux conséquences. Les changements peuvent augmenter de manière significative les temps de développement. C'est un fait qu'ils doivent traiter ou décider de ne pas faire le changement. Une demande d'un ministère affecte-t-elle une autre? Vous devrez peut-être devoir déplacer complètement leur projet derrière un autre ministère, car la demande de changement empiétera sur le calendrier de l'autre groupe.
Pour moi, c'est assez facile.
[.____] Dites à celui-ci, le "Propriétaire du produit", qui a commandé les fonctionnalités que cela va bien, mais il doit choisir un couple de fonctionnalités planifiées qu'il pourrait être sans ces délais.
[.
Ps. Si c'est pas le "po" Je dirais que je ne me parle pas de me parler aller à la "po"
J'ai constaté que, directement ou indirectement, les clients sont la cause de la plupart des changements (et aussi des bugs les plus critiques, BTW). La solution évidente est donc d'éliminer les clients. (Quels sont-ils de toute façon?)
Quelles sont certaines des meilleures façons que vous avez trouvées pour minimiser et empêcher les changements de spécification de la culture à mi-chemin ou après le développement?
Il n'y a pas de meilleur moyen. Il appartient à la direction de limiter les modifications apportées aux spécifications dans la présente phase du développement.
Cependant, vous devez concevoir votre logiciel de telle manière d'attendre les changements. Ensuite, l'impact des changements serait beaucoup moins. Développement itératif et incrémentiel est un bon départ.
Puisque vous ne pouvez pas empêcher le changement, vous devez l'embrasser. Je pense que la chose la plus importante que vous puissiez faire est la suivante: vous devez essayer de obtenir les demandes de changement du client le plus tôt possible, car il est moins coûteux de changer de choses quand il n'y a que peu de code. Vous devez donc présenter votre conception le plus tôt possible au client à l'aide de prototypes (peut-être même un prototype de papier), utilisez des méthodes agiles et ainsi de suite.
Vous pouvez envisager d'introduire une certaine discipline dans le processus de développement en utilisant une méthodologie comme Scrum. Dans Scrum, une équipe constitue un plan initial en divisant la mise en œuvre de fonctionnalités dans histoires et en attribuant chaque histoire un estimation d'effort (nombre d'heures de travail ou de jours nécessaires pour mettre en œuvre cette histoire).
Si un changement tardif est demandé (pour une histoire déjà mise en œuvre), vous devez créer une nouvelle histoire et estimer l'effort de mise en œuvre pour cela. Ensuite, vous pouvez aller à votre responsable (le propriétaire du produit) et expliquer simplement que la nouvelle fonctionnalité va coûter ce temps supplémentaire. Le gestionnaire de projet a alors la responsabilité d'accepter l'effort supplémentaire et d'ajuster l'horaire (éventuellement annuler d'autres histoires non encore implémentées).
Même si votre équipe ne mettra pas pleinement implémenter Scrum ou un autre processus de développement, vous pouvez au moins introduire la planification basée sur -histoires, estimer l'effort de développement pour chaque histoire et ajuster le calendrier lorsque de nouvelles histoires sont demandées. .
Une approche que j'ai constatée que cela fonctionne une sorte d'ok (pas avec tous les gestionnaires évidemment) est "Je pense que je peux le faire, oui. Cela dépend - combien de temps pratiquez-vous à ce projet? C'est un changement assez important que vous êtes demandant. "