Frå magasinetema til prosjektpraksis
Passande teneste- og tekniske sider til innlegget
Ei Legacy-avløysing mislykkast sjeldan på grunn av det å «bygge» den nye løysinga, men på overgangen: data må halde seg korrekte, grensesnitt må ikkje ryke, og drifta må halde fram under omlegginga. I mange verksemder er ein Big-Bang-Cutover difor ikkje eit alternativ – avhengigheitene er for store, avbrotskostnadane for høge, og tilbakerulling for vanskeleg.
I praksis lukkast ein stegvis framgangsmåte med Strangler Pattern (funksjonelle delar blir etter kvart „flytte over“), Parallelbetrieb (gammalt og nytt system køyrer periodisk side om side) og klare reglar for Datenkonsistenz. Denne artikkelen viser korleis du kan kombinere desse byggjeemnene slik at dei er til å stole på i kvardagen til IT-leiing, administrasjon og prosjektansvar – inkludert typiske feilmønster, driftspåverknad og avgjerder under utrulling.
Kvifor steg-for-steg-tilnærminga ofte er den realistiske Legacy-avløysinga
Legacy-system er sjeldan «berre ei applikasjon». Oftast heng det på: batchkøyringar, filgrensesnitt (SFTP-mapper, nettverksstasjonar), trykk- og skanningsprosessar, lokale verktøy, BI-ekstraktar, e-post-relays, spesialmaskinvare, utsendingar til Shadow-IT og manuelle omgåingar. Ved eit Big-Bang må alle desse vegane fungere same helga – og det inklusive rettigheiter, stamdata, historikk og særtilfelle.
Steg-for-steg-tilnærminga reduserer risiko, men flytter han ikkje automatisk «nedover». Ho gjer risiko synleg og handterbar, men krev til gjengjeld rimeleg rein arkitektur- og driftssyn: Kor blir det routa? Kven er dataansvarleg? Kva konsistens er fagleg påkravd, og kvar er tidsmessig forseinking akseptabel? Og korleis unngår du at parallellkøyring blir ei varig byggeplass?
Strangler Pattern i verksemdsrealiteten: ikkje «Microservices», men klare snitt
Det Strangler Pattern tyder: du byggjer nye funksjonar ved sida av altsystemet og leier trafikken over ein stadvis, til den gamle delen er overflødig. Viktig: dette er ikkje ein arkitektur-religiøs krossgang («monolitt vs. mikrotjenester»), men eit migrasjonsmønster. Det fungerer òg om målarkitekturen framleis er ein monolitt – berre modernare, meir vedlikehaldsvenleg og betre å integrere.
Den viktigaste avgjerda: Del etter prosessar, ikkje etter tabellar
I mange avløysingar blir det kutta etter datadrevne kriterium („Vi tek først tabellane for kunde og ordre“). Det fører ofte til smertefull parallellkøyring, fordi prosessar går på tvers av desse dataa. Bedre er eit prosessorientert snitt, t.d. «tilbudsoppretting», «varemottak», «reklamasjonshandtering» eller «frå service‑ticket til faktura».
Praksisregel: Ein Strangler-etappe bør dekkje ein fagleg lukka prosess som kan driftast og overvåkast ende-til-ende i det nye systemet. Dette inkluderer inngangar (UI, API, import), behandling (forretningsreglar) og utgangar (utskrift, eksport, bokføring, varsling).
Strangler treng ein „omdirigerar“: Gateway, Proxy oder Routing-Schicht
For at brukarar og tilknytte system ikkje skal måtte lære nye endepunkt kvar gong, blir det ofte brukt eit routing-lag. Avhengig av utgangspunkt kan det vere: ein reverse proxy framfor nettapplikasjonar, eit API-Gateway for teneste-endepunkt eller eit integrasjonslag som samlar filgrensesnitt og hendingar. Avgjerande er driftsevna: sentral konfigurasjon, tydelege loggar, overvaking og ein kontrollert rollback.
For administratorar er det viktig at dette laget ikkje blir ei blackbox. Dei treng ettersporelege routingar (kva Request gjekk kvar), korrelasjon gjennom loggar (t.d. Request-ID) og definerte timeouts/retry-reglar, slik at feil ikkje blir „verklebt“.
Parallell drift er ein driftsmodus – ikkje „prosjekttrick“
Parallell drift betyr: gamle og nye komponentar arbeider ei tid samtidig i produksjon. Det er normalt, men kostbart – særleg i drift. De får fleire bevegelege delar, meir overvaking, større incident-potensial og meir komplekse ansvarsforhold. Difor må parallell drift planleggjast som ein tidsavgrensa driftsmodus, inkludert avbrotskriterier.
Typiske parallell-driftmodellar (og når dei passar)
- Overgang etter brukargrupper (Pilotgruppe → Wellen): eigna når brukarrollene er tydeleg avgrensa og prosessar ikkje går på tvers av gruppene.
- Overgang etter tenantar/stader: godt ved filial-/verkstruktur, når dataflyt mellom stader er avgrensa.
- Overgang etter prosesssteg: t.d. „Erfassung neu, Abrechnung noch alt“ – risikabelt når det finst mange tilbakespel, men av og til naudsynt.
- Overgang etter objekttype: t.d. nye anleggsgjenstandar i det nye systemet, Altbestände i det gamle – kan fungere dersom det finst klare reglar for historie/rapportering.
Sett frå driftssida bør de utforme parallell drift slik at feildomene held seg små: Ein feil i den nye komponenten må ikkje dra med seg das Legacy-System (t.d. gjennom blokkerande grensesnitt eller databaselocks), og omvendt må ikkje Legacy sabotere alle nye prosessar gjennom ustabile eksportar.
Feature Flags und Routing-Regeln: Kontrolle statt „wir rollen aus und hoffen“
Feature Flags er brytarar som let dykk aktivere/deaktivere funksjonar målretta – utan nytt Deployment. For IT-leiing og prosjektansvarlege er det ikkje dei tekniske detaljane som er avgjerande, men Governance: Kven får skru? Korleis blir det dokumentert kvifor omstillinga skjedde? Kor raskt kan de gå tilbake? Kva avhengigheiter oppstår (t.d. når data allereie er produsert i nytt format)?
Eit fornuftig grep er eit lite endringsprotokoll (Decision Log) per brytaraksjon: tidspunkt, Owner, påverka brukargruppe, venta effekt, overvakingindikatorar, rollback-betinging. Det hindrar det klassiske „Niemand weiß mehr, warum es so geroutet ist“.
Datakonsistens ved Rollout: Kjernen, som mange Ablösungen heng på
Datakonsistens betyr at data er fagleg korrekte, fullstendige og tilgjengelege i forventa rekkjefølgje. I parallelldrift blir dette vanskeleg, fordi to system skriv samtidig eller åtminstone begge krev å vere «sanninga». Her blir det avgjort om legacy-avløysinga verkar stabil eller om de må køyre delta-avstemmingar i månadsvis.
Først avklar: Kven er «System of Record» for kvart dataområde?
De treng ein avgjerd for kvart dataområde (t.d. debitorar, artiklar, prisar, ordre, lagerbevegelser, bilag) om kva system som er førande. Dette er ikkje berre eit arkitekturspørsmål, men operativt:
- Kor blir korrigeringar gjort i supportsaker?
- Kor ligg godkjenningsprosessen (toaugs-kontroll, SoD/oppdeling av funksjonar)?
- Kva revisjonsspor er naudsynte (kven har når endra kva)?
- Korleis unngå etterarbeid ved månadsslutt?
I tidlege Strangler-fasar er det ofte fornuftig å la legacy først vere dataførande og la den nye komponenten «berre» konsumere. Seinare snur de leiarskapet. Dette leiarskapsbytet er ein eigen milepæl og krev eit klart cutover-vindu samt kommunikasjons- og akseptansjeplan.
Synkroniseringsmønster: Dual Write, CDC og Events – med realistiske forventningar
Det finst fleire vegar å synkronisere data mellom gammalt og nytt. Ingen er „gratis“.
- Dual Write: Ein handling skriv til begge system (t.d. opprette ordre → Legacy og nytt system). Fordel: rask tilgjengelegheit. Ulempe: feilsituasjon er kompleks (kva om system A skriv, system B ikkje?), dessutan oppstår avhengigheiter og ofte ytelsesrisikoar.
- Change Data Capture (CDC): Endringar blir ekstrahert frå databasen sin logg eller via trigger/replikasjon som deltas. Fordel: løftar applikasjonen vekk frå synkronisering. Ulempe: de replikerer også „tekniske“ endringar og må rekonstruere faglege hendingar; i tillegg kan skjemaendringar i Legacy plutseleg bli ein integrasjonsrisiko.
- Event-basert integrasjon: Systemet publiserer faglege hendingar (t.d. «ordre frigitt»), som andre system konsumerer. Fordel: klar fagleg semantikk. Ulempe: krev rene hending-definisjonar, idempotens (flergong-behandling utan skade) og eit robust driftskonsept for messaging.
For beslutningstakarar er dette avgjerande: datakonsistens er ikkje binær. Nokre prosessar krev sterk konsistens (umiddelbart korrekt, t.d. betalingsgodkjenningar), andre tolererer eventual consistency (korte forseinkingar, t.d. søkeindeks, rapportering, notifikasjonar). Denne inndelinga bør avklarast tidleg med fagavdelinga og revisjon/audit.
Konfliktar og duplikatar: Planlegg den «stygge vegen» eksplisitt
I parallell drift oppstår konfliktar typisk slik: To system endrar det same objektet, men etter ulike reglar. Eller ein import køyrer dobbelt fordi eit retry kom «for tidleg». Eller ein brukar rettar data i Legacy, medan det nye grensesnittet allereie var teke i bruk.
De treng bindande reglar for dette:
- Konfliktløysing: «Last write wins» er sjeldan fagleg korrekt. Bedre er prioriteringar (leidande system vinn) eller faglege merge-reglar (t.d. kontaktstamdata vs. betingingar).
- Idempotens: Kvar integrasjon bør tåle gjentatt handsaming utan duplikat (t.d. same dokumentnummer, same eksterne referanse).
- Dead-Letter/Quarantäne: Uprosesserbare delta må kunne finnast, med klar ansvarfordeling og moglegheit for gjenkøyring.
Utan desse reglane sklir datakonsistensen ned i «Excel-avstemming» og manuell etterarbeid – med tilsvarande frustrasjon og vanskeleg målbare følgekostnader.
Rollout‑design: bølgjer, godkjenningar og tilbakefall, utan å overbelaste drifta
Ein god rollout er meir enn «deployment + opplæring». I parallell drift må De integrere utrulling og drift: Kven gjer førstelinje ved feil? Kva loggar er umiddelbart tilgjengelege? Korleis vert det eskalert? Kva prosessar må ikkje endrast i ei bølgje (t.d. månadsavslutting, inventar, prisendring)?
Bølgeplanlegging med klare inngangskriterium
Det har vist seg nyttig med bølgeplanlegging basert på klare inngangskriterium, ikkje berre datoar. Døme på harde kriterium:
- Overvakingsdashbord og alarmering for den nye komponenten er live og testa (inkl. redusert «alarm-støy»).
- Runbooks for typiske incident-typar finst (timeouts, køstans, feilede importar, autorisasjonsfeil).
- Delta-avstemming er automatisert og leverer forståelege rapportar (differansar etter objekttype, tidsvindauge, årsaksklasse).
- Rollback-mekanisme er øvd (minst i Staging/Pre-Prod realistisk gjennomspelt).
Særleg det siste punktet vert ofte undervurdert: Rollback er ikkje «vi skruer tilbake». Dersom det nye systemet allereie har produsert data, må De vite korleis desse dataa vert synlege i Legacy eller korleis De korrekt migrerer/neutraliserer dei genererte dataa.
Cutover‑mini‑cutovers i staden for Big Bang
Også ved Strangler Pattern finst det cutovers – men mindre. Typisk er mini-cutovers ved byte av eit prosess-steg eller ved omlegging av dataleiarskap. Kvar mini-cutover treng:
- Datafreeze (kort, men bindande): Kven har lov til å endre kva i denne perioden?
- Avstemming: Kva har endra seg sidan siste sync?
- Omskifting: routing/feature flags, jobbar, tidsplanar, rettigheitar.
- Verifikasjon: Faglege smoke-testar (t.d. opprette ordre → følgeseddel → faktura), pluss tekniske kontroller (køar, feilsatsar, DB‑belastning).
For IT‑leiing er det viktig at desse stega er dokumenterte som ein gjentakande prosess og sikra personellmessig. Elles heng prosjektsuksessen på enkeltpersonar som «veit korleis det skal gjerast».
Stabiliser grensesnitta først: Det undervurderte fundamentet for Legacy‑avløysing
Mange Legacy-system kommuniserer via vaksne grensesnitt: CSV-eksportar i mappar, nattlege jobbar, direkte database-tilgang frå tredjepartsverktøy, e-post-baserte arbeidsflytar. Ei gradvis avløysing vert klart lettare om De fyrst inventariserer grensesnittlandskapet og konsoliderer det på nokre få punkt.
I praksis betyr det: Identifiser systemkritiske integrasjonspunkt (t.d. finansbokføring, utsending, produksjonsmeldingar, identitetar/tilgangar) og bygg opp klare kontraktar der. «Kontrakt» meiner her ikkje juridisk, men teknisk stabilitet: versjonering, entydige felt, stabile ID-ar, dokumentert feilhandsaming, definerte SLA-ar for dataleveranse.
Om de etablerer eit internt API-/integrasjons-governance‑modell (Owner, Deprecation-reglar, test-/staging-løp), minkar risikoen for at ei Legacy-endring plutseleg lamlegg den nye komponenten dykkar. Ein passande tematisk inngang for intern lenking kan til dømes vere eit innlegg om API‑governance og Deprecation‑strategiar.
Sikkerheit, rettigheiter og revisjon: Paralleldrift skjerper temaet
I paralleldrift finst ofte doble brukar‑ og rollemodellar. Det fører til skuggerettar: Ein brukar er i det nye systemet korrekt avgrensa, men har framleis omfattande rettar i Legacy – og endar opp med å nytte den «enklare vegen». I tillegg kjem tekniske kontoar (Service Accounts) for synkronisering, import, køar og batchjobbar.
Konkret punkt de bør avklare tidleg:
- Identity-Quelle: Kvar kjem brukarar og grupper frå? AD/Entra ID? Eit eige IAM? Viktig er at provisjoneringa er sporbar.
- Rollenmapping: Når roller ikkje passar 1:1, trengs overgangsroller som er tidsavgrensa og må resertifiserast.
- Service Accounts: Minste nødvendige rettar, rotasjon av secrets, ryddig protokollføring. Særleg synkroniseringskontoar er elles ein innfallsport og vanskelege å revidere.
- Audit-Trails: Når dataleiarskap skiftar, må det vere klart kvar beviset for endringar ligg og korleis det kan etterprøvast på tvers av begge systema.
Viktig for avgjerarane: Sikkerheit er her ikkje «ekstra omfang», men påverkar gjennomføringsmoglegheitene for utrullinga. Å justere rettar seinare i paralleldrift er som regel dyrare enn ein tidleg, pragmatisk avgrensing av roller og servicekontoar.
Monitoring, Logging und Betriebsübergabe: Ohne Observability wird Parallelbetrieb blind
I paralleldrift er feilhendingar ofte indirekte: Eit delta heng, ein retry køyrer i det uendelege, ei kø byggjer seg opp, eller ein tidskritisk jobb kolliderer med ein databasenlås. Dersom de berre ser dette gjennom brukar‑ticket, kjem de for seint. Difor treng de frå starten eit observability‑minimum: Monitoring (tilstand), Logging (hendelsar) og – der det er meiningsfullt – Tracing (kjede over system).
Praktiske, godt driftbare signal er til dømes:
- Synchronisasjons‑backlog (kor mange endringar «ventar»), pluss alderen på den eldste oppføringa.
- Feilrate per grensesnitt og feilklasse (validering, timeout, auth, datakonflikt).
- Latens per prosesssteg (t.d. ordre frigitt til forsendelsesordre oppretta).
- Datakvalitetsindikatorar (duplikatrate, manglande obligatoriske felt, uventa null-verdier).
For driftsmottak tel mindre kva verktøy som blir brukt, men om ansvar og runbooks er klare. Om de har on-call eller beredskap, må drifta vere handlingsfør ved typiske feilsituasjonar utan at utviklarar må drive detektivarbeid.
Når Strangler Pattern ikkje passar (eller berre med klare avgrensingar)
Det finst situasjonar der trinnvis avløyving berre fungerer i avgrensa grad:
- Ekstremt tett transaksjonskopling: Når nesten kvar prosess går på tvers av alle modulane og krev sterk konsistens, blir parallelldrift raskt vanskeleg å handtere.
- Direkte DB-tilgang frå tredjepartssystem: Når fleire verktøy skriv/les direkte på legacy-tabellar, må denne villvoksteren fyrst avgrensast eller kontrollerast.
- Uklare dataeigarskap: Om ein ikkje kan fastsetje kven som fører data, er konfliktar garantert – og avløysinga blir politisk i staden for teknisk.
- Manglande driftsdisiplin: Utan ryddige miljø, reproduserbare utrullingar og overvaking blir kvart mellomsteg ein risiko.
Det betyr ikkje at de er åtvungne eit Big Bang. Men då må de endre rekkjefølgja: fyrst stabilisere integrasjonspunkta, sentralisere dataåtkomstar, avklare roller og ownership – og først då starte med Strangler Pattern.
Ein praksisretta framdriftsplan for stegvis avløysing av legacy-system
Som rettesnor for prosjektansvarlege har ein framgang i klare etappar vist seg nyttig. Den eksakte utforminga avheng av system og bransje, men logikken er robust:
- Inventar & Abhängigkeiten: grensesnitt, jobbar, dataflyt, brukargrupper, kritiske tidsvindauge (avslutning, inventur).
- Schnittkanten definieren: prosesmodular, dataeigarskap per område, integrasjonsavtaler.
- Routing & Schalter bauen: gateway/proxy, feature flags, sentral protokollføring.
- Datenpfad festlegen: CDC/event/dual write, konfliktreglar, karantene, avstemmingsrapporter.
- Pilot mit echter Last: ikkje berre demo, men med reelle tilfelle, inkludert unntak.
- Wellenrollout: inntakskriterium, cutover-sjekklister, rollback-øvingar.
- Abschalten & Aufräumen: deaktiver gamle vegar, fjern jobbar, trekk tilbake rettar, oppdater dokumentasjon.
Det siste punktet er essensielt: Mange organisasjonar lar legacy-komponentar «for sikkerheits skuld» halde fram. Resultat: doble kostnadar, uklart risiko, ingen tør å slå av. Planlegg dekommisjonering som eit delprosjekt med dato, ansvarlege og bevis (t.d. «ingen tilgangar dei siste X vekene», «alle eksportar omstilt», «revisjonskrav oppfylt»).
Konklusjon: Gradvis avløysing betyr å behandle konsistens og drift som eit produkt
Ei stegvis avløysing av legacy er ikkje automatisk enklare – men for mange bedrifter er det den einaste realistiske moglegheita. Strangler Pattern fungerer dersom de per etappe definerer klare prosessgrenseflater, planlegg parallelldrift som ein reell driftstilstand og ikkje overlèt datakonsistens til tilfeldigheiter. Avgjerande er tidlege avklaringar om dataeigarskap, robuste synkroniseringsmønster med konfliktreglar, samt eit rollout-design med bølger, godkjenningar og øvd tilbakefall.
Dersom du planlegg ein avløysing og ønskjer å drøfte grenseflatene, parallell drift eller konseptet for datakonsistens på ein strukturert måte, når du oss via .
neste steg
Når temaet blir eit reelt prosjekt, bør arkitektur, eksisterande system og drift tidleg saman vurderast.
Vi støttar ikkje berre ved enkeltspørsmål, men òg når korte kildekodesnuttar, legacy-tema eller portalidéar skal utviklast til eit robust bedriftsprosjekt.
- Eksisterande tilstand, målbiletet og tekniske risikoar blir vurderast samla.
- REST, datatilgang, portalar og utrulling blir ikkje utsett til seinare fasar.
- De ser tidleg kva veg som er økonomisk og driftsmessig berekraftig.