Agile - Qu'est-ce que nous faisons de mal?

22

Je suis développeur dans une équipe agile et nous essayons d'utiliser Scrum.

Je vais donc mettre ici un problème hypothétique pour illustrer la situation.

Nous avons une très ancienne application, utilisant du code JQuery de maintenabilité désordonné et mauvais. Nous avons également des parties de l'application utilisant React, et ces parties sont beaucoup plus faciles à mettre à jour / à maintenir. En plus de cela, l'objectif de l'entreprise est de créer une application cliente d'une seule page, sur React, donc l'utilisation de JQuery vous éloigne davantage de cela.

Lorsque nous faisons la planification, nous optons toujours pour la solution facile en termes de temps de développement, donc par exemple si nous créons une nouvelle boîte de dialogue ou quelque chose, nous utilisons l'ancien JQuery parce que c'est plus rapide, et nous disons que nous revenons plus tard pour ranger et transformer en React, mais cela arrive rarement.

Nous obtenons les exigences de ce que nous devons faire à partir des histoires d'utilisateurs (qui sont bien faites IMO, elles sont minces mais elles expliquent ce que nous faisons et pourquoi nous le faisons).

Parfois, les exigences des nouvelles fonctionnalités sont très minces, donc pour un exemple si une exigence dit "créer une boîte de dialogue qui charge des tonnes de contenu" mais ne dit pas d'implémenter une fonctionnalité de chargement, nous, dans la plupart des cas, ne l'implémenterons pas , même si nous savons tous que ce serait mieux pour les clients, car cela pourrait compromettre notre objectif de sprint (même si je pense personnellement que ce ne serait pas le cas).

Le résultat est que notre base de code est un gros gâchis avec une très mauvaise maintenabilité, et les nouvelles fonctionnalités parfois, sont très petites et prennent un sprint complet à faire (quelque chose qui pourrait être réalisé en une seule journée dans une bonne base de code) principalement à cause de ce développement stratégie, allez vite, faites le minimum.

Dans ce cas, que faisons-nous de mal? Devrions-nous aborder les solutions de manière plus complète afin de ne pas toujours écrire de mauvais code et réécrire du code que nous venons d'écrire la semaine dernière? Ou devrions-nous continuer à le faire en nous assurant simplement que tout ce code est en cours de réécriture? Quelle serait une bonne approche agile de ce problème?

Gabriel Slomka
la source
21
"Le résultat est que notre base de code est un gros gâchis avec une très mauvaise maintenabilité, principalement à cause de cette stratégie de développement, allez vite, faites le minimum." - Il semble que vous ayez déjà une bonne idée du problème, mais je ne suis pas sûr qu'il ait vraiment beaucoup à voir avec Agile. Vous pouvez obtenir le codage du ruban adhésif quelle que soit la méthodologie que vous utilisez.
Nathanael
Comment prévoir cela en agile? Les gens comprennent l'incrémental comme un enregistrement puis une fixation.
Gabriel Slomka
7
"Les gens comprennent l'incrémentiel comme du scotch du canard puis de la fixation." - ce n'est certainement pas ce qu'est la mêlée. Si les «gens» pensent cela, ils comprennent mal la mêlée.
Bryan Oakley
9
Pour citer Eric Lippert: si vous vous êtes enfoncé dans un trou, la première chose à faire est de cesser de creuser.
Doc Brown
5
Votre équipe suit-elle la «règle du boy-scout» (laisser un endroit toujours dans un meilleur état qu'il ne l'était lorsque vous y êtes entré)? Commencez par ça. De plus, les revues de code, les tests d'écriture et le refactoring régulier sont également des techniques utiles.
Doc Brown

Réponses:

56

Cela n'a rien à voir avec Agile ou Scrum.

Le problème avec "du ruban adhésif maintenant et nous le réparerons plus tard" est que plus tard ne vient jamais et en attendant vous accumulez beaucoup de dettes techniques .

