Refinement

Anciennement nommé "Grooming".

Nommé en français "affinage".

Product Backlog items that can be Done by the Scrum Team within one Sprint are deemed ready for selection in a Sprint Planning event. They usually acquire this degree of transparency after refining activities. Product Backlog refinement is the act of breaking down and further defining Product Backlog items into smaller more precise items. This is an ongoing activity to add details, such as a description, order, and size. Attributes often vary with the domain of work.

source


Journaux liées à cette note :

Confusion entre issue tracker et backlog, et comment gérer la masse d'issues #project-management, #gestion-projet, #scrum

À la fin de la note "Collecter les sujets dans un issue tracker pour ne pas se répéter", je disais :

Un backlog est une liste d'items souvent extraits de l'ensemble des issues de l'issue tracker — un sous-ensemble volontairement restreint et de meilleure qualité. Priorisée, maintenue à jour et régulièrement affiné, cette liste représente le travail potentiel sérieusement envisagé pour le produit. Lors du Sprint Planning, les parties prenantes — développeurs, produit et autres contributeurs concernés — discutent et arbitrent ensemble les priorités pour décider quels items intégreront le Sprint Backlog.

source

Est-ce que toutes les issues ouvertes du issue tracker sont un backlog ? La réponse est non.

J'ai vu plusieurs fois des Product Managers arriver dans une organisation et être effrayés par la quantité d'issues présentes dans l'issue tracker — ils essayaient de passer en revue toutes les issues, pensant qu'il s'agissait du backlog.

Il me semble que cette confusion entre issue tracker et backlog est très classique — j'ai moi-même probablement entretenu cette confusion.
Les personnes issues de la culture open source sont habituées aux issue tracker, tandis que les Product Managers sont généralement plus familiers avec les Product Backlog.

Face à toutes ces issues, certains Product Managers font des choix radicaux pour garder la maîtrise :

  • fermer très rapidement toutes les issues non prioritaires
  • interdire l'utilisation d'un issue tracker
  • ignorer l'issue tracker et travailler dans un autre outil

Je ne conseille pas ces approches : elles suppriment d'un bloc ce qui fait la valeur d'un issue tracker (voir "Collecter les sujets dans un issue tracker pour ne pas se répéter").

À la place, je conseille dans un premier temps de ne pas se préoccuper de l'intégralité des issues, et de se concentrer uniquement sur les issues indiquées par ses collègues ainsi que sur celles que l'on a soi-même créées.

Pour suivre ces issues et constituer son backlog, je conseille d'utiliser des labels — sur GitLab, j'utilise par exemple backlog, backlog-stephane, next-sprint, next-next-sprint. Ces labels, combinés à des vues kanban, permettent à chaque membre de créer un backlog à partir d'un sous-ensemble restreint d'issues.

Cette approche par labels fonctionne, mais le problème est que ce workflow exige une rigueur importante et un protocole commun d'équipe — difficile à mettre en place sans un leadership fort qui l'impulse et le maintient.

C'est pour améliorer cette expérience utilisateur, que j'ai intégré les fonctionnalités suivantes dans la description du gestionnaire de projet de mes rêves :

  • Permettre de créer des portfolios d'issue par utilisateurs.
  • Implémenter un système de tags d'issues personnalisés où chaque utilisateur peut créer ses propres étiquettes. La visibilité de ces tags serait configurable : mode privé pour un usage personnel ou mode partagé pour les rendre disponibles aux autres utilisateurs.

source

De plus, j'imagine aussi une fonctionnalité permettant de « cacher » les issues, ou du moins de les rendre moins facilement accessibles aux nouveaux arrivants — non pas pour en interdire l'accès, mais pour réduire le bruit visuel et éviter qu'ils ne soient effrayés au point, après ce traumatisme, de les ignorer totalement.

Le triage régulier des issues (fermer et prioriser) est un travail laborieux, extrêmement difficile à maintenir dans la durée dès lors qu'un issue tracker contient beaucoup d'issues. Si je peux témoigner d'une chose, c'est que je n'ai probablement jamais réussi à le faire, ni vu quelqu'un y parvenir.

Concernant la fermeture des issues, certains projets configurent un système qui ferme automatiquement les issues après un certain temps sans activité. Personnellement, à la place de cela, je préfère un système qui poste un commentaire dans l'issue qui notifie et demande au créateur s'il juge qu'elle est toujours pertinente. En cas de non réponse après un temps imparti, l'issue peut être clôturée automatiquement.

Pour la priorisation des issues, toujours dans la description du gestionnaire de projet de mes rêves, j'ai imaginé la fonctionnalité suivante :

  • Système inspiré de Tinder pour prioriser les issues. L'application présente deux issues choisies selon un algorithme Elo et invite l'utilisateur à désigner celle qu'il considère comme prioritaire.

