L'inventaire en logiciel — du code qui existe mais n'est pas en production.
En fabrication, l'inventaire, ce sont des pièces et des produits qui traînent sur des étagères — de l'argent immobilisé, de l'espace consommé, de la valeur non livrée. La fabrication lean a rendu célèbre la minimisation de l'inventaire jusqu'à presque zéro.
En logiciel, l'inventaire est moins visible mais tout aussi problématique :
C'est du travail partiellement terminé — un effort investi mais une valeur non livrée. C'est la forme de gaspillage la plus coûteuse parce qu'elle représente un investissement réel avec un rendement nul.
Le problème de la dégradation
L'inventaire physique reste sur une étagère. L'inventaire logiciel se dégrade. Une branche non fusionnée devient plus difficile à fusionner chaque jour à mesure que la branche principale évolue. Les documents d'exigences deviennent périmés à mesure que la compréhension change. Plus le travail partiellement terminé reste en attente, plus il faut d'effort pour le terminer.
Les équipes créent rarement de l'inventaire intentionnellement. Il s'accumule à cause de :
Grandes tailles de lots : plus la fonctionnalité est grosse, plus il faut de temps avant qu'elle soit terminée. Un projet de trois mois, c'est trois mois d'inventaire avant qu'une valeur soit livrée.
Systèmes push : du travail assigné en fonction de la disponibilité plutôt que de la capacité. Quand on commence plus qu'on peut terminer, l'inventaire augmente.
Rétroaction différée : attendre les révisions de code, l'AQ ou les approbations. Chaque file d'attente est une accumulation d'inventaire.
Travail prématuré : commencer des éléments avant qu'ils soient nécessaires. Écrire des spécifications pour des fonctionnalités qui ne seront peut-être pas construites. Concevoir pour des exigences futures imaginées.
Peur de fusionner : les équipes qui ont peur d'intégrer gardent les changements isolés. Plus elles attendent, plus l'intégration devient effrayante, créant un cercle vicieux.
La solution n'est pas de travailler plus vite — c'est de travailler en plus petit. Réduire les tailles de lots. Implémenter l'intégration continue. Tirer le travail en fonction de la capacité, ne pas pousser en fonction des assignations.
Une équipe a 47 pull requests ouvertes, certaines vieilles de plusieurs mois. Chacune représente un investissement qui ne livre pas de valeur. Les conflits de fusion s'accumulent. Le contexte est perdu. Finalement, les PR sont complètement abandonnées — 100 % de gaspillage.
Une équipe commit sur main plusieurs fois par jour. Aucune branche ne vit plus de quelques heures. Les PR sont minuscules et révisées rapidement. L'inventaire reste près de zéro. Le délai de livraison passe de semaines à heures.
Stratégies pour réduire l'inventaire :
Terminer avant de commencer : établir des limites de travail en cours. Avant de commencer quelque chose de nouveau, terminer quelque chose en cours. « Arrêter de commencer, commencer à terminer. »
Réduire les tailles de lots : découper les grandes fonctionnalités en petits incréments indépendamment précieux. Livrer chaque incrément avant de commencer le suivant.
Intégration continue : fusionner sur main constamment. Ne pas laisser les branches vivre plus d'une journée. Rendre l'intégration banale par la fréquence.
Boucles de rétroaction rapides : si les PR attendent des jours pour une révision, c'est de l'inventaire. Prioriser la révision. La rendre rapide. Mieux encore, programmer en binôme pour que la révision soit intégrée.
Éliminer le pré-travail : ne pas écrire de spécifications pour des fonctionnalités qui ne sont pas les prochaines. Ne pas concevoir des systèmes qu'on ne construit pas ce sprint. Planification juste-à-temps.
L'objectif est le flux : le travail traverse le système sans s'accumuler à aucune étape. Quand on voit l'inventaire s'accumuler, on a trouvé un obstacle au flux.
Mesurez-le
Comptez votre travail en cours. Combien d'éléments sont commencés mais pas terminés ? Combien de PR sont ouvertes ? Combien de code non déployé existe ? Suivez ces chiffres. Les réduire est généralement le chemin le plus rapide vers une livraison plus rapide.