La première étape du rétablissement consiste à reconnaître le problème et à ne pas l'aggraver.

Pour chaque nouvelle user story, l'équipe doit considérer "quelle est la bonne façon de coder cela?", Et non "quelle est la manière la plus rapide de pirater cela?" et planifier les sprints en conséquence.

Pour résoudre le problème existant, consultez les excellentes réponses à J'ai hérité de 200K lignes de code spaghetti - et maintenant?

Dan Pichelman
la source
De plus, je pense que la plupart des problèmes comme celui-ci sont causés par l'absence d'un gestionnaire expérimenté qui sait comment résoudre ces problèmes et, au lieu de cela, remplacer le gestionnaire par des méthodologies nommées que l'on lit en ligne. Un avantage de ceci est maintenant que la méthode est à blâmer au lieu du gestionnaire.
Rob
1
La réponse est simplement la suivante. Bien mis et très précis. SCRUM est juste une façon de travailler, si vous décidez de travailler avec du ruban adhésif au lieu de ruban de finition, c'est à vous.
coteyr
Vous obtenez ce pour quoi vous incitez. Si vous maintenez les gens sous une pression constante sur les délais (sprints de Scrum), vous incitez les gens à prendre des raccourcis. Ainsi, la dette technologique s'accumule.
Michael B
22

Ce que vous avez là, c'est ce que Martin Fowler appelle "la mêlée flacide".

Si vous lisez correctement les 12 principes derrière le Manifeste Agile , vous découvrirez que vous échouez à la plupart d'entre eux.

Fournissez fréquemment des logiciels fonctionnels, de quelques semaines à quelques mois, en privilégiant les délais plus courts.

Pouvez-vous dire que vous livrez un logiciel vraiment fonctionnel? Ou tout simplement un logiciel qui fonctionne à peine?

Les processus agiles favorisent le développement durable. Les sponsors, développeurs et utilisateurs devraient pouvoir maintenir un rythme constant indéfiniment.

Pouvez-vous dire que votre processus est durable? Prenez-vous des décisions en tenant compte de la durabilité? Ou choisissez-vous des solutions qui résolvent le problème actuel sans tenir compte des effets à long terme?

Une attention continue à l'excellence technique et à une bonne conception améliore l'agilité.

Le principe vraiment majeur. Je crois que cela devrait être mis dans les ÉNORMES LETTRES ROUGES sur la page. C'est là que vous échouez le plus.

À intervalles réguliers, l'équipe réfléchit à la façon de devenir plus efficace, puis ajuste et ajuste son comportement en conséquence.

Et bien évidemment. Si vous découvrez que votre comportement ne mène pas aux résultats souhaités, vous devez le changer. Si votre équipe ne voit pas qu'elle a des problèmes, elle ne peut pas commencer à les résoudre.

De votre commentaire

Comment prévoir cela en agile?

Tout d'abord, en apprenant ce qu'est réellement l'agilité. Scrum n'est pas agile. Certains diront que Scrum est le pire des cadres agiles, car il est trop facile d'atteindre votre situation exacte. Vous devez en savoir plus sur les autres cadres agiles. Celui que je recommanderais est Extreme Programming. Ce qui résout clairement vos problèmes. Les solutions ne sont pas simples (se concentrer sur l'excellence technique grâce à des tests automatisés robustes, la programmation de paires et la livraison continue), mais très efficaces. Comme indiqué dans le rapport State of DevOps .