source

Collecter les sujets dans un issue tracker pour ne pas se répéter #project-management, #gestion-projet, #Doctrine

En essayant de répondre à une question d'un ami au sujet du chapitre 7 « Bets, Not Backlogs » du livre Shape Up de Basecamp, j'ai cherché à mettre des mots sur les raisons qui me poussent à utiliser un issue tracker, une pratique que j'expérimente depuis plus de 15 ans. Cette note est le résultat de cette réflexion.

Pendant 5 ans, de 2018 à 2023, j'ai utilisé GitLab comme outil de issue tracker, en équipe, dans deux organisations différentes.

Avant d'aller plus loin, il me semble utile de montrer concrètement les types d'issue présentes dans ces trackers (voir aussi ces labels) :

  • Bug — corriger un comportement qui ne correspond pas à ce qui est attendu
  • Feature — implémenter une nouvelle fonctionnalité
  • Enhancement — améliorer une capacité existante ; DoD : le comportement amélioré est mesurable ou observable
  • Knowledge Gap — répondre à une question sans réponse accessible ; DoD : répondre à la question, indiquer comment trouver la réponse à cette question, si l'information n'était pas documentée, alors la documenter ou améliorer la documentation existante
  • Spike — explorer une question technique ou une hypothèse incertaine dans un temps imparti ; DoD : du code est livré, une décision binaire est posée (concluante / non concluante) et documentée dans l'issue
  • Enabler — préparer le terrain technique pour qu'une ou plusieurs issues futures soient implémentables en moins de 10h ; DoD : mergé sur main sans régression, les issues qu'il débloque sont identifiées
  • User story développeur — exprimer un besoin d'infrastructure ou d'outillage interne sous forme de user story dont le "user" est un développeur ; DoD : code produit, environnement de développement amélioré, documentation ajoutée, etc.
  • Meta-spec-writing — décomposer un périmètre flou en issues actionnables ; DoD : les issues enfants sont créées, estimées et prêtes pour le sprint planning
  • Sprint planning — préparer et documenter une session de sprint planning ; DoD : date, participants et issues candidates documentés avant la réunion, décisions prises et issues assignées documentées après
  • Sprint retrospective — préparer et documenter une session de rétrospective ; DoD : date et sujets à aborder documentés avant la réunion, décisions et actions correctives documentées après, chaque action corrective génère une issue de suivi

Pourquoi je crée systématiquement une issue ?

Mon approche consiste à créer une issue dès qu'une idée, un bug ou un sujet émerge — même sans intention de le traiter immédiatement.
C'est un point qui me tient à cœur, parce qu'il m'agace profondément de voir les mêmes sujets resurgir sans cesse sans jamais être vraiment travaillés.
J'ai souvent observé dans les open spaces des conversations de 10-20 minutes autour d'un sujet où chacun y va de son opinion, de son intuition, de ses mises en garde et de ses objections, puis retourne à ses activités… pour recommencer le même débat deux jours plus tard. Tout ce qui a été dit est perdu et rarement approfondi.

Ces "conversations de couloir" récurrentes sont un symptôme classique de non-décision : personne ne bloque explicitement, personne n'avance vraiment — la discussion tourne en boucle, invisible et non tracée. Dans certains cas, elles dégénèrent en Stop Energy : les mêmes objections ressurgissent à chaque fois, épuisant le porteur de l'idée sans jamais produire de résolution.

Je préfère de loin créer l'issue avant toute conversation. À défaut, quand j'assiste à une discussion informelle qui tourne en rond, je la crée à chaud, y dépose les idées échangées, et la partage aux participants pour vérifier que j'ai bien retranscrit. La prochaine fois que le sujet resurgit, j'invite chacun à la lire et ajouter son commentaire ou voter "+1".

L'issue devient un espace formel où chacun peut argumenter et enrichir le fil à son rythme ; le Sprint Planning devient le moment de délibération légitime où l'équipe arbitre collectivement si l'issue doit être traitée dans le nouveau sprint ou non.

Cette rigueur n'est pas simple à tenir : quand l'équipe a l'habitude de tout régler à l'oral, créer une issue peut passer pour de la lourdeur bureaucratique. Je la tiens malgré tout, parce que le coût de la répétition me paraît plus élevé que celui du traçage. Surtout, à long terme, cela évite le brouillard organisationnel.

Cette utilisation d'un issue tracker s'inspire du monde du logiciel libre, où des issues peuvent rester ouvertes des années, voire des décennies, et servent de mémoire collective pour comprendre la complexité d'une demande, les trade-offs, les ressources disponibles.

