Brancheneinblicke//8 Min. Lesezeit

Die versteckten Kosten von i18n-technischen Schulden

Eray Gündoğmuş
Teilen

Ihre Ingenieure sind nicht langsam. Ihr Produkt ist nicht zu komplex. Ihre Expansion in neue Märkte dauert 6 Monate pro Locale, weil jemand vor drei Jahren "Welcome back, {name}!" direkt in JSX fest einprogrammiert hat — und dann tausend andere dasselbe getan haben.


Jedes Engineering-Team verfolgt technische Schulden. Code-Komplexitätsmetriken. Rückstand bei Dependency-Updates. Lücken in der Testabdeckung. Wahrscheinlich können Sie den SonarQube-Score Ihres Teams auswendig nennen.

Aber fragen Sie die meisten CTOs nach ihren i18n-Schulden, und Sie erhalten einen leeren Blick. Sie werden nicht verfolgt. Sie werden nicht gemessen. Sie sind in keinem Dashboard zu sehen. Und sie kosten Ihr Team mehr als die meisten Punkte auf Ihrer Liste technischer Schulden — still und leise.

Dieser Beitrag beziffert diese Kosten. Keine hypothetischen Zahlen — die Art, die Sie für Ihre eigene Codebase an einem Nachmittag berechnen können.

Wie i18n-technische Schulden tatsächlich aussehen

Technische Schulden haben eine klinische Definition: die impliziten Kosten zukünftiger Nacharbeit, die durch die Wahl einer schnellen Lösung heute entstehen. Bei i18n ist diese schnelle Lösung fast immer dieselbe: die Übersetzungsinfrastruktur überspringen, Strings hardcoden, „wir internationalisieren später".

Die offensichtlichen Schulden: hardcodierte Strings

Jedes <p>Submit</p> in Ihrem JSX ist ein String, der manuell extrahiert werden muss, bevor er übersetzt werden kann. Jedes alert('Are you sure?') ist eine benutzerseitige Nachricht, die außerhalb Ihres Übersetzungssystems lebt.

Führen Sie ein String-Extraktions-Tool auf einer 50.000-zeiligen React-Codebase aus, die nicht von Anfang an mit i18n aufgebaut wurde. Sie werden typischerweise 3.000–8.000 hardcodierte übersetzbare Strings finden. Jeder einzelne muss:

  1. Identifiziert werden (ist er benutzerseitig?)
  2. Zu einem Übersetzungsschlüssel extrahiert werden
  3. In einen t()-Aufruf eingebettet werden
  4. Zur Übersetzungsdatei hinzugefügt werden
  5. Für jede Ziel-Locale übersetzt werden
  6. Auf Layout und Abschneidung getestet werden

Bei 10–15 Minuten pro String für den vollständigen Extraktionszyklus entsprechen 5.000 Strings 800–1.250 Engineering-Stunden. Das ist die Zeit eines einzelnen Entwicklers für 5–8 Monate. Für Strings, die beim Schreiben des Codes kostenlos hätten externalisiert werden können.

Die unsichtbaren Schulden: strukturelle Probleme

Hardcodierte Strings sind die offensichtlichen Schulden. Die strukturellen Probleme sind schlimmer, weil sie sich aufschaukeln:

Keine Schlüsselstruktur. Schlüssel sind flache Strings wie "submit_button" und "submit_button_2". Es gibt keine Hierarchie, keine Namespace-Konvention, keine Möglichkeit, nach Feature-Bereich in Stapeln zu übersetzen. Wenn Sie Ihren Checkout-Flow übersetzen müssen, können Sie nicht nach checkout-bezogenen Schlüsseln filtern, weil es keine Taxonomie gibt.

Kein String-Kontext. Ihre Übersetzer sehen "Total" und müssen raten: Ist das eine Tabellenüberschrift, ein Button-Label oder eine Rechnungsposition? Auf Deutsch sind das drei verschiedene Wörter. Ohne Kontext-Metadaten zu jedem Schlüssel raten Übersetzer in 15–25 % der Fälle falsch.

Kein Translation Memory. Der Satz „Are you sure you want to delete this?" erscheint 12 Mal in Ihrer App. Ohne Translation Memory wird er 12 Mal separat übersetzt — potenziell auf 12 verschiedene Weisen von verschiedenen Übersetzern.

Keine Automatisierung. Übersetzungsaktualisierungen erfordern, dass ein Entwickler JSON manuell exportiert, es per E-Mail an Übersetzer sendet, auf die Datei wartet, sie manuell importiert und einen PR erstellt. Jede Hin-und-her-Reise dauert 3–5 Werktage.