Euphorique
la source
6
"Certains diraient que Scrum ... est trop facile pour atteindre votre situation exacte." . Je ne pense pas que ce soit vrai du tout. Faire mal à Scrum pourrait conduire à cette situation exacte, mais Scrum ne prend pas en charge la solution la moins chère possible, sauf si c'est exactement ce que le client veut.
Bryan Oakley
1
@BryanOakley Ce que je veux dire, c'est que si le processus ne prescrit pas de faire X, alors les gens ne feront pas X. Et Scrum ne prescrit aucune pratique qui réduirait la dette technique. Bien au contraire, comme si seul le travail à effectuer est défini par PO, aucune dette technique ne sera supprimée. Comme PO n'a aucune raison de s'en soucier. La dette technique n'est que la responsabilité de l'équipe.
Euphoric
2
"Scrum ne prescrit aucune pratique susceptible de réduire la dette technique." - elle ne prescrit pas non plus de pratiques augmentant la dette technique.
Bryan Oakley
2
@BryanOakley Le point de la dette technique est qu'il est naturel qu'elle augmente. Et il faut travailler pour la diminuer. Resté seul, il se développera de façon incontrôlable.
Euphoric
4
Si l'OP est le seul à recevoir des informations sur ce qui se passe dans le sprint, l'OP joue mal son rôle. C'est leur travail de décider de ce qui est le plus important en discutant avec tous ceux qui sont impliqués dans le processus de production, et cela inclut le reste de leur équipe.
Erik
9

Ce que vous décrivez est - du moins d'après mon expérience - un modèle émergent assez courant d'équipes essayant «d'être agiles». Il est possible de débattre si cela fait réellement partie de l'Agile lui-même ou si une mauvaise mise en œuvre courante de celui-ci, est contraire au manifeste / aux principes agiles ou à une conséquence inhérente de celui-ci, etc. D'un point de vue empirique et sur la base de mon propre petit échantillon d'expérience (et des personnes à qui je parle), si une équipe est agile, elle semble avoir une chance supérieure à la moyenne de tomber sur ce modèle. Restons-en là et concentrons-nous sur votre exemple concret.

Ce que vous décrivez comporte deux aspects distincts :

  • Manque de compréhension / vision commune et donc pas efficace
  • Comment mesurer le succès / progrès et le coût total

Prendre le mauvais chemin ou tourner en rond

D'après mon expérience, la principale raison pour laquelle cela se produit est que, dans le but de produire du code rapidement, les équipes repoussent activement les cas d'utilisation ou les exigences qu'elles connaissent déjà ou pourraient facilement découvrir. Pensez-y de cette façon: il y a 10-20 ans, les gens essayaient d'écrire des spécifications géantes et pensaient à tout à l'avance et échouaient souvent. Soit ils ont pris trop de temps, soit ils ont oublié quelque chose. L'un des enseignements du passé est que, dans le développement de logiciels, il y a des choses que vous ne pouvez pas savoir et les choses changent beaucoup, d'où l'idée d'itérer rapidement et de produire rapidement des sorties sensibles. C'est un très bon principe. Mais aujourd'hui, nous sommes à l'autre extrême: "Je m'en fiche parce que ça fait partie du prochain sprint" ou "Je ne dépose pas ce bug, je m'en occupe quand il revient".

  1. Rassemblez tous les cas d'utilisation de haut niveau , les exigences, les dépendances et les restrictions que vous pouvez trouver. Mettez-le dans un wiki pour que toutes les parties prenantes et les développeurs puissent les voir. Ajoutez-y quand quelque chose de nouveau arrive. Parlez à vos actionnaires et utilisateurs. Utilisez-la comme liste de contrôle lors du développement pour éviter d'implémenter des choses qui ne contribuent pas au produit final ou sont des solutions de contournement / hacks qui résolvent un problème mais en provoquent trois nouveaux.
  2. Formuler un concept de haut niveau . Je ne parle pas de concevoir des interfaces ou des classes, mais plutôt d'esquisser grossièrement le domaine problématique. Quels sont les principaux éléments, mécanismes et interactions de la solution finale? Dans votre cas, cela devrait être évident lorsque vous utilisez l'aide jquery-workaround comme une étape intermédiaire et quand cela ne provoque qu'un travail supplémentaire.
  3. Validez votre concept à l'aide de la liste que vous avez réunie. Y a-t-il des problèmes évidents? Est-ce que ça fait du sens? Existe-t-il des moyens plus efficaces d'atteindre la même valeur utilisateur sans engendrer de dette technologique à long terme?

