← Retour aux articles
Guides

Dette Technique : Quand (et Pourquoi) Externaliser le Refactoring est le Meilleur Investissement

Par Marc Molas·16 décembre 2024·9 min de lecture

"On nettoiera ça plus tard." Les mots les plus répétés dans toute startup logicielle. Et ceux qui sont le moins souvent tenus.

La dette technique s'accumule en silence. Au début, vous ne la remarquez même pas. Un raccourci ici pour tenir le deadline, un workaround là-bas parce qu'il n'y avait pas le temps de bien faire, un test que personne n'a écrit parce que le lancement c'était demain. Chaque décision prise isolément est raisonnable. Le problème, c'est qu'elles s'additionnent.

Et un jour, vous réalisez que les déploiements prennent deux heures. Qu'un nouvel ingénieur met trois semaines avant de faire son premier commit productif. Que chaque nouvelle fonctionnalité introduit deux bugs. Que vos meilleurs ingénieurs commencent à regarder les offres sur LinkedIn parce qu'ils en ont marre de se battre contre le code au lieu de construire du produit.

Ce jour-là, il est déjà tard pour agir. Mais plus tard, ce sera pire.

Ce qu'est vraiment la dette technique (et ce qu'elle n'est pas)

Ward Cunningham a inventé le terme comme une métaphore financière, et elle est parfaite. La dette technique fonctionne exactement comme la dette financière : vous contractez un emprunt (raccourci technique) pour obtenir quelque chose aujourd'hui (livrer plus vite), et vous payez des intérêts (complexité accumulée) jusqu'à ce que vous remboursiez le principal (vous refactorisez).

Il existe deux types fondamentaux :

Dette délibérée. Des raccourcis pris consciemment pour gagner en vélocité. "On sait que ce module de paiements devrait avoir sa propre couche d'abstraction, mais pour le moment on le couple directement pour arriver au lancement." C'est légitime. Tout le monde le fait. Le problème, c'est quand personne ne note qu'il faudra revenir rembourser.

Dette accidentelle. Du code qui s'est dégradé par manque d'expérience, manque de review, ou simplement par entropie naturelle du logiciel. Personne n'a décidé consciemment de créer un god object de 3 000 lignes — il a grandi sprint après sprint sans que personne ne s'arrête pour refactoriser.

Les deux types accumulent des intérêts. La différence, c'est que la dette délibérée, au moins vous la connaissez. L'accidentelle se découvre généralement quand elle est déjà chère à rembourser.

Le coût réel de l'ignorer

La dette technique n'est pas un problème esthétique. C'est un problème business avec des coûts mesurables :

Vélocité de livraison en chute libre. Ce qui au mois 3 du produit prenait deux jours, au mois 18 en prend deux semaines. Non pas parce que l'équipe est moins bonne, mais parce que chaque changement nécessite de comprendre des couches de complexité accumulée, naviguer dans des dépendances cachées et prier pour que rien ne casse de manière inattendue.

Bugs composés. Dans un codebase propre, un bug est un bug. Dans un codebase avec de la dette technique, un bug est le symptôme d'un problème structurel qui produit d'autres bugs. Vous en corrigez un et trois apparaissent parce que la cause racine est dans un design que personne n'ose toucher.

Frustration de l'équipe. Les bons ingénieurs veulent construire des choses, pas se battre contre un codebase hostile. Quand votre équipe passe plus de temps à patcher et naviguer dans du code spaghetti qu'à créer de la valeur, le moral chute. Et quand le moral chute, les gens partent. La rotation dans les équipes à forte dette technique est significativement plus élevée, et remplacer un ingénieur senior coûte entre 6 et 9 mois de son salaire.

Difficulté à recruter. Les bons ingénieurs posent des questions sur le codebase en entretien. Si la réponse honnête est "c'est le chaos mais on y travaille" sans plan réel, les meilleurs candidats choisissent une autre offre.

Risque de sécurité. Des dépendances non mises à jour, des configurations legacy, du code que personne ne comprend totalement — la dette technique est aussi de la dette de sécurité. Et cette dette se paie par des incidents.

Pourquoi votre équipe interne ne peut pas résoudre ça seule

Si la dette technique a des coûts si clairs, pourquoi l'équipe qui l'a générée ne la rembourse-t-elle pas ? Parce que des forces systémiques l'en empêchent :

La pression produit gagne toujours. Au sprint planning, "refactoriser le module d'authentification" est en concurrence avec "implémenter la fonctionnalité que demande notre plus gros client". Devinez qui gagne à chaque fois. Le refactoring est reporté sprint après sprint, trimestre après trimestre.

L'équipe ne peut pas faire les deux. Refactoriser du code legacy demande une concentration profonde. Construire de nouvelles fonctionnalités aussi. Demander à une équipe de faire les deux simultanément, c'est lui demander de faire les deux mal. Le context switching entre "construire du neuf" et "réparer l'ancien" détruit la productivité.

Aveuglement de familiarité. Votre équipe vit dans ce code tous les jours. Elle a normalisé ses problèmes. Le workaround fait il y a un an pour contourner un bug est devenu "c'est comme ça que le système fonctionne". Un pattern qu'un ingénieur externe identifierait comme un antipattern en dix minutes, l'équipe interne le voit comme "notre façon de faire les choses".

Manque de distance émotionnelle. C'est eux qui ont écrit le code. Le refactoriser implique d'admettre que c'était mal fait. C'est inconfortable. Une équipe externe n'a pas ce bagage — elle voit du code, pas de l'histoire personnelle.

