Amerikansk annonceplatform · ~20 år gammel kodebase

Modernisering af en monolit på 823.000 linjer — uden nedetid, uden big bang

En .NET Framework 4.8-platform i drift med 54 projekter og 23.000 commits' historik, moderniseret trinvist til .NET 10 — det gamle system kører videre, mens det nye overtager sektion for sektion. 19 sektioner med tests på cirka 8 dage.

  • 823.000 linjer legacy-kode
  • 19 sektioner på ~8 dage
  • SSO uden ændringer i det gamle system
  • 175 tests fra dag ét

Kunden

En amerikansk virksomhedskatalog- og annonceplatform i drift i næsten to årtier: forbrugere, handlende, forhandlere, betalinger, transaktionstvister, integrationer til annoncenetværk. En levende forretning med reel omsætning — og en kodebase, ingen turde røre.

Udfordringen

Systemet: 823.000 linjer C# fordelt på 54 projekter, .NET Framework 4.8, WebForms-sider på over ti år, 581 tabeller i datamodellen og mere end 23.000 commits' historik. Alt løber gennem én central "hub"-applikation, som otte separate sites og services afhænger af.

Det klassiske dilemma: en fuld omskrivning er for risikabel og dyr, mens status quo bliver dyrere år for år — de gamle teknologier er ude af support, nye udviklere vil ikke arbejde med dem, og hver ændring er farlig.

Fremgangsmåden

Vi valgte trinvis modernisering ("strangler fig"): det nye system vokser ved siden af det gamle og overtager funktionalitet side for side, uden at brugerne bemærker noget.

  • Inventar før kode. Alle 123 admin-sider blev katalogiseret og prioriteret. Omkring 30 af dem viste sig at være døde eller duplikerede — vi pensionerede dem uden at portere en eneste linje. Mindre omfang, lavere pris.
  • En usynlig overgang. Den nye applikation kører på samme adresse, bag samme login. En bruger logger ind i det gamle system og skifter til de nye sider uden et nyt login — uden en eneste ændring i den gamle kode.
  • Portér kun det, der lever. For hver side sporer vi forretningslogikkens fulde kaldekæde og porterer kun det, der faktisk bruges. Død logik dør ved simpelthen ikke at blive porteret.
  • Tests samme dag. Hver migreret sektion leveres med automatiserede tests i samme PR — inklusive tests, der sammenligner den nye kodes adfærd med den gamle på identiske data.
  • Beslutninger på skrift. Omkring 1.800 linjer projektdokumentation (migreringsdrejebog, afhængighedsanalyse, teststrategi) skrevet før og sideløbende med koden — så enhver beslutning kan efterprøves i morgen, af hvem som helst.

Resultatet

  • 19 admin-sektioner — betalinger, tvister, pakker, kategorier, rapporter — migreret på cirka 8 arbejdsdage med 175 automatiserede tests.
  • Nul risiko for den kørende forretning: det gamle system betjener fortsat alt, der endnu ikke er migreret; overgangen er usynlig for brugerne.
  • Et moderne fundament (.NET 10), hvor nye funktioner tager timer i stedet for uger — og som det er let at finde udviklere til.
  • Omfanget reduceret inden start: de døde sider blev ikke betalt en gang til.

Hastigheden kommer fra AI-accelereret udvikling. Sikkerheden kommer fra metoden: inventar, paritetstests og en overgang uden big bang. Ingen af delene fungerer uden den anden.

Teknologi

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