Je travaille pour la même entreprise de logiciels depuis près de 14 ans maintenant. Au cours de cette période, j'ai vu beaucoup de dettes techniques s'accumuler. Je pense que c'est inévitable pour toute entreprise de logiciels à longue durée de vie.
Cependant, nous n'avons jamais eu de stratégie pour y faire face. Nous sommes conscients de la dette technique, les gens se plaignent de la dette technique, mais nous intégrons rarement une méthode pour y faire face dans nos plans. Je sais que cela fait partie des raisons pour lesquelles les gens ont quitté notre entreprise.
J'ai fait une recherche, mais je n'ai pas trouvé de méthodes éprouvées pour gérer la dette technique?
Ce que j'ai fait personnellement, c'est d'ajouter un fichier appelé TechnicalDebt.md à mes dépôts avec une description de ce qui, selon moi, doit être modifié et pourquoi, ainsi qu'une estimation du temps.
Ce qui précède est ma principale question, mais je m'attends à avoir des arguments à ce sujet, en particulier de la part de ceux qui affirmeront "qu'il ne devrait jamais y avoir de dette technique". Donc, tout ce que vous pouvez fournir qui plaide également en faveur d'une approche de la dette technique serait apprécié.
Je soupçonne que votre question sera fermée pour être trop large, ce qui est dommage car tout développeur qui a fait le tour de la piste à plusieurs reprises l'aura souvent rencontré.
Mais juste pour partager mes expériences - il y a un certain nombre d'aspects à cela:
Tests unitaires
Le remboursement de la dette impliquera sans aucun doute une refonte du code hérité. C'est très bien, mais vous deviendrez bientôt le centre d'une attention importune si vous commencez à casser des choses. Une bonne suite de tests unitaires devrait de toute façon être en place, mais si ce n'est pas le cas, commencez-y, car ceux-ci peuvent vous avertir rapidement que vos restructurations vont de travers.
Approche du code hérité
C'est un sujet sur lequel les gens écrivent littéralement des livres - dont les plus célèbres peuvent être résumés ici .
La nature de la dette
Toutes les dettes ne sont pas les mêmes - la façon dont votre stratégie dépend de la nature de la dette. S'il s'agit simplement d'une technologie obsolète, elle pourrait simplement être remplacée plutôt que refactorisée. Difficile de donner bien plus de conseils sans connaître les détails ...
Obtenir l'adhésion
J'ai travaillé dans des endroits où la gestion se concentre sur les fonctionnalités et les bugs et je ne vais tout simplement pas m'occuper du "polissage". Bien sûr, cela est très myope. Si vous n'obtenez pas l'adhésion pour résoudre les problèmes, vous devrez simplement vous occuper de tout problème pendant que vous êtes dans le code pour faire d'autres choses.
Sachez également que ce n'est pas seulement l'adhésion de la direction, vous avez également besoin de l'adhésion de vos pairs. Ils auront des idées différentes sur la manière de résoudre les différents problèmes. Impliquez tout le monde et vous constaterez que l'ensemble du processus est beaucoup plus facile.
Quels sont vos rituels?
Certains disent que vous ne devriez jamais avoir de dettes techniques. C'est une position assez naïve si je puis dire. Peut-être que cela signifie que votre dette devrait être aussi faible que possible (comme la dette des ménages).
Cela étant dit, le montant de votre dette est fonction de la façon dont vous la voyez collectivement. Si vous avez toujours à l'esprit de rembourser vos dettes où que vous les trouviez, vous constaterez qu'elles diminuent assez fortement. Si vous cherchez à le réparer pendant votre temps libre (quand c'est le cas), c'est un long chemin difficile - notamment parce que vous pourriez simplement accumuler plus de dettes dans le temps qu'il a fallu pour payer une autre dette.
Quant au suivi en premier lieu, il doit être enregistré comme votre outil de suivi de travail habituel. La façon dont vous séparerez cela du reste du travail variera d'un outil à l'autre.
Le meilleur moyen que j'ai trouvé pour suivre la dette technique est de la suivre dans le suivi des problèmes, ainsi que de nouvelles fonctionnalités/développements et bogues. Selon l'outillage que vous utilisez, il peut y avoir différentes options pour identifier la dette technique, des types de problème à une sorte de tag ou d'étiquette.
Dans l'ensemble, il existe deux façons de rembourser la dette technique.
Premièrement, s'il y a une dette technique dans les mêmes domaines d'application qui sont en cours d'élaboration, cela devrait se refléter dans les estimations des travaux. Il faudra plus de temps pour développer un élément de fonctionnalité donné au même niveau de qualité s'il y a une dette technique élevée. Au minimum, une estimation tiendra compte de la nécessité de travailler sur la dette technique, et l'estimation peut inclure des efforts pour rembourser la dette technique.
Deuxièmement, les éléments de travail individuels pour suivre la dette technique et la rembourser sont utiles pour planifier et suivre le travail en dehors du nouveau développement. Cela est particulièrement utile si les caractéristiques de la dette technique ne sont pas en cours de développement actif actuellement ou dans un avenir immédiat. Vous pouvez suivre vers quel (s) domaine (s) des modifications du système sont effectués afin d'avoir une traçabilité et un aperçu de l'orientation des efforts de test.
Prenons un exemple ici. Si j'achète une carte de membre d'un an dans mon supermarché local, j'obtiens une remise de 5% sur mes achats. Mais est-ce que je veux vraiment investir les 75 $ que cette adhésion coûte?
Pour l'instant, disons que tout comme la façon dont une entreprise ne veut pas passer du temps à s'attaquer à la dette technique, nous avons décidé de ne pas acheter de carte de membre. Après tout, je dois dépenser mon argent en épicerie.
C'est un exemple simpliste, mais vous remarquez très rapidement qu'en un mois, vous auriez économisé 25 $ en étant membre. Vous n'avez même pas besoin de vous inscrire au cours des 11 prochains mois pour savoir que vous seriez mieux avec un abonnement.
En comptant seulement l'épicerie hebdomadaire, j'économiserais 180 $ par an (pour un total de 105 $ si vous soustrayez le coût de l'adhésion), et cela ne compte même pas les dépenses supplémentaires occasionnelles.
La chose importante à retenir ici est que l'enregistrement d'une fraction du temps total (1 mois) a immédiatement révélé une attente raisonnable de la durée totale (c.-à-d. L'adhésion d'un an ou la durée de vie du projet)
Si vous documentez des pertes de temps et des efforts supplémentaires consacrés à des choses purement techniques, vous obtenez rapidement une idée du temps que vous y perdez, que vous pouvez comparer au temps que vous "perdriez" à réparer le dette technique.
Il y a un XKCD pertinent pour cela :
Regardez les maths. Si toute votre équipe combinée perd en moyenne 30 minutes par jour sur le plan technique la dette (ce qui est plus que raisonnable), alors vous pouvez raisonnablement dépenser 200 heures de travail (5 semaines) pour ne rien faire d'autre que du refactoring et vous seriez toujours au point mort sur une période de 5 ans (ce qui est encore une fois un délai raisonnable pour un projet).
Ce calcul ne tient même pas compte des fonctionnalités qui seront ajoutées à l'avenir, ce qui ne ferait qu'augmenter le temps perdu si vous ne régliez pas la dette technique.
Je suis conscient que la dette technique n'est pas aussi clairement définie que les factures d'épicerie, et vous devrez faire un jugement pour savoir si elle a contribué à un bogue (ou à sa correction) ou non. Ce n'est pas objectivement mesurable. Il s'agit d'une estimation, et les estimations sont imprécises, mais les estimations raisonnables ont tendance à faire la moyenne sur une période plus longue. Si votre équipe ne peut pas faire d'estimations raisonnables, alors vous avez de plus gros poissons à faire frire.
Si vous documentez tous les tickets qui ont été raisonnablement affectés par la dette technique et estimez le temps perdu à ce sujet (certains bugs comptent pour 100%, d'autres seulement partiellement, les nouvelles fonctionnalités entraînent un% de coût en raison d'une base de code inutilement complexe, ...) , vous commencez rapidement à voir combien de temps cette dette vous coûte.
Je suggère de classer les dettes techniques particulières et de les suivre séparément. Il est plus significatif de savoir comment une dette en particulier vous affecte, de sorte que la société ne peut réparer que la dette, ce qui crée un problème actif pour ses résultats.
Je pense que c'est inévitable pour toute entreprise de logiciels à longue durée de vie.
C'est comme dire que la dégradation d'un bâtiment est inévitable. Si un bâtiment n'est jamais entretenu ou réparé, la décomposition est en effet inévitable. Mais si vous prenez le temps nécessaire pour faire un bon entretien, un bâtiment peut rester en bon état pratiquement pour toujours.
De même, si vous prenez le temps de réduire le service technique, la base de code peut rester en bon état pendant toute la durée de vie d'un produit.
J'ai fait une recherche, mais je n'ai pas trouvé de méthodes éprouvées pour gérer la dette technique?
De nombreuses sociétés de logiciels fournissent de bons exemples.
Comment trouvez-vous ces entreprises? En regardant des produits à succès qui existent depuis très longtemps. Alors que certains (tels que Windows) ont été réécrits à partir de zéro, beaucoup ne l'ont pas fait: réécrire à partir de zéro est une entreprise coûteuse et risquée . Un des produits bien connus qui résistent à l'épreuve du temps est Linux. Une bonne chose à ce sujet est qu'il est open source, donc vous pouvez voir comment il a été développé au fil du temps et comment les développeurs ont géré la dette technique.
Je m'attends à avoir des arguments à ce sujet, en particulier de la part de ceux qui affirmeront "qu'il ne devrait jamais y avoir de dette technique".
N'avoir aucun département technique à tout moment est assez coûteux et pas toujours utile. Alors que certaines pratiques, telles que la refactorisation, devraient être une activité constante, d'autres peuvent être reportées jusqu'à ce que le code soit suffisamment stable.
Mettre des tâches de dette technique dans un outil de suivi des problèmes est une chose évidente. Mais c'est rarement le problème.
Le principal problème que je rencontre avec le traitement de la dette technique est qu'elle provoque un conflit entre les affaires et l'ingénierie. Il est extrêmement difficile de quantifier une valeur commerciale pour un problème de dette technique. Surtout si les gains sont extrêmement à long terme dans une fourchette de mois ou d'années. Ainsi, faire en sorte que les entreprises planifient les problèmes de dette technique par rapport à leurs nouvelles fonctionnalités "critiques" devient une tâche impossible.
La solution la plus simple consiste pour l'ingénierie à réserver un temps constant pour la maintenance. Mon expérience montre que 10 à 30% du temps d'ingénierie est préférable lorsqu'il s'agit de faibles dettes techniques. Mais la valeur peut aller jusqu'à 70% lors du remboursement d'une énorme quantité de dette technique d'une manière qui réalise réellement des gains raisonnables à long terme. Souvent, ce temps devient quelque chose que les entreprises ne devraient pas connaître, car elles exigeraient plutôt que ce temps soit consacré aux fonctionnalités.
La dette technique s'installe en raison d'un certain nombre de facteurs, notamment:
Le montant de la dette technique est acceptable est une décision commerciale - par exemple, si l'expédition ne signifie pas que vous n'obtenez pas un autre VC tour, vous voulez probablement couper tous les coins que vous pouvez. Par conséquent, vous devez discuter avec l'entreprise quels sont les impacts de contracter ou de rembourser la dette et d'élaborer un plan à partir de là.
Certaines options à discuter pourraient être:
Cela dit, vous allez probablement être confronté à une question difficile de la part de l'entreprise:
"Qu'est-ce que j'obtiens pour allouer du temps au nettoyage"
Pour pouvoir répondre, vous devez pouvoir dire:
Le point n ° 3 est vraiment le plus important ici, si le code fonctionne correctement, ne provoque pas d'incidents de support et il n'est pas prévu de le changer dans un proche avenir. D'un point de vue commercial, il s'agit d'un "prêt sans intérêt" - il n'y a aucune raison de le rembourser.
Vous souhaitez probablement mettre en place des processus pour suivre:
Le processus doit enregistrer les éléments de dette technique que vous avez actuellement et y rattacher les problèmes de développement futurs et les incidents de production. Cela vous permettra de prioriser la dette technique la plus coûteuse pour l'entreprise.
Pour les articles les plus chers, vous devez générer une estimation approximative de ce qu'il en coûterait pour les réparer. Après cela, c'est un argument de retour sur investissement pour l'entreprise - donc si vous avez fait une bonne affaire, vous devriez être en mesure de les convaincre d'allouer du temps, via l'une des méthodes précédemment énoncées.