N'en faites pas trop. Vous avez juste besoin de quelque chose pour que tout le monde dans l'équipe (y compris les non-développeurs) ait une compréhension commune de la meilleure voie vers votre MVP. Tout le monde devrait convenir qu'il n'y a pas d'oubli évident et que cela pourrait réellement fonctionner. En général, cela permet d'éviter de tomber dans des impasses ou d'avoir à refaire la même chose plusieurs fois. Agile peut vous aider à mieux faire face à l'inattendu, ce n'est pas un argument pour ignorer ce qui est connu.

Soyez conscient de l' erreur de coût irrécupérable : si vous commencez avec une architecture ou un type de base de données, la plupart des gens hésitent à le changer à mi-projet. C'est donc une bonne idée d'investir un peu de temps pour avoir une «meilleure supposition éclairée» avant de commencer à mettre en œuvre des choses. Les développeurs ont tendance à vouloir écrire du code rapidement. Mais souvent, avoir quelques simulations, des prototypes en direct, des captures d'écran, des images filaires, etc. permet une itération encore plus rapide que l'écriture de code. Sachez simplement que chaque ligne de code écrite ou même les tests unitaires rendent plus difficile de modifier à nouveau votre concept global.

Mesurer le succès

Un aspect complètement différent est la façon dont vous mesurez les progrès. Disons que l'objectif de votre projet est de construire une tour de 1m de haut en utilisant des objets qui traînent. Construire un château de cartes peut être une solution totalement valable si, par exemple, le temps de mise sur le marché est plus important que la stabilité. Si votre objectif est de construire quelque chose qui dure, utiliser Lego aurait été mieux. Le point est: ce qui est considéré comme un hack et quelle solution élégante dépend entièrement de la façon dont le succès du projet est mesuré .

Votre exemple de "chargement" est assez bon. J'ai eu des choses comme ça dans le passé où tout le monde (y compris les ventes, PO, les utilisateurs) a convenu que c'était ennuyeux. Mais cela n'a eu aucun impact sur le succès du produit et n'a provoqué aucune dette à long terme. Nous l'avons donc abandonné car il y avait des choses plus précieuses à faire avec les ressources de développement.

Mon conseil ici est:

  1. Gardez tout, même les petits bugs, comme tickets dans votre système de tickets . Prenez une décision active ce qui est dans la portée du projet et ce qui ne l'est pas. Créez des jalons ou filtrez autrement votre backlog afin d'avoir toujours une liste "complète" de tout ce qui reste à faire.
  2. Avoir un ordre d'importance strict et un point de coupure clair où le projet pourrait être considéré comme un succès. De quel niveau de stabilité / qualité de code / documentation le produit final a-t-il réellement besoin? Essayez de passer chaque jour de travail le mieux possible en choisissant par le haut. Lorsque vous travaillez sur un ticket, essayez de le résoudre complètement sans introduire de nouveaux tickets (à moins qu'il ne soit logique de reporter les choses en raison d'une priorité inférieure). Chaque engagement devrait vous faire avancer vers votre objectif final, pas latéralement ou en arrière. Mais pour le souligner à nouveau: parfois un hack qui produit du travail supplémentaire plus tard peut toujours être un net positif pour le projet!
  3. Utilisez votre PO / utilisateurs pour déterminer la valeur utilisateur, mais demandez également à vos développeurs de calculer le coût de la technologie . Les non-développeurs ne peuvent généralement pas juger du véritable coût à long terme (pas seulement du coût de mise en œuvre!), Alors aidez-les. Soyez conscient du problème de la grenouille bouillante: beaucoup de petits problèmes non pertinents peuvent au fil du temps mettre une équipe en attente. Essayez de quantifier l'efficacité de votre équipe.
  4. Gardez un œil sur l'objectif / les coûts globaux. Au lieu de penser de sprint en sprint, gardez plutôt un état d'esprit "pouvons-nous en tant qu'équipe faire tout ce qui est nécessaire jusqu'à la fin du projet" . Les sprints ne sont qu'un moyen de décomposer les choses et d'avoir des points de contrôle.
  5. Au lieu de vouloir montrer quelque chose tôt, tracez votre cours sur le chemin le plus rapide vers un produit minimum viable qui peut être donné à l'utilisateur. Pourtant, votre stratégie globale devrait permettre des résultats vérifiables entre les deux.

