La dette technique représente le coût cumulé des choix de mise en œuvre, opportuns à l'époque, mais qui ralentissent ou rendent plus risquées les modifications ultérieures. La métaphore est celle de Ward Cunningham : emprunter sur sa capacité future pour livrer plus tôt, avec des intérêts payés à chaque modification jusqu'au remboursement de la dette. À l'instar de la dette financière, elle n'est pas intrinsèquement mauvaise ; la distinction essentielle réside entre une dette contractée délibérément et une dette accumulée par négligence.
L'intérêt de cette métaphore réside dans sa capacité à rendre ce compromis compréhensible pour ceux qui ne développent pas. Présenter une demande de refactoring comme un remboursement de dette communique un message qu'une demande de réécriture de module ne transmet pas : le coût est déjà supporté, sous forme de délais de livraison plus longs et de taux d'erreurs plus élevés, et la question est de savoir s'il faut continuer à le supporter. La formulation originale de Cunningham soulignait également que la dette résulte d'un écart croissant entre la structure du code et la compréhension actuelle du problème par l'équipe, une notion plus large que le simple fait d'écrire du code bâclé sous la pression d'une échéance.
Plusieurs éléments distincts sont regroupés sous ce terme, et chacun requiert une réponse différente. La dette technique délibérée, contractée en toute connaissance de cause pour respecter une échéance précise et assortie d'un plan pour la gérer, constitue une décision d'ingénierie légitime. La dette technique accidentelle, résultant d'une meilleure compréhension de l'équipe après la validation de la conception, est inévitable et représente le coût normal de l'apprentissage. La dette technique due à la négligence, causée par l'absence de tests, des comportements non documentés et des dépendances non maintenues, s'accumule silencieusement et représente la catégorie la plus coûteuse, car elle accroît les risques liés à chaque modification. Les dépendances obsolètes, en particulier, présentent des failles de sécurité et ne constituent pas un simple inconvénient.
Les symptômes apparaissent dans les indicateurs de performance avant même d'être visibles dans le code. L'augmentation des estimations pour des tâches similaires, la part croissante des ressources consacrées aux anomalies, la réticence à intervenir dans certains domaines et les modifications apportées à un endroit qui perturbent d'autres éléments sont autant de signes que les coûts supplémentaires sont devenus importants. Les équipes signalent souvent ces symptômes comme des problèmes de capacité et demandent des renforts, ce qui aggrave généralement la situation à court terme.
Pour gérer efficacement ce travail, il est indispensable de l'intégrer au même processus de planification que l'ensemble des autres projets. Une dette figurant sur une liste distincte et traitée uniquement en cas de disponibilité de ressources reste lettre morte, car cette disponibilité est toujours inexistante. L'allocation d'une proportion fixe de chaque cycle ou l'intégration des travaux de correction aux améliorations apportées aux zones concernées sont les deux approches qui résistent aux pressions commerciales. L'alternative, à savoir des refontes majeures et périodiques, est généralement le signe d'un report excessif des travaux et comporte des risques bien plus importants qu'une amélioration progressive.
Communiquer les arguments en faveur de la remédiation est plus efficace en termes de livraison qu'en termes d'ingénierie. Indiquer qu'une zone particulière prend désormais trois fois plus de temps à modifier que des zones comparables, preuves à l'appui, relie le problème à une préoccupation majeure des parties prenantes non techniques, contrairement à la description de préoccupations architecturales. Lorsque la dette technique représente un risque plutôt qu'un coût, comme dans le cas de dépendances non maintenues ou d'une couverture de tests insuffisante sur les chemins critiques, la présenter comme une exposition avec une probabilité et un impact est plus efficace que de la présenter comme un problème de qualité. Dans les deux cas, quantifier le coût continu est ce qui transforme une préférence technique en une analyse de rentabilité capable de rivaliser avec le développement de nouvelles fonctionnalités pour l'allocation de ressources.
Toute dette ne doit pas être remboursée. Un code fonctionnel, rarement modifié et ne causant aucun problème peut rester inchangé, quelle que soit son apparence, et les efforts consacrés à son amélioration ne génèrent aucun retour sur investissement. Une approche économiquement saine consiste à concentrer les corrections là où les changements sont fréquents et où, par conséquent, les intérêts sont effectivement payés. Rendre ce compromis visible et prévoir explicitement les ressources nécessaires dans la planification fait partie intégrante du processus de développement. le développement de produits L'engagement est structuré et doit être intégré à la discussion sur la feuille de route au sein d'un studio de produits plutôt que d'être traitée comme une question d'ingénierie en dehors des discussions sur le produit.