Quand cette méthode est appliquée pendant plusieurs années dans une organisation, un issue tracker peut contenir des centaines voire des milliers d'issues ouvertes, mais ceci ne pose pas de problème car ces issues ne constituent pas un backlog.

Un backlog est une liste d'items extraits et sélectionnés de l'ensemble des issues de l'issue tracker — un sous-ensemble volontairement restreint et de meilleure qualité. Priorisée, maintenue à jour et régulièrement affiné, cette liste représente le travail potentiel sérieusement envisagé pour le produit. Lors du Sprint Planning, les parties prenantes — développeurs, produit et autres contributeurs concernés — discutent et arbitrent ensemble les priorités pour décider quels items intégreront le Sprint Backlog.

Exemples de labels de gestion de projet #scrum, #gestion-projet, #ressource

Voici-ci dessous, une partie de la liste de labels d'Issues que l'équipe tech de Spacefill utlisait sous GitLab. Cette liste de labels est le fruit d'un travail itératif d'environ 15 personnes, sur une période de 4 ans.

Voici comment cette liste a été élaborée :

  • Au départ, quelques labels ont été créés de manière organique par 3 développeurs et un product manager.
  • Après 3 mois d'usage, une page de documentation nommée "GitLab Spacefill labels" a été ajoutée au handbook de l'équipe.
  • Ensuite, au fur et à mesure des nouvelles problématiques rencontrées et de l'évolution des workflows, ce fichier de documentation a été amendé plus de 70 fois en 3 ans, par 11 contributeurs différents.
  • Ce document était modifié suivant le même processus que le reste du handbook et le code :
    • Une personne commençait par créer une issue pour décrire une problématique
    • Ensuite, cette même personne ou une autre faisait une proposition d'évolution du processus par la rédaction d'une Merge Request qui modifiait cette page de documentation
    • Puis cette Merge Request entrait dans une phase de review par l'équipe, était corrigée, amendée...
    • Et finalement, quand cette Merge Request était approuvée par toute l'équipe, elle était mergée et ensuite respectée par tous

J'ai conservé cette liste afin de pouvoir l'utiliser comme source d'inspiration ou de fondation pour mes prochains projets en équipe.

Pour ceux qui souhaitent s'en inspirer, je recommande de ne pas adopter cette liste intégralement d'emblée. Privilégiez plutôt une sélection ciblée des labels qui correspondent à vos processus actuels, puis incorporez progressivement de nouveaux labels selon l'évolution de vos besoins.

Mon expérience m'a démontré que la mise en place de processus dans une organisation humaine fonctionne mieux par petites étapes successives. Cette approche incrémentale s'avère bien plus efficace que de tenter d'imposer en bloc un processus complet qui risquerait d'être inadapté à votre contexte spécifique.

Voici cette liste.


Labels pour indiquer les types d'issue

Une issue doit avoir dans tous les cas un seul type.

Couleur : FOAD4E
  • type::user-story : une issue qui apporte une fonctionnalité à l'application
  • type::improve : une issue qui apporte une amélioration mineure à une fonctionnalité existante, qui est plus simple de ne pas exprimer sous forme d'une user story, et qui bien sûr n'est pas un bug.
  • type::documentation-and-process : problème ou amélioration d'un process ou d'une documentation interne (les deux sujets documentation et processus sont liés parce que les processus sont documentés). La documentation du logiciel à destination des usagers de l'application n'entre pas dans cette catégorie, elles sont du type user-story, improve ou bug.
  • type::enabler : un changement qui n'apporte pas directement de valeur aux utilisateurs de l'application. Ce type est utilisé pour des issues dont le but est d'améliorer l'expérience des développeurs (voir définitions : SAFe Enablers,Les enablers en agile)
  • type::technical-debt : definition, label à utiliser, par exemple pour des issues dont le bug est d'upgrader une librairie, d'améliorer une implémentation, ou une proposition de refactoring… Ce label ne doit pas être utilisé pour des issues "produit".
  • type::support-ops : pour les tâches de support qui ne nécessitent généralement pas de merge request, par exemple : des migrations de données, des corrections de données, des extractions de données…
  • type::spike : voir la definition
  • type::meta : pour des issues de type "meta", par exemple, des issues dont le but est de créer d'autres issues, de faire de l'affinage d'issues, ou organiser des rituels…
  • type::meta-spec-writing : pour des issues dont l'objectif est de créer des issues ou des Epic, dont le but est de rédiger des spécifications techniques, ce sont des sortes d'issues de type "meta", mais plus spécifiques.
Couleur : D9534F
  • type::bug : pour des issues qui décrivent des dysfonctionnements de l'application
  • type::bug-job-CI : pour des issues qui décrivent des bugs de CI

Labels pour indiquer la priorité des issues