Donc, lorsque quelqu'un fait quelque chose qui ne correspond pas à votre objectif de mise en œuvre final, idéalement, ne considérez pas l'histoire comme terminée. S'il est avantageux de clôturer l'histoire (par exemple pour obtenir des commentaires des clients), ouvrez immédiatement une nouvelle histoire / bogue pour remédier aux brèves lacunes. Faites en sorte que la prise de raccourcis ne réduise pas les coûts, elle les masque ou les retarde!

L'astuce ici est d'argumenter avec le coût total du projet: si par exemple un bon de commande pousse à prendre des raccourcis pour faire un délai, quantifier la quantité de travail qui doit être fait par la suite pour considérer le projet fait!

Méfiez - vous également de l' optimisation basée sur des critères : si votre équipe est mesurée par le nombre d'histoires qu'elle peut montrer lors d'une revue de sprint, la meilleure façon d'obtenir un bon «score» est de couper chaque histoire en dix minuscules. S'il est mesuré par le nombre de tests unitaires écrits, il aura tendance à écrire beaucoup de tests inutiles. Ne comptez pas les histoires, ayez plutôt une mesure de la quantité de fonctionnalités utilisateur nécessaires, de l'ampleur du coût de la dette technologique à résoudre dans le cadre du projet, etc.

Sommaire

Pour résumer: aller vite et minimal est une bonne approche. Le problème réside dans l'interprétation de «rapide» et «minimal». Il faut toujours considérer le coût à long terme (sauf si vous avez un projet où cela n'est pas pertinent). L'utilisation d'un raccourci qui ne prend qu'un jour mais génère une dette technique d'un mois après la date d'expédition coûte plus cher à votre entreprise qu'une solution qui a pris une semaine. Commencer immédiatement à écrire des tests semble rapide, mais pas si votre concept est défectueux et qu'ils cimentent une mauvaise approche.

Et gardez à l'esprit ce que signifie "à long terme" dans votre cas: je connais plus d'une entreprise qui a fait faillite en essayant d'écrire du bon code et donc expédiée trop tard. Une bonne architecture ou un code propre - du point de vue de l'entreprise - n'a de valeur que si le coût pour y parvenir est inférieur à celui de ne pas l'avoir.

J'espère que ça t'as aidé!

AlexK
la source
«Pensez-y de cette façon: il y a 10-20 ans, les gens essayaient d'écrire des spécifications géantes et pensaient à tout à l'avance et échouaient souvent. . Dire que c'est juste un lieu commun de marketing pour opposer l'agilité à un passé mythique dans lequel les gens se trompaient en planifiant trop. Ne pas trop planifier et produire un premier prototype ont été parmi les premières leçons que j'ai apprises vers 1998 environ. Le mouvement agile utilise en partie simplement de nouveaux mots pour des pratiques bien connues et les commercialise comme nouveaux.
Giorgio
Certes, cela dépend bien sûr de ses propres expériences. En fait, j'étais sur quelques projets avec de grands constructeurs automobiles conservateurs et vous ne croiriez pas à quel point les spécifications étaient détaillées avant qu'une seule ligne de code ne soit écrite. Autant que ce que j'ai décrit était extrême, il y a beaucoup d'entreprises de nos jours qui ne font pas de création appropriée (que je n'ai jamais connue à l'époque). Il y a et il y a toujours eu des exemples de chaque point du spectre entre ces deux extrêmes. Mais je constate au moins que la tendance générale a sensiblement changé vers la fin du "pas de création".
AlexK
7