Le cas pour externaliser le refactoring

Externaliser le refactoring, ce n'est pas admettre un échec. C'est la décision stratégique la plus rentable que vous puissiez prendre quand votre équipe n'a pas la capacité de s'en charger en interne.

Des yeux neufs. Une équipe externe d'ingénieurs senior arrive sans préconceptions. Elle voit les antipatterns que votre équipe a normalisés. Elle identifie les dépendances circulaires que personne n'a dessinées dans un diagramme. Elle trouve le code mort que personne n'ose supprimer "au cas où". Cette perspective externe est impossible à reproduire en interne.

Focus dédié. Pendant que votre équipe interne continue de livrer des fonctionnalités — parce que le business ne s'arrête pas —, l'équipe de refactoring travaille exclusivement sur la dette technique. Pas de sprint planning qui l'oblige à choisir entre feature et refactoring. Pas de context switching. Un focus pur sur l'amélioration du codebase.

Engagement borné dans le temps. Ce n'est pas un engagement indéfini. Ce sont 4 à 8 semaines de travail focalisé avec des objectifs clairs et des livrables mesurables. "À la fin de cet engagement, le pipeline de CI prend moins de 10 minutes, la couverture de tests est au-dessus de 70 %, et les trois modules les plus couplés ont des interfaces claires." Si les objectifs sont atteints, l'engagement se termine. S'il reste du travail, il est prolongé avec un périmètre défini.

Transfert de connaissances. Une équipe de refactoring sérieuse ne laisse pas seulement du meilleur code — elle laisse de la documentation. Des ADRs (Architecture Decision Records) expliquant pourquoi chaque décision a été prise. Des améliorations dans le pipeline de CI/CD. Des guides de style qui n'existaient pas. Quand l'équipe externe part, l'équipe interne hérite d'un codebase meilleur ET de meilleures pratiques pour le maintenir.

Quoi prioriser : ce qui bloque, pas ce qui dérange

Toute la dette technique ne mérite pas une attention immédiate. Du code moche mais fonctionnel peut attendre. Ce qui ne peut pas attendre, c'est ce qui bloque votre équipe :

Pipeline de CI lent. Si votre pipeline prend 40 minutes, chaque ingénieur perd du temps à attendre, perd le contexte et perd le flow. Le réduire à 10 minutes multiplie la productivité de toute l'équipe.

Tests fragiles ou inexistants. Si l'équipe n'ose pas refactoriser parce qu'il n'y a pas de tests pour lui donner confiance, vous êtes dans un cercle vicieux. Des tests fiables sont la base de toute amélioration.

Dépendances enchevêtrées. Si modifier le module A casse systématiquement le module B sans raison apparente, cette dépendance cachée est la priorité. Séparer ces dépendances débloque la capacité de travailler en parallèle.

Onboarding lent. Si un nouvel ingénieur met trois semaines à devenir productif parce que personne ne comprend comment fonctionne le système, la documentation et la simplification de l'architecture ont un ROI immédiat.

Du code qui est moche mais fonctionne, qui a des noms de variables peu descriptifs, qui utilise un pattern ancien mais stable — ça peut attendre. Priorisez par impact sur la productivité, pas par offense esthétique.

Le calcul du ROI

Faites les comptes. Ils sont plus favorables que vous ne le pensez.

Supposons que votre équipe de 6 ingénieurs perd, en moyenne, 5 heures par semaine chacun à lutter contre la dette technique. Ça fait 30 heures par semaine. À un coût chargé de 60 euros de l'heure, ça représente 1 800 euros par semaine. 7 200 euros par mois. 86 400 euros par an. Perdus en friction.

Un engagement de refactoring de 6 semaines avec deux ingénieurs senior dédiés peut coûter entre 25 000 et 40 000 euros. Si cet engagement réduit la friction de moitié — ce qui est un objectif conservateur —, vous récupérez l'investissement en moins de six mois. Et les bénéfices s'accumulent chaque mois après ça.

Les chiffres réels varieront selon votre cas, mais la structure du calcul est toujours la même : temps perdu par l'équipe actuelle multiplié par la durée multiplié par le coût. Même des améliorations modestes se rentabilisent d'elles-mêmes.

Un engagement qui laisse votre codebase meilleur

Chez Conectia, nous connectons les startups européennes avec des ingénieurs senior d'Amérique latine qui font exactement ce type de travail. Ce ne sont pas des ingénieurs qui arrivent pour lire du code pendant deux semaines et livrent un document de recommandations. Ce sont des ingénieurs qui ouvrent des PRs, écrivent des tests, refactorisent des modules, améliorent des pipelines et documentent des décisions.

Le modèle est un engagement borné : objectifs clairs, durée définie, résultats mesurables. Votre équipe interne continue de livrer du produit. L'équipe de refactoring se concentre sur la dette. À la fin de l'engagement, votre équipe hérite d'un codebase objectivement meilleur — plus rapide à déployer, plus facile à comprendre, plus sûr à modifier.

Parce que la dette technique ne disparaît pas toute seule. Et chaque sprint qui passe sans s'en occuper, les intérêts s'accumulent.


Votre dette technique freine l'équipe ? Parlez à un CTO — nous planifions des engagements de refactoring bornés avec des ingénieurs senior qui laissent votre codebase meilleur qu'ils ne l'ont trouvé.

Prêt à construire votre équipe d'ingénierie ?

Parlez à un partenaire technique et déployez des développeurs validés par des CTOs en 72 heures.