Die organisatorischen Schulden

Die heimtückischste Form von i18n-Schulden steckt nicht im Code. Sie steckt im Org-Chart.

Eigentümerlücke. Engineering besitzt Übersetzungen nicht — „das ist eine Content-Sache." Marketing versteht das technische System nicht. Product Manager verfolgen die Übersetzungsabdeckung nicht als Metrik. Niemand besitzt die Lücke.

Kein SLA für Übersetzungsupdates. Ein neues Feature wird auf Englisch ausgeliefert und bleibt 2–4 Wochen nur auf Englisch, bevor jemand mit dem Übersetzen beginnt. Internationale Nutzer sehen nach jeder Version wochenlang eine halb übersetzte Benutzeroberfläche — englische Buttons gemischt mit deutschen Labels.

Aufschaukelnde Unwissenheit. Jeder neue Ingenieur, der dem Team beitritt, kopiert die Muster, die er sieht. Wenn die Codebase hardcodierte Strings hat, werden sie Strings hardcoden. Die Schulden wachsen linear mit der Teamgröße.

So quantifizieren Sie, was Sie bezahlen

i18n-Schulden sind messbar. Hier sind die Kostenkategorien und wie man sie berechnet.

Die Engineering-Zeit-Steuer

Stripes Engineering-Umfrage 2023 ergab, dass Entwickler 23 % ihrer Zeit für technische Schulden-Aufgaben aufwenden. McKinsey schätzt, dass 20–40 % der IT-Budgets für Schulden-Wartung aufgewendet werden, bevor neuer Wert geschaffen wird.

Verfolgen Sie diese Punkte speziell für i18n über einen Sprint:

String-Extraktionszeit. Wie viele Stunden haben Entwickler damit verbracht, hardcodierte Strings in t()-Aufrufe einzubetten? Bei den meisten Unternehmen, die i18n nachträglich integrieren, sind das 4–8 Stunden pro Entwickler pro Sprint während der Migration.

Merge-Konflikt-Auflösung. Wenn Übersetzungen als JSON-Dateien im Repo leben, wie viele Merge-Konflikte betrafen Locale-Dateien? Jeder Konflikt dauert 15–30 Minuten zur Auflösung (JSON-Syntax erneut validieren, Schlüsselreihenfolge erneut prüfen, Übersetzungs-CI erneut ausführen). Bei 6 Entwicklern erwarten Sie 1–2 pro Sprint: 30–60 Minuten.

Context-Switch-Kosten. Wie viele Slack-Threads enthielten einen Entwickler, der einem Übersetzer UI-Kontext erklärte? Jeder Thread ist ein 15-minütiger Context-Switch für den Entwickler: 1–2 Stunden pro Sprint.

Deployment-Overhead. Welcher Prozentsatz Ihrer Deployments wird durch reine Übersetzungsänderungen ausgelöst? Wenn Übersetzungen im Repo leben, löst jede Copy-Korrektur die gesamte CI/CD-Pipeline aus. Verfolgen Sie es einen Monat lang. Die Zahl liegt normalerweise bei 15–25 % der Gesamtdeployments.

Der Release-Verzögerungs-Multiplikator

Hier wird die Mathematik unangenehm.

Ihr Produkt hat 5 Ziel-Locales. Jede Locale benötigt im Durchschnitt 2 Wochen, um die neuen Strings eines Features zu übersetzen (unter Berücksichtigung des manuellen Export → Übersetzen → Import → QA-Zyklus). Sie liefern 12 Features pro Jahr aus.

5 Locales × 2-Wochen-Verzögerung × 12 Releases = 120 Locale-Wochen verzögerter Verfügbarkeit.

Das sind 120 Wochen, in denen internationale Nutzer nach jedem Release 2 Wochen lang ein unvollständiges Produkt sehen. Bei einem SaaS-Produkt mit 40 % internationalem Umsatz erlebt nach jedem Release 2 Wochen lang 40 % Ihrer Nutzerbasis ein verschlechtertes Produkt.

Der Aufschaukelungseffekt ist brutal. Jedes Feature fügt neue Strings hinzu. Wenn die Übersetzungen des vorherigen Features nicht abgeschlossen sind, wenn das nächste Release ausgeliefert wird, arbeiten Übersetzer nun gleichzeitig an zwei Rückständen. Die Verzögerung nimmt zu. Die Qualität sinkt. Das Team beginnt, Abkürzungen zu nehmen — „einfach auf Englisch ausliefern, wir übersetzen später." Die Schulden wachsen.

