Je fais partie d'une équipe de projet de 4 développeurs, moi y compris. Nous avons eu une longue discussion sur la façon de gérer le travail supplémentaire qui survient au cours d'un seul élément de travail.
Ce travail supplémentaire est généralement des choses qui sont légèrement liées à la tâche, mais pas toujours nécessaires pour atteindre l'objectif de l'élément (qui peut être une opinion). Les exemples incluent mais ne sont pas limités à:
- refactoring du code modifié par le work item
- refactoring de code voisin du code modifié par l'article
- ré-architecturer la zone de code plus large autour du ticket. Par exemple, si un élément vous fait changer une seule fonction, vous réalisez que la classe entière pourrait maintenant être refaite pour mieux s'adapter à ce changement.
- améliorer l'interface utilisateur sur un formulaire que vous venez de modifier
Lorsque ce travail supplémentaire est petit, cela ne nous dérange pas. Le problème est lorsque ce travail supplémentaire entraîne une extension substantielle de l'élément au-delà de l'estimation du point de caractéristique d'origine. Parfois, un élément de 5 points prend en fait 13 points de temps. Dans un cas, nous avions un élément de 13 points qui, rétrospectivement, aurait pu être de 80 points ou plus.
Il y a deux options dans notre discussion pour savoir comment gérer cela.
Nous pouvons accepter le travail supplémentaire dans le même élément de travail et l'écrire comme une erreur d'estimation. Les arguments pour cela ont inclus:
- Nous prévoyons un "rembourrage" à la fin du sprint pour tenir compte de ce genre de chose.
- Laissez toujours le code en meilleure forme que vous ne l'avez trouvé. N'enregistrez pas de travail à demi-cul.
- Si nous laissons le refactoring pour plus tard, il est difficile de planifier et peut ne jamais se faire.
- Vous êtes dans le meilleur "contexte" mental pour gérer ce travail maintenant, puisque vous êtes déjà profondément ancré dans le code. Mieux vaut le supprimer maintenant et être plus efficace que de perdre ce contexte lorsque vous reviendrez plus tard.
Nous dessinons une ligne pour l'élément de travail en cours et disons que le travail supplémentaire va dans un ticket séparé. Les arguments incluent:
- Avoir un ticket séparé permet une nouvelle estimation, donc nous ne nous mentons pas sur le nombre de points, ni ne devons admettre que toutes nos estimations sont terribles.
- Le "rembourrage" de sprint est destiné aux défis techniques inattendus qui sont des obstacles directs à l'accomplissement des exigences de ticket. Il n'est pas destiné aux articles secondaires qui sont juste "beaux à avoir".
- Si vous souhaitez planifier une refactorisation, placez-la simplement en haut de l'arriéré.
- Il n'y a aucun moyen pour nous de bien tenir compte de ces éléments dans une estimation, car cela semble quelque peu arbitraire quand il se présente. Un réviseur de code pourrait dire "ces contrôles d'interface utilisateur (que vous n'avez pas réellement modifiés dans cet élément de travail) sont un peu déroutants, pouvez-vous résoudre ce problème aussi?" ce qui est comme une heure, mais ils pourraient dire "Eh bien, si ce contrôle hérite maintenant de la même classe de base que les autres, pourquoi ne pas déplacer tout ce code (des centaines de lignes de) dans la base et recâbler tout ce genre de choses , les changements en cascade, etc.? " Et cela prend une semaine.
- Il "contamine la scène du crime" en ajoutant un travail sans rapport avec le ticket, ce qui rend nos estimations de points de fonctionnalité originales sans signification.
- Dans certains cas, le travail supplémentaire reporte un enregistrement, provoquant un blocage entre les développeurs.
Certains d'entre nous disent maintenant que nous devrions décider d'une coupure, comme si les choses supplémentaires sont inférieures à 2 FP, elles vont dans le même ticket, si c'est plus, faites-en un nouveau ticket.
Étant donné que nous n'utilisons que Agile depuis quelques mois, quelle est l'opinion de tous les vétérans agiles les plus expérimentés ici sur la façon de gérer cela?
la source
Les points d'histoire sont une estimation de la complexité relative d'une histoire d'utilisateur donnée. Il semble que vous utilisiez des points d'histoire pour dire que cela prendra X jours / heures. Au lieu de cela, visez deux objectifs
Au fil du temps, cela vous donnera une référence pour la vitesse. Chaque histoire de 5 points ne prendra pas le même temps que les autres, mais la vitesse moyenne par sprint (combien de points d'histoire l'équipe peut compléter) sera cohérente.
S'inquiéter du temps que prendra une histoire spécifique est contre-productif. Les estimations ne font que la moyenne sur des histoires de taille cohérente en volume (IE un pointeur 5 peut prendre un peu plus de temps en raison de la refactorisation, mais vous tirez le bénéfice de cet effort sur un autre).
la source
Il devrait y avoir une coupure relative entre la quantité contenue dans l'élément de travail d'origine et la quantité autre chose. Les histoires d'utilisateurs sont des points de départ pour les discussions et il peut donc y avoir toutes sortes d'éléments de portée à clouer pendant un sprint tout en travaillant sur une histoire.
Il peut y avoir des moments où dans une planification de sprint une histoire peut être ajoutée à des critères supplémentaires afin d'éviter un "fluage de portée" qui peut se produire lorsqu'un utilisateur souhaite un nouveau formulaire, puis 101 modifications de ce formulaire, ce qui n'est pas réaliste. se faire dans un sprint de 2 semaines parfois.
Un revers à garder à l'esprit est la valeur ajoutée de ce travail supplémentaire. Il peut y avoir des tonnes de refactorisations possibles qui pourraient être faites, mais quel avantage y a-t-il pour quiconque pour tout ce travail? C'est là qu'il doit y avoir des lignes directrices pour aider à bien travailler l'équipe mais ne pas se perdre en essayant de rendre le code parfait.
la source