Leadership d'opinion

Le coût caché de la dette technique i18n

Eray Gündoğmuş
Eray Gündoğmuş
·8 min de lecture
Partager
Le coût caché de la dette technique i18n

Vos ingénieurs ne sont pas lents. Votre produit n'est pas trop complexe. Votre expansion sur de nouveaux marchés prend 6 mois par locale parce que, il y a trois ans, quelqu'un a codé en dur "Welcome back, {name}!" directement dans du JSX — et ensuite un millier d'autres personnes ont fait de même.


Toutes les équipes d'ingénierie suivent leur dette technique. Métriques de complexité du code. Arriéré de mises à jour de dépendances. Lacunes dans la couverture de tests. Vous pouvez probablement me citer votre score SonarQube de mémoire.

Mais posez la question à la plupart des CTO sur leur dette i18n, et vous obtiendrez un regard vide. Elle n'est pas suivie. Elle n'est pas mesurée. Elle n'apparaît sur aucun tableau de bord. Et elle coûte silencieusement à votre équipe plus que la plupart des éléments de votre feuille de calcul de dette technique.

Cet article met des chiffres sur ce coût. Pas des chiffres hypothétiques — le genre que vous pouvez calculer pour votre propre codebase en une après-midi.

À quoi ressemble réellement la dette technique i18n

La dette technique a une définition clinique : le coût implicite du travail de refactorisation future causé par le choix d'une solution expédiente maintenant. En i18n, cette solution expédiente est presque toujours la même : ignorer l'infrastructure de traduction, coder les chaînes en dur, « on internationalisera plus tard ».

La dette évidente : les chaînes codées en dur

Chaque <p>Submit</p> dans votre JSX est une chaîne qui nécessite une extraction manuelle avant de pouvoir être traduite. Chaque alert('Are you sure?') est un message utilisateur qui vit en dehors de votre système de traduction.

Lancez un outil d'extraction de chaînes sur une codebase React de 50 000 lignes qui n'a pas été construite avec i18n dès le départ. Vous trouverez généralement 3 000 à 8 000 chaînes traduisibles codées en dur. Chacune doit être :

  1. Identifiée (est-elle destinée aux utilisateurs ?)
  2. Extraite vers une clé de traduction
  3. Enveloppée dans un appel t()
  4. Ajoutée au fichier de traduction
  5. Traduite pour chaque locale cible
  6. Testée pour la mise en page et la troncature

À 10-15 minutes par chaîne pour le cycle d'extraction complet, 5 000 chaînes représentent 800 à 1 250 heures d'ingénierie. C'est 5 à 8 mois du temps d'un développeur. Pour des chaînes qu'il était gratuit d'externaliser au moment où le code a été écrit.

La dette invisible : les problèmes structurels

Les chaînes codées en dur sont la dette évidente. Les problèmes structurels sont pires car ils se cumulent :

Pas de structure de clés. Les clés sont des chaînes plates comme "submit_button" et "submit_button_2". Il n'y a pas de hiérarchie, pas de convention d'espace de noms, pas de moyen de traduire par lot par domaine fonctionnel. Lorsque vous devez traduire votre flux de paiement, vous ne pouvez pas filtrer les clés liées au paiement car il n'y a pas de taxonomie.

Pas de contexte de chaîne. Vos traducteurs voient "Total" et doivent deviner : est-ce un en-tête de tableau, un libellé de bouton ou une ligne de facture ? En allemand, ce sont trois mots différents. Sans métadonnées de contexte sur chaque clé, les traducteurs se trompent 15 à 25 % du temps.

Pas de mémoire de traduction. La phrase « Êtes-vous sûr de vouloir supprimer ceci ? » apparaît 12 fois dans votre application. Sans mémoire de traduction, elle est traduite 12 fois séparément — potentiellement de 12 manières différentes par différents traducteurs.

