Beslutningsguide
Hvis I søger efter at udskifte et legacy-system eller modernisering af et IT-system, har I typisk allerede mærket prisen: langsom leverance, én person der tør røre koden, en integration der kun virker om natten, eller en sælger der lover ting, systemet ikke kan. Det er et ærligt sted at stå. Det er også det sted, hvor de dyreste fejl starter.
Vi ser to yderpunkter. Det ene er big-bang: alt skal skrives om, fordi stacken er pinlig. Det andet er evig udskydelse: "det kører jo", indtil det ikke gør, og så er der ingen, der kan starte det igen. Begge er dyre. Denne guide er den ramme vi bruger, når spørgsmålet ikke er "er systemet gammelt", men "hvad skal I faktisk gøre ved det — og i hvilken rækkefølge".
TL;DR
De vigtigste pointer
- Skift når systemet blokerer en navngiven forretningsbeslutning — ikke når det fejler en æstetisk test.
- En omskrivning er et produktprojekt med cutover, data og brugere. Den er sjældent det første skridt.
- Wrap og strangle slår big-bang, når kernen stadig er sand, og smerten sidder i kanterne.
- "Ingen tør røre det" er en risiko, I skal reducere — det er ikke automatisk et argument for at smide det væk.
- Et nyt system uden ejerskab af data og processer bliver det næste legacy. Scope er den rigtige samtale.
- Start med den ene strøm, I vil have ud af det gamle. Ikke med en ny platform og et håb.
Hvorfor det her overhovedet er vigtigt
Legacy er et sløret ord. Nogle gange betyder det "skrevet i et sprog, de unge ikke vil røre". Nogle gange betyder det "den eneste kilde til sandhed om ordrer, kunder og lager". Det første er et rekrutteringsproblem. Det andet er jeres forretning. At blande de to er, hvordan omskrivninger spiser et år og stadig misser den ordretype, der betaler lønnen.
Modernisering sælges ofte som et teknologisk løft: ny ramme, nyt cloud, nyt UI. Det kan være rigtigt. Det er forkert som mål. Målet er, at I kan ændre en forretningsregel uden at bede den sidste person, der husker den, om at turde. Hvis I kan det i det gamle system — med tests, med dokumentation, med en afgrænset snitflade — er I allerede i gang med at modernisere, uden at have skiftet noget.
Omvendt: hvis I ikke kan ansætte ind, ikke kan integrere, ikke kan overholde en kontrakt, eller ikke kan slukke en manuel proces, der vokser med hver ny kunde, så er alder irrelevant. Så blokerer systemet. Så skal I handle. Handlingen er bare sjældent "byg det hele om bag et forhæng og skift over en weekend".
Det, I vælger her, er total cost of ownership over de næste år — ikke en følelse af at være moderne. En dyr omskrivning, der leverer et pænere UI oven på de samme uklare regler, er det dyreste sted at ende.
Hvad der typisk er galt — når I skræller ordet "legacy" af
Den hyppigste smerte er viden, der sidder i hoveder. Koden er ikke nødvendigvis dårlig. Den er udokumenteret, uden tests, og den eneste, der har deployet den, er på ferie. Det er en drifts- og rekrutteringsrisiko. Den løses med karakteriseringstests, runbooks og parring — ikke automatisk med en ny stack.
Den næste er data, der kun er sande i det gamle system. Ordrer, priser, serienumre, kundekort. Alt nyt I bygger, skal enten læse derfra eller overtage sandheden. Hvis I ikke ved, hvilken tabel der vinder, når to systemer er uenige, er I ikke klar til at skifte. I er klar til at tegne et datakort.
Den tredje er kanterne: et UI, ingen kan holde ud, en integration der kun kører som natjob, en rapport der tager en formiddag, en onboarding der kræver tre mails til den interne specialist. Her er wrapping ofte det rigtige: et nyt lag foran, det gamle som kilde, indtil I har flyttet den ene strøm, der gør ondt.
Den fjerde er platformen selv: licenser I ikke kan forlænge, et OS der ikke får patches, en vendor der er væk, hardware I ikke kan købe. Det er en ægte deadline. Den retfærdiggør handling. Den retfærdiggør stadig ikke, at I omskriver forretningslogik, I ikke har karakteriseret.
Tre strategier — og hvornår hver af dem er ærlig
Lad det stå, og reducer risikoen. Det er rigtigt, når kernen er stabil, smerten er sælden, og I kan isolere den med tests, overvågning og en navngiven ejer. "Lad det stå" uden ejer er bare udskydelse. Med ejer, backup og en plan for den dag det knækker, er det et voksent valg — især hvis I har vigtigere produktarbejde.
Wrap og strangle. I lægger et nyt lag omkring det gamle: et API, en portal, et nyt UI, en ny integration. Trafik og skrivninger flyttes strøm for strøm. Det gamle bliver mindre, indtil det kan slukkes eller efterlades som et arkiv. Det er rigtigt, når sandheden stadig bor i kernen, og I kan skære en snitflade. Det er forkert, når I wrapper uden at flytte skrivninger — så har I to sandheder og et synkroniseringsprojekt.
Erstat. I bygger det nye som kilden til sandhed for en afgrænset del, migrerer data, og slukker den del i det gamle. Det er rigtigt, når I kan pege på den del, når I har en cutover-plan, og når det gamle ikke kan bære den ændring, forretningen allerede har lovet. Det er forkert, når "erstat" betyder hele landskabet på én gang, fordi det føles renere på et slides.
De tre kan kombineres. Det, I ikke må, er at kalde et wrap for en erstatning, eller en erstatning for et "lille løft". Navngiv strategien. Så kan I sige nej til scope, der hører til en anden strategi.
Wrap og strangle vs. erstat den kerne, der blokerer
Wrap / strangle
Nyt lag foran; det gamle bliver mindre over tid.
- Sandheden bor stadig i det gamle system i starten
- I kan skære en snitflade og flytte én strøm
- Brugerne får værdi, før det gamle er slukket
- Risiko: to sandheder, hvis skrivninger ikke flytter med
Erstat (afgrænset)
Det nye bliver kilde til sandhed for én del.
- I kan pege på den del og de data, der skal med
- Det gamle kan ikke bære den ændring, I har lovet
- Cutover, rollback og paritet er planlagt — ikke håbet
- Risiko: I undervurderer de regler, der kun lever i hoveder
Sådan beslutter I, om I overhovedet skal skifte
Fem spørgsmål. Hvis I ikke kan svare på dem, er I ikke klar til et erstatningsprojekt — uanset hvor gammelt systemet er.
- 01
Hvilken forretningsbeslutning er blokeret?
En navngiven ting: en kontrakt, en kanal, en integration, en compliance-krav, en ansættelse I ikke kan lave. "Det føles gammelt" tæller ikke. Hvis I ikke kan pege på blokeringen, er næste skridt at reducere risiko — ikke at skifte.
- 02
Hvor bor sandheden i dag?
Hvilke tabeller, filer, manuelle lister? Hvem vinder, når to kilder er uenige? Uden det kort bliver det nye system en ny kopi, I ikke tør stole på.
- 03
Hvad er den mindste strøm, der fjerner blokeringen?
Én ordretype, ét login, én rapport, én integration. Hvis svaret er "det hele", har I ikke skåret. Skær, eller I bygger et big-bang under et andet navn.
- 04
Kan det gamle bære et wrap, eller skal skrivninger flytte?
Hvis I kun skal læse og vise, wrapper I. Hvis I skal ændre regler, det gamle ikke kan rumme, skal det nye eje den del. Vær ærlig. Et wrap, der alligevel skriver begge steder uden ejer, er det værste af to verdener.
- 05
Hvem ejer cutover, data og den daglige drift bagefter?
Et system uden ejer bliver legacy igen — også når det er nyt. Hvis I ikke kan navngive produkt, drift og den person der må sige nej til scope, så vent med at bygge.
“I skifter ikke et legacy-system, fordi det er gammelt. I skifter den del, der blokerer — og I lader resten stå, indtil den også gør.”
Hvornår I skal lade det stå (og alligevel gøre noget)
Lad det stå, når blokeringen er hypotetisk, og kernen er sand. Et ældre ERP der faktisk afspejler lageret, er mere værd end et nyt UI der gætter. Jeres job er at gøre det mindre skrøbeligt: karakteriseringstests omkring de flows, I tør røre, overvågning på de jobs der fejler stille, og en runbook til den dag den sidste specialist er syg.
Lad det også stå, når I ikke har skåret en første strøm. Et erstatningsprojekt uden et v1-snit er et ønske om at være færdige med at skamme sig over stacken. Det er forståeligt. Det er ikke et projekt. Vent, indtil I kan sige: denne ordretype, denne rolle, denne integration — og alt andet venter.
Det, I ikke må, er at lade det stå uden at reducere risikoen. Ingen backups I har prøvet at genskabe, ingen dokumentation af de natjobs, ingen aftale om hvem der må ændre hvad. Det er ikke konservatisme. Det er at håbe, at ingenting går i stykker.
Hvis I senere skifter, har det arbejde stadig værdi. Tests og et datakort er det, en omskrivning ellers betaler dyrt for at genopdage. Modernisering starter ofte med at gøre det gamle forståeligt — ikke med at åbne et tomt repo.
Skift, wrap, eller reducer risikoen?
Venstre er det, I typisk mærker. Højre er det, vi typisk anbefaler som næste skridt.
Situation
I kan ikke pege på en navngiven forretningsblokering
Næste skridt
Reducer risiko: tests, runbook, ejer — ikke et erstatningsprojekt
Situation
Smerten sidder i UI eller én integration, kernen er sand
Næste skridt
Wrap den kant; flyt skrivninger først når det nye skal eje reglen
Situation
Platformen dør (licens, vendor, usikker runtime) på en dato
Næste skridt
Afgræns den del I må flytte inden datoen; resten venter
Situation
I kan ikke ansætte eller ændre en regel, I allerede har lovet
Næste skridt
Erstat den del — med cutover og dataparitet, ikke hele landskabet
Situation
Ingen ved, hvilken kilde der vinder, når data er uenige
Næste skridt
Tegn datakortet før I bygger. To sandheder er dyrere end ét grimt system
Tjekliste før I kalder det modernisering
Hvis I mangler flere af punkterne, er I ved at starte en omskrivning, I ikke kan styre.
- I kan pege på den ene forretningsblokering, v1 skal fjerne
- I ved, hvor sandheden bor, og hvem der vinder ved konflikt
- Strategien er navngivet: stå, wrap eller erstat — ikke "vi moderniserer"
- Cutover, rollback og paritet er skrevet ned, hvis I erstatter en del
- Det gamle har en ejer og en plan, mens I bygger det nye
- I har skilt "ingen tør røre det" (risiko) fra "det kan ikke det, vi har lovet" (blokering)
Spørgsmål vi får igen og igen
Er det ikke billigere bare at skrive det hele om i ét hug?
Det føles billigere på et slides, fordi I kun tegner ét system. I praksis betaler I for at genopdage regler, for parallel drift, og for den cutover I ikke havde tid til at øve. En afgrænset erstatning eller et wrap leverer værdi tidligere og holder det gamle i live, indtil I ved, hvad I ikke forstod. Big-bang er et væddemål om, at I kender det hele på forhånd. Det gør I sjældent.
Hvornår er no-code eller et hyldeprodukt nok som erstatning?
Når den blokerende strøm passer til værktøjet, og I kan acceptere dets model for data og roller. Det er rigtigt for en intern proces, I i dag kører i mail. Det er forkert, når kernen er jeres differentiering, eller når I skal spejle et ERP, I ikke må forenkle. Et hyldeprodukt, der tvinger jer til at lyve om prisen eller rollerne, bliver det næste system, I skammer jer over.
Hvad gør vi, når kun én person forstår det gamle system?
Det er en risiko, I skal reducere nu — uanset om I skifter. Karakteriseringstests, parring, en runbook, og at den person ikke er den eneste der må deploye. At starte en omskrivning for at "blive fri" uden at fange reglerne er, hvordan I mister både personen og systemet. Bind viden fast først. Skift bagefter, hvis blokeringen stadig er der.
Kan vi ikke bygge det nye ved siden af og skifte, når det er klart?
I kan bygge ved siden af. I skal stadig skære en første strøm, der går i produktion, og I skal vide, hvem der ejer skrivninger undervejs. "Når det er klart" er ikke en dato. Det er et signal om, at I ikke har et cutover-kriterium. Sæt kriteriet: denne ordretype kører i det nye, med paritet, i to uger — så slukker vi den i det gamle.
Hvor lang tid tager en modernisering typisk?
Det afhænger af, om I wrapper en kant eller erstatter en kerne. En afgrænset første strøm ligger ofte i samme størrelsesorden som andre produktforløb vi kører i iterationer på 1–2 uger med ugentlige demoer; et helt landskab gør I ikke i ét forløb, og I skal ikke love det. Den ærligere plan er: første strøm i produktion, så næste. Tiden I sparer, er den omskrivning I ikke startede.
Hvis I overvejer at skifte et legacy-system
Lad os finde den del, der faktisk blokerer.
En kort gennemgang af den forretningsbeslutning, I ikke kan tage i dag, og hvor sandheden bor, er ofte nok til at sige, om I skal wrappe, erstatte — eller gøre det gamle mindre skrøbeligt.
