US-Werbeplattform · ~20 Jahre alte Codebasis

Modernisierung eines Monolithen mit 823.000 Zeilen — ohne Downtime, ohne Big Bang

Eine produktive .NET-Framework-4.8-Plattform mit 54 Projekten und 23.000 Commits Historie, schrittweise auf .NET 10 modernisiert — das alte System läuft weiter, während das neue Bereich für Bereich übernimmt. 19 Bereiche mit Tests in rund 8 Tagen.

  • 823.000 Zeilen Legacy-Code
  • 19 Bereiche in ~8 Tagen
  • SSO ohne eine einzige Änderung am Altsystem
  • 175 Tests vom ersten Tag an

Der Kunde

Eine amerikanische Branchenverzeichnis- und Werbeplattform, seit fast zwei Jahrzehnten in Betrieb: Verbraucher, Händler, Reseller, Zahlungen, Transaktionsstreitfälle, Werbenetzwerk-Integrationen. Ein lebendiges Geschäft mit echten Umsätzen — und eine Codebasis, die niemand anzufassen wagte.

Die Herausforderung

Das System: 823.000 Zeilen C# in 54 Projekten, .NET Framework 4.8, WebForms-Seiten von mehr als einem Jahrzehnt Alter, 581 Tabellen im Datenmodell und über 23.000 Commits Historie. Alles läuft über eine zentrale „Hub“-Anwendung, von der acht separate Sites und Services abhängen.

Das klassische Dilemma: Ein kompletter Rewrite ist zu riskant und zu teuer, während der Status quo jedes Jahr teurer wird — die alten Technologien sind aus dem Support, neue Entwickler wollen nicht damit arbeiten, und jede Änderung ist gefährlich.

Der Ansatz

Wir wählten die inkrementelle Modernisierung („Strangler Fig“): Das neue System wächst neben dem alten und übernimmt die Funktionalität Seite für Seite, während die Nutzer nichts davon bemerken.

  • Inventur vor Code. Alle 123 Admin-Seiten wurden katalogisiert und priorisiert. Rund 30 davon erwiesen sich als tot oder doppelt — wir legten sie still, ohne eine Zeile zu portieren. Kleinerer Umfang, niedrigerer Preis.
  • Ein unsichtbarer Übergang. Die neue Anwendung läuft unter derselben Adresse, hinter demselben Login. Ein Nutzer meldet sich im alten System an und wechselt ohne zweiten Login zu den neuen Seiten — ohne eine einzige Änderung am alten Code.
  • Nur portieren, was lebt. Für jede Seite verfolgen wir die vollständige Aufrufkette der Geschäftslogik und portieren nur, was tatsächlich genutzt wird. Tote Logik stirbt, indem sie schlicht nicht portiert wird.
  • Tests noch am selben Tag. Jeder migrierte Bereich wird im selben PR mit automatisierten Tests ausgeliefert — einschließlich Tests, die das Verhalten des neuen Codes auf identischen Daten gegen das alte vergleichen.
  • Entscheidungen auf Papier. Rund 1.800 Zeilen Projektdokumentation (Migrations-Playbook, Abhängigkeitsanalyse, Teststrategie), geschrieben vor und parallel zum Code — damit jede Entscheidung morgen von jedem nachgeprüft werden kann.

Das Ergebnis

  • 19 Admin-Bereiche — Zahlungen, Streitfälle, Pakete, Kategorien, Berichte — migriert in rund 8 Arbeitstagen, mit 175 automatisierten Tests.
  • Null Risiko für das laufende Geschäft: Das alte System bedient weiterhin alles, was noch nicht migriert ist; der Übergang ist für die Nutzer unsichtbar.
  • Ein modernes Fundament (.NET 10), auf dem neue Funktionen Stunden statt Wochen brauchen — und für das sich Entwickler leicht finden lassen.
  • Der Umfang wurde schon vor dem Start reduziert: Die toten Seiten wurden nicht ein zweites Mal bezahlt.

Die Geschwindigkeit kommt aus KI-beschleunigter Entwicklung. Die Sicherheit kommt aus der Methode: Inventur, Paritätstests und ein Übergang ohne Big Bang. Keines von beiden funktioniert ohne das andere.

Technologie

.NET 10 · ASP.NET Core MVC · EF Core · nginx coexistence · xUnit + Playwright