Pas d'automatisation. Les mises à jour de traduction impliquent qu'un développeur exporte manuellement du JSON, l'envoie par e-mail aux traducteurs, attend le fichier en retour, l'importe manuellement et crée une PR. Chaque aller-retour prend 3 à 5 jours ouvrables.

La dette organisationnelle

La forme la plus insidieuse de dette i18n n'est pas dans le code. Elle est dans l'organigramme.

Manque de propriété. L'ingénierie ne possède pas les traductions — « c'est une affaire de contenu ». Le marketing ne comprend pas le système technique. Les chefs de produit ne suivent pas la couverture de traduction comme métrique. Personne n'est responsable du fossé.

Pas de SLA pour les mises à jour de traduction. Une nouvelle fonctionnalité est livrée en anglais et reste en anglais uniquement pendant 2 à 4 semaines avant que quiconque commence à traduire. Les utilisateurs internationaux voient une interface à moitié traduite — des boutons en anglais mélangés à des libellés en allemand — pendant des semaines après chaque version.

Ignorance qui se cumule. Chaque nouvel ingénieur qui rejoint l'équipe copie les modèles qu'il voit. Si la codebase contient des chaînes codées en dur, ils coderont des chaînes en dur. La dette croît linéairement avec les effectifs.

Comment quantifier ce que vous payez

La dette i18n est mesurable. Voici les catégories de coûts et comment les calculer.

La taxe sur le temps d'ingénierie

L'enquête d'ingénierie 2023 de Stripe a révélé que les développeurs passent 23 % de leur temps sur des tâches de dette technique. McKinsey estime que 20 à 40 % des budgets informatiques sont consacrés à la maintenance de la dette avant toute création de valeur nouvelle.

Pour i18n spécifiquement, suivez ces éléments sur un sprint :

Temps d'extraction de chaînes. Combien d'heures les développeurs ont-ils passé à envelopper des chaînes codées en dur dans des appels t() ? Dans la plupart des entreprises qui adaptent i18n après coup, c'est 4 à 8 heures par développeur par sprint pendant la migration.

