Amerikaans advertentieplatform · codebase van ~20 jaar oud

Modernisering van een monoliet van 823.000 regels — zonder downtime, zonder big bang

Een live .NET Framework 4.8-platform met 54 projecten en 23.000 commits aan historie, stapsgewijs gemoderniseerd naar .NET 10 — het oude systeem blijft draaien terwijl het nieuwe sectie voor sectie overneemt. 19 secties met tests in circa 8 dagen.

  • 823.000 regels legacy-code
  • 19 secties in ~8 dagen
  • SSO zonder één wijziging aan het oude systeem
  • 175 tests vanaf dag één

De klant

Een Amerikaanse bedrijvengids en advertentieplatform dat al bijna twee decennia draait: consumenten, merchants, resellers, betalingen, transactiegeschillen, integraties met advertentienetwerken. Een levend bedrijf met echte omzet — en een codebase waar niemand aan durfde te komen.

De uitdaging

Het systeem: 823.000 regels C# verdeeld over 54 projecten, .NET Framework 4.8, WebForms-pagina's van meer dan tien jaar oud, 581 tabellen in het datamodel en ruim 23.000 commits aan historie. Alles loopt via één centrale "hub"-applicatie waarvan acht afzonderlijke sites en services afhankelijk zijn.

Het klassieke dilemma: een volledige herbouw is te riskant en te duur, terwijl het handhaven van de status quo elk jaar duurder wordt — de oude technologieën worden niet meer ondersteund, nieuwe ontwikkelaars willen er niet mee werken en elke wijziging is gevaarlijk.

De aanpak

We kozen voor incrementele modernisering ("strangler fig"): het nieuwe systeem groeit naast het oude en neemt de functionaliteit pagina voor pagina over, terwijl gebruikers niets merken.

  • Inventariseren vóór coderen. Alle 123 beheerpagina's werden gecatalogiseerd en geprioriteerd. Zo'n 30 ervan bleken dood of gedupliceerd — die hebben we uitgefaseerd zonder één regel te porteren. Kleinere scope, lagere prijs.
  • Een onzichtbare overgang. De nieuwe applicatie draait op hetzelfde adres, achter dezelfde login. Een gebruiker logt in op het oude systeem en schakelt zonder tweede login over naar de nieuwe pagina's — zonder één wijziging aan de oude code.
  • Porteer alleen wat leeft. Voor elke pagina traceren we de volledige keten van businesslogica en porteren we alleen wat daadwerkelijk wordt gebruikt. Dode logica sterft simpelweg door niet geporteerd te worden.
  • Tests dezelfde dag. Elke gemigreerde sectie wordt in dezelfde PR met geautomatiseerde tests opgeleverd — inclusief tests die het gedrag van de nieuwe code met dat van de oude vergelijken op identieke data.
  • Beslissingen op papier. Circa 1.800 regels projectdocumentatie (migratieplaybook, afhankelijkheidsanalyse, teststrategie), geschreven vóór en naast de code — zodat elke beslissing morgen opnieuw te verifiëren is, door iedereen.

Het resultaat

  • 19 beheersecties — betalingen, geschillen, pakketten, categorieën, rapportages — gemigreerd in circa 8 werkdagen, met 175 geautomatiseerde tests.
  • Nul risico voor het draaiende bedrijf: het oude systeem blijft alles bedienen wat nog niet is gemigreerd; de overgang is onzichtbaar voor gebruikers.
  • Een modern fundament (.NET 10) waarop nieuwe features uren kosten in plaats van weken — en waarvoor ontwikkelaars makkelijk te vinden zijn.
  • Scope al vóór de start verkleind: voor de dode pagina's is niet een tweede keer betaald.

De snelheid komt van AI-versnelde ontwikkeling. De veiligheid komt van de methode: inventarisatie, pariteitstests en een overgang zonder big bang. Het een werkt niet zonder het ander.

Technologie

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