Du point de vue de la mêlée, il semble que ce que vous faites mal, c'est que vous ne travaillez pas avec le client. Vous devez travailler avec le client pour comprendre ce dont il a besoin et pas seulement ce qu'il veut . Ont-ils besoin d'une série de solutions rapides ou ont-ils besoin d'un système stable et maintenable qui les servira à long terme? Cela peut être difficile à déterminer, mais la qualité est autant une exigence qu'une couleur d'arrière-plan ou une référence de performance. Le client doit être conscient que la stabilité et la maintenabilité ne sont pas gratuites et doivent être intégrées au produit.

S'ils disent que c'est le premier, vous ne faites rien de mal - en supposant que vous leur expliquez dans les revues de sprint que vous coupez les coins techniques pour atteindre leurs objectifs.

S'ils disent que c'est le dernier, alors ce que vous faites mal, c'est que vous ne leur donnez pas ce qu'ils veulent.

L'une des pierres angulaires de Scrum est la transparence. Si vous faites de la mêlée, vous devriez faire des revues de sprint avec le client. Dans ces avis, dites-vous au client que vous prenez des mesures afin de fournir des logiciels plus rapidement? Sinon, vous devriez l'être. Vous devez être à 100% clair avec votre client sur les ramifications de vos choix de conception, pour lui donner une chance de prendre une décision éclairée quant à savoir si vous livrez votre logiciel avec un niveau de qualité approprié.

Bryan Oakley
la source
3
Lorsque vous travaillez avec le client, assurez-vous de comprendre ce dont il a besoin , pas ce qu'il dit vouloir. À peu près n'importe quel client choisira la solution la moins chère et la plus rapide à chaque problème, c'est le travail de l'équipe d'ingénierie de déterminer quelle est l'option la moins chère qui couvre toujours tout ce dont ils ont vraiment besoin.
Erik
1
@Erik: excellent commentaire. C'est pourquoi j'ai écrit à l'origine _ "pour comprendre ce dont ils ont besoin" plutôt que "... ils veulent". Je peux voir, cependant, que ce n'est pas beaucoup souligné. J'ajouterai un peu plus d'emphase et d'explication. Merci pour le commentaire.
Bryan Oakley
5

Ewan a raison. La raison pour laquelle la direction aime Scrum, c'est parce qu'elle obtient des fonctionnalités dans un style staccato et obtient des résultats rapidement. Jusqu'à ce que le désordre qui en résulte soit le problème de quelqu'un d'autre.

Maintenant que j'ai votre attention, laissez-moi vous expliquer. Ce n'est pas Scrum en tant que tel. C'est le cadre typique d'un chef de produit solide et d'une équipe de développement faible qui n'est pas en mesure de faire des estimations raisonnables et réalistes car ils ressentent la pression. Ils arrivent donc à des estimations très optimistes et s'attaquent plus profondément aux problèmes, coupant les coins afin de livrer à temps.

Dans Scrum, vous (en tant que développeur) pouvez faire votre propre planification. Personne ne vous dit de livrer une fonctionnalité en x jours. Si quelqu'un vous dit de livrer dans x jours, vous ne faites pas Scrum.

Quel que soit le problème à résoudre, réclamez votre temps. Pensez-vous que vous avez besoin de temps pour retravailler quelque chose en premier? Incorporez-le à votre estimation. Pouvez-vous vous le permettre?

Martin Maat
la source
3

Examinons ce que vous faites, en laissant de côté Agile pendant un moment.

Lorsque nous faisons la planification, nous optons toujours pour la solution facile en termes de temps de développement, donc par exemple si nous créons un nouveau dialogue ou quelque chose, nous utilisons l'ancien jquery parce que c'est plus rapide, et nous disons que nous allons revenir plus tard pour ranger et transformer en réagir, mais cela arrive rarement.