Résolution des conflits de fusion. Si les traductions vivent sous forme de fichiers JSON dans le dépôt, combien de conflits de fusion impliquaient des fichiers de locale ? Chaque conflit prend 15 à 30 minutes à résoudre (re-valider la syntaxe JSON, re-vérifier l'ordre des clés, re-exécuter le CI de traduction). Avec 6 développeurs, attendez-vous à 1 à 2 par sprint : 30 à 60 minutes.

Coût de changement de contexte. Combien de fils Slack impliquaient un développeur expliquant le contexte de l'interface à un traducteur ? Chaque fil représente un changement de contexte de 15 minutes pour le développeur : 1 à 2 heures par sprint.

Surcharge de déploiement. Quel pourcentage de vos déploiements sont déclenchés par des modifications uniquement liées aux traductions ? Si les traductions vivent dans le dépôt, chaque correction de texte déclenche le pipeline CI/CD complet. Suivez-le pendant un mois. Le chiffre est généralement de 15 à 25 % du total des déploiements.

Le multiplicateur de délai de version

C'est là que les calculs deviennent inconfortables.

Votre produit a 5 locales cibles. Chaque locale nécessite en moyenne 2 semaines pour traduire les nouvelles chaînes d'une fonctionnalité (en tenant compte du cycle manuel export → traduction → import → QA). Vous livrez 12 fonctionnalités par an.

5 locales × 2 semaines de délai × 12 versions = 120 semaines-locales de disponibilité retardée.

C'est 120 semaines pendant lesquelles les utilisateurs internationaux voient un produit incomplet. Pour un produit SaaS avec 40 % de revenus internationaux, c'est 40 % de votre base d'utilisateurs qui vivent une expérience dégradée pendant 2 semaines après chaque version.

L'effet cumulatif est brutal. Chaque fonctionnalité ajoute de nouvelles chaînes. Si les traductions de la fonctionnalité précédente ne sont pas complètes quand la prochaine version est livrée, les traducteurs travaillent maintenant sur deux arriérés simultanément. Le délai augmente. La qualité baisse. L'équipe commence à rogner sur les coins — « livrons-le en anglais, on traduira plus tard ». La dette augmente.

Coût d'opportunité de marché

CSA Research rapporte que 87 % des consommateurs en ligne n'achèteront pas sur un site disponible uniquement en anglais. Le marché mondial de la localisation de logiciels est évalué à 6,27 milliards de dollars en 2025 et croît à un TCAC de 12,4 % (Meticulous Research).

Le concurrent qui livre une traduction française 3 mois avant vous ne gagne pas seulement des utilisateurs français pendant 3 mois. Il gagne le bouche-à-oreille, les avis sur l'app store, le classement SEO dans les résultats de recherche français. Vous ne perdez pas 3 mois de revenus — vous cédez l'avantage du premier entrant sur un marché entier.

Pour un produit SaaS avec 10 millions de dollars de ARR et 30 % de potentiel de croissance internationale, un retard de 3 mois dans le lancement de nouvelles locales représente environ 750 000 dollars de revenus différés par locale. C'est un chiffre qui mérite d'être mis sur une diapositive.

Pourquoi la dette i18n se cumule plus vite que la dette technique ordinaire

La plupart des dettes techniques sont linéaires. Une fonction désordonnée ralentit les développeurs qui la touchent. Une dépendance obsolète affecte les services qui l'utilisent. Le rayon d'impact est borné.

La dette i18n est multiplicative. Voici pourquoi.

L'effet réseau d'une mauvaise architecture

Une clé de traduction manquante dans un composant partagé signifie une page cassée dans chaque locale. Un terme mal traduit se propage à chaque écran qui l'utilise. Un espace de noms mal structuré rend chaque nouvelle clé plus longue à créer.

Le facteur de multiplication est : nombre de chaînes affectées × nombre de locales × nombre d'utilisateurs par locale.

Une seule décision architecturale — « utilisons des clés plates sans espaces de noms » — crée des frictions sur des milliers de chaînes, des dizaines de locales et chaque développeur qui touche du code de traduction.

Le multiplicateur d'embauche

Les nouveaux ingénieurs copient les modèles existants. Si votre codebase a 500 chaînes codées en dur, les nouvelles recrues coderont aussi des chaînes en dur. Elles ne savent pas que le système i18n existe parce que personne ne les a formées dessus. La dette croît à chaque embauche.

Les équipes d'ingénierie avec une dette technique significative rapportent 25 à 35 % de rotation plus élevée (Haystack Analytics 2024). La raison : les développeurs ne veulent pas passer leur temps à extraire des chaînes et à résoudre des conflits de fusion. Ils veulent créer des fonctionnalités. Si votre codebase fait prendre 30 % de temps en plus à chaque fonctionnalité à cause de la surcharge i18n, vos meilleurs ingénieurs trouveront une codebase qui n'a pas ce problème.

Le piège « on réglera ça avant de s'étendre »

C'est le schéma de décision le plus courant — et le plus coûteux :

  1. Année 1 : Le produit est lancé en anglais. « On ajoutera i18n avant de s'étendre. »
  2. Année 2 : Le produit grandit. i18n est continuellement déprioritisé. La codebase accumule 5 000 chaînes codées en dur.
  3. Année 3 : L'équipe commerciale obtient un prospect en Allemagne. La direction dit : « Combien de temps pour lancer en allemand ? »
  4. Réponse de l'ingénierie : « 6 mois pour extraire toutes les chaînes, mettre en place le pipeline de traduction, traduire et faire le QA. »
  5. Direction : « C'est trop lent. Traduisez juste les pages les plus visibles manuellement. »
  6. Résultat : Produit à moitié traduit. Qualité incohérente. La « vraie » migration i18n continue d'être reportée.

À l'année 3, le coût d'une internationalisation correcte est passé de « 2 semaines de configuration » (si fait en année 1) à « 6 mois de migration » (adaptation d'une codebase mature). La dette technique ne s'est pas seulement accumulée — elle s'est cumulée.

L'audit : trouver votre score de dette i18n

Vous pouvez quantifier votre dette i18n en un seul sprint. Voici comment.

Processus d'audit étape par étape

1. Comptez les chaînes traduisibles non suivies.

Lancez un outil d'extraction de chaînes basé sur AST sur votre codebase :

# Using Better i18n CLI
npx @better-i18n/cli scan

# Or use i18next-parser for i18next projects
npx i18next-parser

La sortie vous indique combien de chaînes destinées aux utilisateurs existent en dehors de votre système de traduction. C'est votre arriéré d'extraction brut.

2. Auditez la structure du fichier de traduction.

Répondez à ces questions :

  • Les clés sont-elles organisées par fonctionnalité/composant, ou plates ?
  • Quel est le plus grand fichier de locale unique ? (Si > 500 clés dans un seul fichier, vous avez un problème d'espace de noms)
  • Les clés ont-elles des descriptions de contexte ?
  • Y a-t-il un glossaire ?

3. Vérifiez la sécurité des types.

# Add a fake key and see if the build catches it
t('this.key.definitely.does.not.exist');

Si votre build passe, vous n'avez pas de sécurité de clé au moment de la compilation. Chaque référence de clé est un pari à l'exécution.

4. Mesurez le délai de traduction.

Suivez le temps entre « le développeur fusionne une PR avec de nouvelles chaînes » et « les traductions sont en production pour toutes les locales ». La référence :

  • Vert : < 24 heures (pipeline automatisé, livraison CDN)
  • Jaune : 1 à 5 jours (quelque automatisation, traitement par lots)
  • Rouge : > 1 semaine (flux manuel, couplé au déploiement)

Évaluez votre niveau de dette

CatégorieVertJauneRouge
Chaînes codées en dur< 1 % des chaînes1-10 %> 10 %
Structure des clésEspace de noms par fonctionnalitéPartiellement organiséPlat ou chaotique
Sécurité des typesVérifications à la compilationAvertissements à l'exécutionPas de vérification
Délai de traduction< 24 heures1-5 jours> 1 semaine
Métadonnées de contexteSur toutes les clésSur certaines clésAucune
AutomatisationPipeline CI/CD completPartielleExport/import manuel

Principalement Vert : Votre infrastructure i18n est solide. Concentrez-vous sur l'optimisation. Principalement Jaune : La dette s'accumule. Corrigez les problèmes structurels avant d'ajouter des locales. Principalement Rouge : Arrêtez. Réglez ceci avant de vous étendre. Le coût ne fait qu'augmenter à partir de là.

Le gain : ce que l'élimination de la dette i18n rapporte

Récupération de la vélocité d'ingénierie

Quand l'infrastructure i18n est solide :

  • L'ajout d'une nouvelle locale devient une tâche de contenu, pas un projet d'ingénierie. Ajouter le japonais à un produit avec 2 000 clés anglaises traduites : des jours (temps de traduction), pas des mois (temps de migration).
  • Zéro conflit de fusion sur les fichiers de traduction. Les clés vivent sur une plateforme, pas dans des fichiers JSON dans le dépôt.
  • Zéro bug de clé manquante à l'exécution. TypeScript détecte chaque faute de frappe au moment de la construction.
  • Corrections de traduction en 30 secondes. Une correction d'un mot est publiée sur le CDN sans déploiement.

Accélération du délai de mise sur le marché

La différence entre une équipe avec dette i18n et une équipe sans :

ScénarioAvec detteSans dette
Lancement dans une nouvelle locale3-6 mois1-2 semaines
Livrer une fonctionnalité à toutes les locales2-4 semaines après l'anglaisLe même jour
Corriger une erreur de traduction15-45 minutes (déploiement)30 secondes (publication CDN)
Intégrer un nouveau membre de l'équipeSemaines pour apprendre les modèles i18nIntégration standard

Moral de l'équipe

Celui-ci est difficile à mesurer et facile à sous-estimer. Les ingénieurs qui passent 20 % de leur temps sur la plomberie de traduction n'apprécient pas leur travail. Les traducteurs qui travaillent sans contexte produisent une qualité moindre et s'épuisent plus vite.

Corrigez l'infrastructure, et :

  • Les développeurs écrivent t('checkout.submit') et ne pensent plus jamais à la logistique de traduction.
  • Les traducteurs voient le contexte de l'interface pour chaque chaîne et produisent des traductions correctes dès la première fois.
  • Les chefs de produit suivent la couverture de traduction sur un tableau de bord, pas dans une feuille de calcul.

Un plan de remboursement de la dette i18n sur 90 jours

Mois 1 : Auditer et mesurer (aucune modification de code)

  • Lancez l'audit d'extraction de chaînes. Documentez le nombre.
  • Suivez le délai de traduction pendant 4 sprints. Documentez la moyenne.
  • Comptez les conflits de fusion impliquant des fichiers de locale. Documentez la fréquence.
  • Calculez le coût en utilisant les formules ci-dessus. Présentez le chiffre à la direction.

Ce mois est consacré à la visibilité. Vous ne pouvez pas corriger ce que vous ne pouvez pas mesurer.

Mois 2 : Arrêter la progression

  • Ajoutez une règle ESLint pour bloquer les nouvelles chaînes codées en dur dans les PR. Pas de nouvelle dette.
  • Configurez le scanning AST en CI. Chaque PR signale les clés nouvelles/inutilisées.
  • Migrez les 5 fichiers les plus modifiés vers une structure de clé i18n correcte. Prouvez que le modèle fonctionne.
  • Démarrez un glossaire avec vos 40 termes de domaine les plus importants.

Ce mois est consacré au confinement. Arrêtez d'accumuler de nouvelles dettes pendant que vous planifiez la migration.

Mois 3 : Accélérer et automatiser

  • Connectez votre codebase à une plateforme de traduction avec livraison CDN. Déplacez les traductions hors du dépôt.
  • Activez la traduction IA pour le contenu de niveau 1 (chaînes d'interface, messages d'erreur, notifications système). Cela gère 60 à 70 % de votre volume de traduction automatiquement.
  • Configurez le reporting de couverture de traduction en CI. Chaque PR affiche : « Ce changement est traduit dans 12/15 locales. »
  • Commencez l'arriéré d'extraction. Priorisez par trafic de page : les pages les plus visitées en premier.

À la fin du mois 3, vous devriez voir :

  • Zéro nouvelle chaîne codée en dur entrant dans la codebase
  • Délai de traduction inférieur à 24 heures pour les nouvelles chaînes
  • Un graphique de burndown clair pour l'arriéré d'extraction
  • Des données de coûts qui justifient la poursuite de la migration

Les calculs sont clairs

La dette technique i18n est invisible jusqu'à ce que vous la mesuriez. Ensuite, c'est évident.

L'équipe qui met en place l'infrastructure i18n dès le premier jour passe 2 heures par semaine à la maintenir. L'équipe qui adapte i18n après 2 ans de croissance passe 6 mois à migrer — et la maintenance continue est toujours plus élevée parce que l'architecture a été conçue autour de contraintes, pas de capacités.

Si votre codebase a plus de 1 000 chaînes destinées aux utilisateurs et que vous servez (ou planifiez de servir) plus de 2 locales, le ROI de la correction de votre dette i18n se mesure en semaines, pas en mois.

Chaque sprint que vous attendez, la dette se cumule.


Better i18n donne aux équipes d'ingénierie l'infrastructure pour arrêter d'accumuler de la dette i18n : scanning AST des clés, traductions livrées par CDN, SDK type-safe, et traduction IA avec application du glossaire. Le niveau gratuit inclut tout ce dont vous avez besoin pour auditer votre dette actuelle et commencer à la rembourser. Commencez en 10 minutes.