Modernisering av en monolit på 823 000 rader — utan driftstopp, utan big bang
En .NET Framework 4.8-plattform i drift med 54 projekt och 23 000 commits av historik, moderniserad stegvis till .NET 10 — det gamla systemet fortsätter köra medan det nya tar över sektion för sektion. 19 sektioner med tester på cirka 8 dagar.
- 823 000 rader legacy-kod
- 19 sektioner på ~8 dagar
- SSO utan en enda ändring i det gamla systemet
- 175 tester från dag ett
Kunden
En amerikansk företagskatalogs- och annonsplattform i drift i nästan två decennier: konsumenter, handlare, återförsäljare, betalningar, transaktionstvister, integrationer med annonsnätverk. En levande verksamhet med riktiga intäkter — och en kodbas ingen vågade röra.
Utmaningen
Systemet: 823 000 rader C# fördelade på 54 projekt, .NET Framework 4.8, WebForms-sidor mer än ett decennium gamla, 581 tabeller i datamodellen och över 23 000 commits av historik. Allt flödar genom en central "hubb"-applikation som åtta separata sajter och tjänster är beroende av.
Det klassiska dilemmat: en total omskrivning är för riskabel och dyr, medan status quo blir dyrare för varje år — de gamla teknikerna saknar support, nya utvecklare vill inte arbeta med dem, och varje ändring är farlig.
Angreppssättet
Vi valde stegvis modernisering ("strangler fig"): det nya systemet växer bredvid det gamla och tar över funktionalitet sida för sida, medan användarna inte märker någonting.
- Inventering före kod. Alla 123 adminsidor katalogiserades och prioriterades. Ett trettiotal visade sig vara döda eller duplicerade — vi pensionerade dem utan att portera en rad. Mindre omfattning, lägre pris.
- En osynlig övergång. Den nya applikationen körs på samma adress, bakom samma inloggning. En användare loggar in i det gamla systemet och växlar till de nya sidorna utan en andra inloggning — utan en enda ändring i den gamla koden.
- Portera bara det som lever. För varje sida spårar vi hela anropskedjan i affärslogiken och porterar bara det som faktiskt används. Död logik dör genom att helt enkelt inte porteras.
- Tester samma dag. Varje migrerad sektion levereras med automatiserade tester i samma PR — inklusive tester som jämför den nya kodens beteende mot den gamla på identiska data.
- Beslut på papper. Runt 1 800 rader projektdokumentation (migreringshandbok, beroendeanalys, teststrategi) skrivna före och parallellt med koden — så att varje beslut kan verifieras på nytt i morgon, av vem som helst.
Resultatet
- 19 adminsektioner — betalningar, tvister, paket, kategorier, rapporter — migrerade på cirka 8 arbetsdagar, med 175 automatiserade tester.
- Noll risk för den löpande verksamheten: det gamla systemet fortsätter betjäna allt som ännu inte migrerats; övergången är osynlig för användarna.
- En modern grund (.NET 10) där nya funktioner tar timmar i stället för veckor — och som det är lätt att hitta utvecklare till.
- Omfattningen krympt före start: de döda sidorna betalades inte för en andra gång.
Snabbheten kommer från AI-accelererad utveckling. Tryggheten kommer från metoden: inventering, paritetstester och en övergång utan big bang. Inget av dem fungerar utan det andra.
Teknik
.NET 10 · ASP.NET Core MVC · EF Core · nginx coexistence · xUnit + Playwright