C'est ce qu'on appelle «Prendre la dette technique». Martin Fowler a décrit le "Quadrant de la dette technique" dans un de ses articles sur les deux axes: "Reckless vs Prudent" et "Deliberate vs. Inadvertent".

Vous décidez explicitement d'utiliser l' ancienne technologie jquery connue qui vous éloigne de l'un de vos objectifs express (à savoir une application d'une seule page). Vous faites cela pour livrer "rapidement". C'est délibéré.

Ce que ce calcul de «rapidement» n'inclut pas, c'est le temps dont vous avez besoin pour implémenter la fonctionnalité pour réagir ensuite. Vous choisissez une alternative qui n'a que des inconvénients par rapport à l'alternative que vous savez être la bonne (à savoir prendre le temps de mettre en œuvre la fonctionnalité en réaction) sur la base d'une évaluation que la vitesse est essentielle. C'est téméraire.

Martin Fowler résume ce type de dette sous "Nous n'avons pas le temps de concevoir". C'est un choix approprié dans un environnement où vous ne vous attendez pas à maintenir le code ou même à coder pendant plus de quelques jours. Mais votre projet est un projet de longue durée qui implique explicitement une maintenance pour vos clients

Ce que vous faites est mal au niveau très basique. C'est une mauvaise ingénierie !

Vous avez contracté une dette technique, ignorant que cette dette doit être remboursée et qu'elle charge des intérêts. Et vous avez continué à le faire jusqu'à ce que le taux d'intérêt sur votre dette commence à se rapprocher de votre travail disponible pendant votre sprint.

Ce que vous devriez faire, c'est réduire le niveau de la dette . Parlez à votre patron, parlez à votre client. Vous devez travailler sur la maintenabilité hier.

Vogel612
la source
2

Arrêtez d'utiliser Agile ...

Ou plutôt, arrêtez d'essayer de faire quelque chose d'une certaine manière uniquement parce que c'est ce que (votre compréhension de) agile (ou scrum etc ...) dicte. Essayer d'appliquer une (mauvaise) interprétation de l'un de ces termes à un projet au mauvais stade peut rapidement devenir la pire solution. Utilisez plutôt votre raison.

La raison pour laquelle votre projet, et presque tous les autres projets dans le monde, est un gâchis de code et d'approches divergentes, est due au manque de conception architecturale centralisée et omnisciente (là, je l'ai dit).

Les raisons pour lesquelles cela pourrait faire défaut sont les suivantes:

  • L'architecte n'a pas l'expertise (comme vos dix premiers projets de loisirs)
  • L'architecte n'a pas le temps
  • L'architecte n'a pas le pouvoir (le gestionnaire dit non, ou oui mais seulement pour certaines parties)
  • L'équipe a confiance en une méthodologie vaudou qui les sauvera (tout se résoudra car nous utilisons Agile)

La solution simple est de laisser tomber tous ces mots magiques et de regarder la réalité de la situation, qui peut se résumer comme suit:

  1. L'état du code entrave la capacité de l'équipe à livrer à temps et sans bogue.
  2. Plus nous ajoutons de fonctionnalités, pire cela deviendra.
  3. Par conséquent, il est vraiment judicieux de mettre en pause, de réévaluer et (peut-être radicalement) de repenser les pièces.

Vous arriverez naturellement à vous demander pourquoi il est arrivé à cet état en premier lieu, avec le doigt du blâme qui tourne en rond. La réponse est que cela est inévitable: à mesure que votre conception mûrit, vous réalisez que vous auriez dû le faire différemment, mais vous ne pouviez pas le prévoir. De plus, ce n'est pas une réalisation unique par projet, cela se produira plusieurs fois, et vous devez le planifier.

