Modernisering av en monolitt på 823 000 linjer — uten nedetid, uten big bang
En .NET Framework 4.8-plattform i full drift med 54 prosjekter og 23 000 commits med historikk, modernisert trinnvis til .NET 10 — det gamle systemet kjører videre mens det nye tar over seksjon for seksjon. 19 seksjoner med tester på rundt 8 dager.
- 823 000 linjer eldre kode
- 19 seksjoner på ~8 dager
- SSO uten en eneste endring i det gamle systemet
- 175 tester fra dag én
Kunden
En amerikansk bedriftskatalog- og annonseplattform i drift i nesten to tiår: forbrukere, forhandlere, videreforhandlere, betalinger, transaksjonstvister, integrasjoner mot annonsenettverk. En levende virksomhet med reelle inntekter — og en kodebase ingen turte å røre.
Utfordringen
Systemet: 823 000 linjer C# fordelt på 54 prosjekter, .NET Framework 4.8, WebForms-sider over ti år gamle, 581 tabeller i datamodellen og mer enn 23 000 commits med historikk. Alt flyter gjennom én sentral «hub»-applikasjon som åtte separate nettsteder og tjenester er avhengige av.
Det klassiske dilemmaet: en full omskriving er for risikabel og for dyr, mens det å opprettholde status quo blir dyrere for hvert år — de gamle teknologiene er ute av support, nye utviklere vil ikke jobbe med dem, og hver endring er farlig.
Tilnærmingen
Vi valgte trinnvis modernisering («strangler fig»): det nye systemet vokser ved siden av det gamle og tar over funksjonalitet side for side, mens brukerne ikke merker noe.
- Inventar før kode. Alle 123 admin-sider ble katalogisert og prioritert. Rundt 30 av dem viste seg å være døde eller duplikater — vi pensjonerte dem uten å portere en eneste linje. Mindre omfang, lavere pris.
- En usynlig overgang. Den nye applikasjonen kjører på samme adresse, bak samme innlogging. En bruker logger inn i det gamle systemet og går over til de nye sidene uten en ny innlogging — uten en eneste endring i den gamle koden.
- Porter kun det som lever. For hver side sporer vi hele kallkjeden i forretningslogikken og porterer bare det som faktisk brukes. Død logikk dør ved ganske enkelt ikke å bli portert.
- Tester samme dag. Hver migrert seksjon leveres med automatiserte tester i samme PR — inkludert tester som sammenligner den nye kodens oppførsel med den gamle på identiske data.
- Beslutninger på papir. Rundt 1 800 linjer prosjektdokumentasjon (migreringshåndbok, avhengighetsanalyse, teststrategi) skrevet før og parallelt med koden — slik at hver beslutning kan etterprøves i morgen, av hvem som helst.
Resultatet
- 19 admin-seksjoner — betalinger, tvister, pakker, kategorier, rapporter — migrert på rundt 8 arbeidsdager, med 175 automatiserte tester.
- Null risiko for den løpende virksomheten: det gamle systemet fortsetter å betjene alt som ennå ikke er migrert; overgangen er usynlig for brukerne.
- Et moderne fundament (.NET 10) der nye funksjoner tar timer i stedet for uker — og som det er lett å finne utviklere til.
- Omfanget redusert før start: de døde sidene ble ikke betalt for en gang til.
Farten kommer fra KI-akselerert utvikling. Tryggheten kommer fra metoden: inventar, paritetstester og en overgang uten big bang. Ingen av delene fungerer uten den andre.
Teknologi
.NET 10 · ASP.NET Core MVC · EF Core · nginx coexistence · xUnit + Playwright