Couleur : FF0000
  • priority::critical : une issue qui doit obligatoirement être traitée tout de suite par un développeur
  • priority::24h : une issue qui doit être traitée d'ici 24h
  • priority::7days : une issue qui doit être traitée d'ici à 1 semaine

Labels de workflow

Une issue doit avoir un et seulement un label de type workflow, un et un seul label de type product-review.

Couleur : 0033CC
  • Draft
    • workflow::need-product-specs : l'issue doit être spécifiée par un membre de l'équipe produit
    • workflow::need-design : l'issue a besoin de wireframe, design, …
    • workflow::need-tech-specs : l'issue doit être affiner par un membre de l'équipe tech
  • To do
    • workflow::ready-for-development : l'issue est prête à être implémentée
    • workflow::to-be-continued : l'issue a été commencée, mais mise en pause parce que le développeur est assigné sur une autre issue.
    • workflow::doing : un développeur est en train de travailler sur cette issue
    • workflow::ready-for-first-review : l'issue est prête à être review par un développeur
    • workflow::ready-for-maintainer-review : l'issue est prête à être review par un maintainers
    • workflow::blocked : l'issue est bloquée Par exemple :
      • l'issue est commencée, elle peut avoir une merge request de prête, mais le développeur ne peut pas la terminer, car elle dépend d'une autre Merge Request en cours d'élaboration ;
      • l'auteur de l'issue attend une réponse d'une personne externe de l'équipe produit ou tech, par exemple un client.
    • workflow::ready-for-merge : l'issue a été review et est prête à être mergé
    • need-cto : l'issue est bloquée parce qu'elle est en attente d'une validation par le CTO
  • Product review
    • product-review::needed : indique que l'issue doit être review par un membre de l'équipe produit
    • product-review::not-needed : indique que l'issue n'a pas besoin d'être review par l'équipe produit
    • product-review::pending : issue en attente de review par un membre de l'équipe produit
    • product-review::feedback : une demande de correction a été émise par un membre de l'équipe produit
    • product-review::approved : la Merge Request a été review et validée par un membre de l'équipe produit avec plus aucune demande de correction

Labels d'intégration dans des boards

Couleur : 428BCA
  • board-product-refinement : pour intégrer des issues dans un Kanban board qui contient une liste d'issues que l'équipe produit doit affiner
  • board-tech-refinement : pour intégrer des issues dans un Kanban board qui contient une liste d'issues que l'équipe tech doit affiner
  • board-support : pour intégrer des issues dans un Kanban board qui contient une liste d'issues de support qui traitent des demandes externes à l'équipe tech ou produit.
  • board-cto : utilisé par le CTO pour suivre des issues "cross team"

Labels divers

Couleur : 7F8C8D
  • first-contribution : pour identifier des issues en théorie facilement réalisables par un nouveau développeur en phase d'onboarding.
  • sprint-planning : pour les issues de type meta, dont l'objectif est d'organiser le rituel Sprint Planning.
  • sprint-retrospective : pour les issues de type meta, dont l'objectif est d'organiser le rituel Sprint Retrospective.
  • sprint-retro-follow-up : pour identifier les sujets qui ont été remontés lors d'une session de Sprint Retrospective.
  • triage : pour identifier les issues qui doivent être triées, c'est-à-dire, décider si l'issue doit être abandonnée pour être placée dans un backlog.
  • need-to-be-planned : pour identifier des issues validées, mais qui doivent être planifiées, c'est-à-dire, être ajoutées dans un sprint
  • danger : pour identifier des issues qui doivent être traitées avec prudence, qui par exemple risquent de détruire des données.
  • tech-refinement : pour identifier une issue qui doit être affiner par l'équipe tech, mais qui n'a pas encore été ajoutée dans le board-tech-refinement.
  • tech-refinement-removed : pour identifier des issues qui étaient dans un board-tech-refinement mais qui n'ont pas été affiné par manque de temps et donc repoussées à une future session.
  • security : pour identifier des issues en lien avec la sécurité informatique, par exemple, un risque de fuite de données, de perte de données, d'intrusion…
  • version-outdated : pour identifier les issues dont l'objectif est la mise à jour de librairies ou de services.

Label de compétences nécessaires

Liste de labels peu utilisés, ils permettaient d'identifier les compétences techniques nécessaires pour pouvoir traiter l'issue.

Couleur : 5843AD
  • skills:ansible
  • skills:terraform
  • skills:nodejs
  • skills:postgraphile
  • skills:html/css
  • skills:docker
  • skills:gitlab-ci
  • skills:docker
  • skills:dev-ops
  • skills:postgres
  • skills:postgres-rls
  • skills:postgres-rbac
  • skills:postgresql-plsql
  • skills:postgresql-policy
  • skills:reactjs
  • skills:shellscript
  • skills:sql