Cela dit, les gestionnaires peuvent faire beaucoup de choses pour exacerber les choses:

  1. Deathmarching vos devs aux délais.
  2. Dire que les développeurs ne peuvent enregistrer le temps que sur les tickets, sans qu'il y ait de tickets pour "réflexion, consolidation et refactoring de qualité" et une allocation de temps généreuse sur ceux-ci.
  3. Ne pas donner à une seule personne la propriété de l'architecture pendant assez longtemps pour la maîtriser
  4. Ne pas permettre à cette personne d'apporter les changements qu'elle juge nécessaires

En le regardant de cette façon, il est facile de voir comment certaines interprétations de l'agile et de la mêlée vous feront avancer encore plus rapidement sur cette voie!

Une approche consiste à créer des tickets pour chaque bit de refactoring. Le problème est que souvent vous ne réalisez pas que vous avez besoin d'un grand refactoriseur jusqu'à ce que vous commenciez à travailler sur un ticket plus petit, ce qui repousse les délais, et que le ticket passe par des boucles d'approbation, il ralentit tout simplement.

Une autre approche consiste à planifier des sprints pour n'utiliser que 25 à 50% de la capacité de votre équipe. Les développeurs enregistrent ensuite leur temps sur les vrais tickets (notez le temps que cela aurait dû prendre sans refactorisation) et le temps de refactoring (un gros ticket pour la semaine, pas de boucles d'approbation, uniquement des discussions entre les développeurs). S'il n'y a pas de refactoring, vous pouvez retirer les tickets du sprint de la semaine prochaine. Vous ajustez le curseur de pourcentage pour les semaines à venir à mesure que le code sous-jacent du projet s'améliore.

Donc, pour répondre "qu'est-ce que nous faisons de mal", je dirais que vous faites confiance à une méthodologie par rapport au bon sens. Vous demandez même une "approche agile de ce problème" . Je dirais de laisser tomber les mots et de réfléchir au problème réel. Si vous voulez vraiment séparer divers manifestes essayant de déchiffrer si votre approche finale de bon sens tombe bien sous le couvert de "agile" ou "scrum", allez-y certainement :-)

AndyHasIt
la source
-1

Vous ne faites rien de mal. Ce type de méthodologie est conçu pour fournir des fonctionnalités selon les spécifications et le plus rapidement possible.

Si vous avez des objectifs secondaires vers lesquels vous travaillez, il vaut mieux les exprimer comme des «exigences non fonctionnelles» ou une «définition du fait».

par exemple, vous pourriez avoir une exigence non fonctionnelle:

"Toutes les nouvelles fonctionnalités doivent être écrites dans React"

et

"Tous les appels asynchrones doivent implémenter un spinner de chargement et une gestion des erreurs"

Il vous suffit de faire en sorte que votre Product Owner (ou équivalent) convienne que ce sont des choses qui valent la peine d'être faites, plutôt que de les dissimuler parce que les développeurs les aiment.

Ewan
la source
"Ce type de méthodologie est conçu pour fournir des fonctionnalités selon les spécifications et le plus rapidement possible." - ce n'est certainement pas le but de Scrum. De la façon dont vous l'avez formulé, il n'est pas clair si c'est ce que vous vouliez dire ou non.
Bryan Oakley
désolé, je suppose qu'il s'agit de fournir des fonctionnalités trop conçues et tardives?
Ewan
Non, pas vraiment. Scrum consiste à travailler avec le client pour fournir des logiciels de haute qualité de manière itérative très visible. Scrum ne dit rien sur la fourniture de fonctionnalités de faible qualité au lieu de faire une ingénierie appropriée.
Bryan Oakley
2
si vous me pardonnez une critique, vous semblez avoir une idée très ferme de ce qu'est la mêlée. Mais si je vérifie le guide et les autres déclarations «officielles» aujourd'hui, tout semble très délicat. Je pense que vous auriez du mal à trouver une déclaration qui fasse une déclaration claire à ce sujet
Ewan
1
@Erik, ils pensent que c'est un gâchis parce qu'ils veulent utiliser réagir. L'équipe de développement ne peut tout simplement pas décider de tout refaçonner par elle-même. Le client refuserait de payer pour le sprint.
Ewan