Amerikansk annonseplattform · ~20 år gammel kodebase

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