Marktopportunitätskosten

CSA Research berichtet, dass 87 % der Online-Verbraucher nicht von einer Website kaufen, die nur auf Englisch ist. Der globale Softwarelokalisierungsmarkt ist 2025 mit 6,27 Mrd. USD bewertet und wächst mit 12,4 % CAGR (Meticulous Research).

Der Konkurrent, der eine französische Übersetzung 3 Monate vor Ihnen ausliefert, gewinnt nicht nur 3 Monate lang französische Nutzer. Er gewinnt Mundpropaganda, App-Store-Bewertungen, das SEO-Ranking in französischen Suchergebnissen. Sie verlieren nicht 3 Monate Umsatz — Sie geben den First-Mover-Vorteil in einem ganzen Markt auf.

Bei einem SaaS-Produkt mit 10 Mio. USD ARR und 30 % internationalem Wachstumspotenzial entspricht eine 3-monatige Verzögerung bei neuen Locale-Launches etwa 750.000 USD aufgeschobenem Umsatz pro Locale. Das ist eine Zahl, die es wert ist, auf eine Folie zu kommen.

Warum i18n-Schulden schneller aufschaukeln als reguläre technische Schulden

Die meisten technischen Schulden sind linear. Eine unordentliche Funktion verlangsamt die Entwickler, die sie anfassen. Eine veraltete Dependency beeinträchtigt die Services, die sie nutzen. Der Schadensradius ist begrenzt.

i18n-Schulden sind multiplikativ. Hier ist der Grund.

Der Netzwerkeffekt schlechter Architektur

Ein fehlender Übersetzungsschlüssel in einer gemeinsam genutzten Komponente bedeutet eine kaputte Seite in jeder Locale. Ein falsch übersetzter Begriff verbreitet sich auf jeden Screen, der ihn verwendet. Ein schlecht strukturierter Namespace macht jeden neuen Schlüssel länger zu erstellen.

Der Multiplikationsfaktor ist: Anzahl der betroffenen Strings × Anzahl der Locales × Anzahl der Nutzer pro Locale.

Eine einzige Architekturentscheidung — „lass uns flache Schlüssel ohne Namespaces verwenden" — schafft Reibung über Tausende von Strings, Dutzende von Locales und jeden Entwickler, der Übersetzungscode anfasst.

Der Einstellungs-Multiplikator

Neue Ingenieure kopieren bestehende Muster. Wenn Ihre Codebase 500 hardcodierte Strings hat, werden neue Mitarbeiter ebenfalls Strings hardcoden. Sie wissen nicht, dass das i18n-System existiert, weil niemand sie darin eingewiesen hat. Die Schulden wachsen mit jeder Einstellung.

Engineering-Teams mit erheblichen technischen Schulden berichten von 25–35 % höherer Fluktuation (Haystack Analytics 2024). Der Grund: Entwickler wollen ihre Zeit nicht damit verbringen, Strings zu extrahieren und Merge-Konflikte zu lösen. Sie wollen Features bauen. Wenn Ihre Codebase jedes Feature aufgrund von i18n-Overhead 30 % länger dauern lässt, werden Ihre besten Ingenieure eine Codebase finden, die das nicht tut.

Die „Wir reparieren es vor der Expansion"-Falle

Das ist das häufigste Entscheidungsmuster — und das teuerste:

  1. Jahr 1: Produkt wird auf Englisch gestartet. „Wir fügen i18n vor der Expansion hinzu."
  2. Jahr 2: Produkt wächst. i18n wird immer wieder deprioritisiert. Die Codebase sammelt 5.000 hardcodierte Strings an.
  3. Jahr 3: Das Sales-Team bekommt einen Lead in Deutschland. Die Führung sagt: „Wie schnell können wir auf Deutsch launchen?"
  4. Engineering-Antwort: „6 Monate, um alle Strings zu extrahieren, die Übersetzungspipeline aufzusetzen, zu übersetzen und QA zu machen."
  5. Führung: „Das ist zu langsam. Übersetzen Sie einfach die sichtbarsten Seiten manuell."
  6. Ergebnis: Halb übersetztes Produkt. Inkonsistente Qualität. Die „echte" i18n-Migration wird weiter verschoben.

Bis Jahr 3 sind die Kosten für eine ordentliche Internationalisierung von „2 Wochen Setup" (wenn in Jahr 1 gemacht) auf „6 Monate Migration" (Nachbesserung einer reifen Codebase) gestiegen. Die technischen Schulden haben sich nicht nur angehäuft — sie haben sich aufgeschaukelt.

Das Audit: Ihren i18n-Schulden-Score finden

Sie können Ihre i18n-Schulden in einem einzigen Sprint quantifizieren. So geht's.

Schritt-für-Schritt-Audit-Prozess

1. Nicht verfolgte übersetzbare Strings zählen.

Führen Sie ein AST-basiertes String-Extraktions-Tool auf Ihrer Codebase aus:

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

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

Die Ausgabe sagt Ihnen, wie viele benutzerseitige Strings außerhalb Ihres Übersetzungssystems existieren. Das ist Ihr roher Extraktionsrückstand.

2. Struktur der Übersetzungsdatei prüfen.

Beantworten Sie diese Fragen:

  • Sind Schlüssel nach Feature/Komponente organisiert oder flach?
  • Wie groß ist die größte einzelne Locale-Datei? (Bei > 500 Schlüsseln in einer Datei haben Sie ein Namespace-Problem)
  • Haben Schlüssel Kontextbeschreibungen?
  • Gibt es ein Glossar?

3. Typsicherheit prüfen.

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

Wenn Ihr Build bestanden wird, haben Sie keine Compile-Time-Schlüsselsicherheit. Jede Schlüsselreferenz ist ein Laufzeit-Glücksspiel.

4. Übersetzungsverzögerung messen.

Verfolgen Sie die Zeit von „Entwickler merged PR mit neuen Strings" bis „Übersetzungen sind in der Produktion für alle Locales live." Der Benchmark:

  • Grün: < 24 Stunden (automatisierte Pipeline, CDN-Auslieferung)
  • Gelb: 1–5 Tage (etwas Automatisierung, Stapelverarbeitung)
  • Rot: > 1 Woche (manueller Workflow, deployment-gekoppelt)

Bewerten Sie Ihr Schulden-Niveau

KategorieGrünGelbRot
Hardcodierte Strings< 1 % der Strings1–10 %> 10 %
SchlüsselstrukturNach Feature mit NamespaceTeilweise organisiertFlach oder chaotisch
TypsicherheitCompile-Time-PrüfungenLaufzeit-WarnungenKeine Prüfung
Übersetzungsverzögerung< 24 Stunden1–5 Tage> 1 Woche
Kontext-MetadatenBei allen SchlüsselnBei einigen SchlüsselnKeine
AutomatisierungVollständige CI/CD-PipelineTeilweiseManueller Export/Import

Meistens Grün: Ihre i18n-Infrastruktur ist solide. Konzentrieren Sie sich auf Optimierung. Meistens Gelb: Schulden häufen sich an. Beheben Sie strukturelle Probleme, bevor Sie Locales hinzufügen. Meistens Rot: Stopp. Beheben Sie das, bevor Sie expandieren. Die Kosten steigen von hier nur noch.

Die Auszahlung: Was die Beseitigung von i18n-Schulden zurückbringt

Rückgewinnung der Engineering-Geschwindigkeit

Wenn die i18n-Infrastruktur solide ist:

  • Das Hinzufügen einer neuen Locale wird zu einer Content-Aufgabe, nicht zu einem Engineering-Projekt. Japanisch zu einem Produkt mit 2.000 übersetzten englischen Schlüsseln hinzufügen: Tage (Übersetzungszeit), nicht Monate (Migrationszeit).
  • Null Merge-Konflikte bei Übersetzungsdateien. Schlüssel leben auf einer Plattform, nicht in JSON-Dateien im Repo.
  • Null Laufzeit-Fehlende-Schlüssel-Bugs. TypeScript fängt jeden Tippfehler zur Compile-Time ab.
  • 30-Sekunden-Übersetzungskorrekturen. Eine Ein-Wort-Korrektur wird ohne Deployment an das CDN veröffentlicht.

Beschleunigung der Time-to-Market

Der Unterschied zwischen einem Team mit i18n-Schulden und einem Team ohne:

SzenarioMit SchuldenOhne Schulden
Launch in neuer Locale3–6 Monate1–2 Wochen
Feature an alle Locales ausliefern2–4 Wochen nach EnglischGleicher Tag
Übersetzungsfehler beheben15–45 Minuten (Deployment)30 Sekunden (CDN-Veröffentlichung)
Neues Teammitglied hinzufügenWochen, um i18n-Muster zu lernenStandard-Onboarding

Team-Moral

Diese ist schwer zu messen und leicht zu unterschätzen. Ingenieure, die 20 % ihrer Zeit mit Übersetzungs-Infrastrukturarbeiten verbringen, genießen ihre Arbeit nicht. Übersetzer, die ohne Kontext arbeiten, produzieren geringere Qualität und brennen schneller aus.

Beheben Sie die Infrastruktur, und:

  • Entwickler schreiben t('checkout.submit') und denken nie wieder an Übersetzungslogistik.
  • Übersetzer sehen den UI-Kontext für jeden String und produzieren beim ersten Versuch korrekte Übersetzungen.
  • Product Manager verfolgen die Übersetzungsabdeckung in einem Dashboard, nicht in einer Tabelle.

Ein 90-Tage-i18n-Schulden-Tilgungsplan

Monat 1: Audit und Messen (keine Code-Änderungen)

  • Führen Sie das String-Extraktions-Audit durch. Dokumentieren Sie die Zahl.
  • Verfolgen Sie die Übersetzungsverzögerung über 4 Sprints. Dokumentieren Sie den Durchschnitt.
  • Zählen Sie Merge-Konflikte, die Locale-Dateien betreffen. Dokumentieren Sie die Häufigkeit.
  • Berechnen Sie die Kosten mit den obigen Formeln. Präsentieren Sie die Zahl der Führung.

Dieser Monat dreht sich um Sichtbarkeit. Sie können nicht reparieren, was Sie nicht messen können.

Monat 2: Die Blutung stoppen

  • Fügen Sie eine ESLint-Regel hinzu, um neue hardcodierte Strings in PRs zu blockieren. Keine neuen Schulden.
  • Richten Sie AST-Scanning in CI ein. Jeder PR meldet neue/ungenutzte Schlüssel.
  • Migrieren Sie die 5 am häufigsten geänderten Dateien zur richtigen i18n-Schlüsselstruktur. Beweisen Sie, dass das Muster funktioniert.
  • Starten Sie ein Glossar mit Ihren 40 wichtigsten Domänenbegriffen.

Dieser Monat dreht sich um Eindämmung. Hören Sie auf, neue Schulden anzuhäufen, während Sie die Migration planen.

Monat 3: Beschleunigen und automatisieren

  • Verbinden Sie Ihre Codebase mit einer Übersetzungsplattform mit CDN-Auslieferung. Verschieben Sie Übersetzungen aus dem Repo.
  • Aktivieren Sie KI-Übersetzung für Tier-1-Inhalte (UI-Strings, Fehlermeldungen, Systembenachrichtigungen). Das behandelt 60–70 % Ihres Übersetzungsvolumens automatisch.
  • Richten Sie Übersetzungsabdeckungs-Reporting in CI ein. Jeder PR zeigt: „Diese Änderung ist in 12/15 Locales übersetzt."
  • Beginnen Sie den Extraktionsrückstand. Priorisieren Sie nach Seitentraffic: zuerst Seiten mit dem höchsten Traffic.

Bis Ende Monat 3 sollten Sie sehen:

  • Null neue hardcodierte Strings, die in die Codebase gelangen
  • Übersetzungsverzögerung unter 24 Stunden für neue Strings
  • Ein klares Burndown-Chart für den Extraktionsrückstand
  • Kostendaten, die die Fortsetzung der Migration rechtfertigen

Die Mathematik ist klar

i18n-technische Schulden sind unsichtbar, bis Sie sie messen. Dann sind sie offensichtlich.

Das Team, das vom ersten Tag an i18n-Infrastruktur einrichtet, verbringt 2 Stunden pro Woche mit deren Pflege. Das Team, das i18n nach 2 Jahren Wachstum nachträglich integriert, verbringt 6 Monate mit der Migration — und die laufende Wartung ist immer noch höher, weil die Architektur um Einschränkungen herum gestaltet wurde, nicht um Fähigkeiten.

Wenn Ihre Codebase mehr als 1.000 benutzerseitige Strings hat und Sie mehr als 2 Locales bedienen (oder bedienen möchten), wird der ROI der Behebung Ihrer i18n-Schulden in Wochen gemessen, nicht in Monaten.

Jeden Sprint, den Sie warten, schaukeln sich die Schulden auf.


Better i18n gibt Engineering-Teams die Infrastruktur, um das Anhäufen von i18n-Schulden zu stoppen: AST-Schlüssel-Scanning, CDN-ausgelieferte Übersetzungen, typsichere SDKs und KI-Übersetzung mit Glossar-Durchsetzung. Der kostenlose Tarif enthält alles, was Sie brauchen, um Ihre aktuellen Schulden zu auditieren und mit der Tilgung zu beginnen. In 10 Minuten starten.

Comments

Loading comments...