Fra magasinetema til prosjektpraksis
Egnede tjeneste- og tekniske sider for innlegget
En Legacy-Ablösung mislykkes sjelden på selve «byggingen» av den nye løsningen, men på overgangen: data må forbli korrekte, grensesnitt må ikke ryke, og driften må fortsette under omstillingen. I mange virksomheter er en Big-Bang-Cutover derfor ikke et alternativ – avhengighetene er for store, nedetidskostnadene for høye, og tilbakeføringen for vanskelig.
I praksis fungerer en trinnvis tilnærming med Strangler Pattern (funksjonelle deler flyttes over etter hvert), Parallelbetrieb (gammelt og nytt system kjører midlertidig side om side) og klare regler for Datenkonsistenz. Denne artikkelen viser hvordan du kan kombinere disse byggeklossene slik at de er bærekraftige i hverdagen for IT-ledelse, administrasjon og prosjektansvar – inklusive typiske feilbilder, driftskonsekvenser og beslutningspunkter i utrullingen.
Hvorfor trinnvis tilnærming ofte er den realistiske måten å bytte ut legacy-systemer på
Legacy-systemer er sjelden «bare en applikasjon». Som regel henger det på: batchkjøringer, filgrensesnitt (SFTP-mapper, nettverksstasjoner), utskrift- og skanneprosesser, lokale verktøy, BI-ekstrakter, e-post-relayer, spesialmaskinvare, Shadow-IT-utløp og manuelle workarounds. Ved et Big Bang må alle disse kanalene fungere samme helg – inkludert rettigheter, stamdata, historikk og spesialtilfeller.
Trinnvis tilnærming reduserer risikoen, men skyver den ikke automatisk «nedover». Den gjør risikoene mer synlige og håndterbare, men krever til gjengjeld rene arkitektur- og driftsbeslutninger: Hvor skal routing skje? Hvem er dataeier? Hvilken konsistens er faglig påkrevd, og hvor holder tidsmessig forsinkelse? Og hvordan unngår du at parallelldrift blir en permanent byggeplass?
Strangler Pattern in der Unternehmensrealität: nicht „Microservices“, sondern klare Schnittkanten
Med Strangler Pattern bygger du nye funksjoner ved siden av altsystemet og rutear trafikken gradvis dit, til den gamle delen er overflødig. Viktig: dette er ikke en arkitekturideologisk kamp («Monolith vs. Microservices»), men et Migrationsmuster. Det fungerer også hvis målarkitekturen fortsatt er en monolitt – bare mer moderne, mer vedlikeholdbar og enklere å integrere.
Den viktigste beslutningen: Del opp etter prosesser, ikke etter tabeller
I mange utskiftninger deles arbeidet for datadrevet («Vi tar først tabellene for kunder og ordre»). Det fører ofte til smertefull parallelldrift fordi prosesser går på tvers av disse dataene. Bedre er et prosessorientert snitt, f.eks. «tilbudsopprettelse», «vareinnkommst/mottak av varer», «håndtering av reklamasjoner» eller «service-ticket til faktura».
Praksisregel: En Strangler-etappe bør dekke en faglig avgrenset arbeidsflyt som kan driftes og overvåkes ende-til-ende i det nye systemet. Dette omfatter innganger (UI, API, Import), behandling (forretningsregler) og utganger (utskrift, eksport, bokføring, varsling).
Strangler braucht einen „Umlenker“: Gateway, Proxy oder Routing-Schicht
For at brukere og tilkoblede systemer ikke skal måtte lære nye endepunkter hver gang, brukes ofte et rutingslag. Avhengig av utgangssituasjonen kan dette være: en reverse proxy foran webapplikasjoner, et API-gateway for service-endepunkter eller et integrasjonslag som samler filgrensesnitt og events. Avgjørende er driftsegnethet: sentral konfigurasjon, tydelige logs, monitoring og en kontrollert rollback.
For administratorer er det viktig at dette laget ikke blir en blackbox. De trenger etterprøvbare routingregler (hvilken Request gikk hvor), korrelasjon via logs (f.eks. Request-ID) og definerte timeouts/retry-regler, slik at feil ikke «verklebt» blir.
Parallelbetrieb ist ein Betriebszustand – kein „Projekttrick“
Parallellkjøring betyr: gamle og nye komponenter kjører samtidig i produksjon i en periode. Det er normalt, men dyrt – spesielt i drift. Dere får flere moving parts, mer monitoring, større incident-potensial og mer komplekse ansvarsforhold. Derfor må parallellkjøring planlegges som en tidsbegrenset driftsmodus, inkludert avbruddskriterier.
Typische Parallelbetriebs-Modelle (und wann sie passen)
- Bytte etter brukergrupper (Pilotgruppe → Wellen): egnet når brukerroller er klart atskillelige og prosesser ikke går på tvers av grupper.
- Bytte etter Mandanten/Standorten: godt ved filial-/verksstrukturer når dataflyt mellom lokasjoner er begrenset.
- Bytte etter prosesssteg: f.eks. «Erfassung neu, Abrechnung noch alt» – risikabelt når det finnes mange tilbakekoblinger, men noen ganger uunngåelig.
- Bytte etter objekttyper: f.eks. nye anleggsmidler i det nye systemet, historisk beholdning i det gamle – kan fungere hvis det finnes klare regler for historikk/rapportering.
Fra driftssynspunkt bør dere utforme parallellkjøringen slik at feildomener holdes små: en feil i den nye komponenten må ikke dra med seg legacy-systemet (f.eks. gjennom blokkerende grensesnitt eller databaselåser), og omvendt må ikke legacy sabotere alle nye arbeidsflyter via ustabile eksporter.
Feature Flags und Routing-Regeln: Kontrolle statt „wir rollen aus und hoffen“
Feature Flags er brytere som lar dere aktivere/deaktivere funksjoner målrettet – uten nytt deployment. For IT-leder og prosjektansvarlige er ikke det tekniske detaljnivået avgjørende, men Governance: Hvem har lov til å slå av/på? Hvordan dokumenteres hvorfor endringen ble gjort? Hvor raskt kan dere gå tilbake? Hvilke avhengigheter oppstår (f.eks. når data allerede er generert i det nye formatet)?
En fornuftig praksis er en liten endringsprotokoll (Decision Log) per bryterhandling: tidspunkt, Owner, berørt brukergruppe, forventet effekt, monitoring-kennzeichen, rollback-betingelse. Dette forhindrer det klassiske «Niemand weiß mehr, warum es so geroutet ist».
Datakonsistens ved utrulling: Kjernen som mange utskiftninger avhenger av
Datakonsistens betyr at data er faglig korrekte, fullstendige og tilgjengelige i forventet rekkefølge. I parallelldrift blir dette utfordrende, fordi to systemer skriver samtidig eller i det minste begge hevder å være «sannheten». Her avgjøres det om utskiftingen av legacy-systemet virker stabil, eller om dere må kjøre deltaavstemminger i månedsvis.
Avklar først: Hvem er „System of Record“ for hvert dataområde?
Det må fastsettes for hvert dataområde (f.eks. debitorer, artikler, priser, ordre, lagerbevegelser, bilag) hvilket system som er førende. Dette er ikke bare et arkitekturtema, men operativt:
- Hvor blir korrigeringer utført ved supporttilfeller?
- Hvor ligger godkjenningsprosessen (fire-øyne, SoD/separasjon av funksjoner)?
- Hvilke revisjonsspor er påkrevd (hvem endret hva og når)?
- Hvordan unngås etterarbeid ved månedsavslutningen?
I tidlige Strangler-faser er det ofte fornuftig å la Legacy-systemet først være førende for data, og la den nye komponenten «kun» konsumere. Senere snur dere føringen. Denne føringsendringen er en egen milepæl og krever et klart cutover-vindu samt kommunikasjons- og akseptanseplan.
Synkroniseringsmønstre: Dual Write, CDC og Events – med realistiske forventninger
Det finnes flere måter å synkronisere data mellom gammelt og nytt. Ingen er „gratis“.
- Dual Write: En handling skriver til begge systemer (f.eks. opprette ordre → Legacy og nytt system). Fordel: rask tilgjengelighet. Ulempe: feiltilfeller er komplekse (hva om system A skriver, men system B ikke?), i tillegg oppstår avhengigheter og ofte ytelsesrisiko.
- Change Data Capture (CDC): Endringer hentes fra databaseloggen eller via triggere/replikasjon som deltaer. Fordel: løsner koblingen mellom applikasjon og synkronisering. Ulempe: dere replikerer også «tekniske» endringer og må rekonstruere faglige hendelser; dessuten blir skjemaendringer i Legacy plutselig et integrasjonsrisiko.
- Event-basert integrasjon: Systemet publiserer faglige hendelser (f.eks. «ordre frigitt») som andre systemer konsumerer. Fordel: klar faglig semantikk. Ulempe: krever rene hendelsesdefinisjoner, idempotens (gjenbehandling uten skade) og et robust driftskonsept for meldingshåndtering.
For beslutningstakere er det avgjørende: datakonsistens er ikke binær. Noen prosesser trenger sterk konsistens (øyeblikkelig korrekt, f.eks. betalingsgodkjenninger), andre tolererer eventual consistency (kort forsinkelse, f.eks. søkeindeks, rapportering, varsler). Denne klassifiseringen bør avklares tidlig med fagavdeling og revisjon/audit.
Konflikter und Dubletten: Planlegg den „hässlichen Pfad“ eksplisitt
I parallell drift oppstår konflikter typisk slik: To systemer endrer samme objekt, men etter ulike regler. Eller en import kjører dobbelt fordi et retry kom „for tidlig“. Eller en bruker korrigerer data i Legacy, mens det nye grensesnittet allerede var tatt i bruk.
Dere trenger bindende regler for dette:
- Konfliktauflösung: „Last write wins“ er sjelden faglig korrekt. Bedre er prioriteringer (ledende system vinner) eller faglige merge-regler (f.eks. kontaktstamdata vs. kondisjoner).
- Idempotenz: Hver integrasjon bør tåle gjenbehandling uten duplikater (f.eks. samme dokumentnummer, samme eksterne referanse).
- Dead-Letter/Quarantäne: Ubehandlelige deltas må kunne finnes, med klart ansvar og mulighet for ny kjøring.
Uten disse reglene sklir datakonsistensen over i „Excel-Abgleich“ og manuelt etterarbeid – med tilsvarende frustrasjon og vanskelig målbare følgekostnader.
Rollout-Design: Wellen, Abnahmen und Rückfall, ohne den Betrieb zu überlasten
Et godt rollout er mer enn „Deployment + Schulung“. I parallell drift må dere sammenflette rollout og drift: Hvem gjør First-Level ved feil? Hvilke Logs er umiddelbart tilgjengelige? Hvordan eskaleres det? Hvilke prosesser må ikke endres i en bølge (f.eks. månedsavslutning, inventur, prisendring)?
Wellenplanung mit harten Kriterien
En bølgeplan med klare inngangskriterier har vist seg å fungere, ikke bare datoer. Eksempler på harde kriterier:
- Monitoring-Dashboards og Alerting for den nye komponenten er live og testet (inklusive redusert „Alarm-Rauschen“).
- Runbooks for typiske Incidents finnes (Timeouts, Queue-Stau, fehlerhafte Imports, Berechtigungsfehler).
- Delta-Abgleich er automatisiert og leverer forståelige Reports (Differenzen nach Objekttyp, Zeitfenster, Ursacheklasse).
- Rollback-Mechanismus er øvd (mindestens in Staging/Pre-Prod realistisch durchgespielt).
Særlig det siste punktet undervurderes: Rollback er ikke „wir schalten wieder zurück“. Hvis det nye systemet allerede har generert data, må dere vite hvordan disse dataene blir synlige i Legacy eller hvordan dere korrekt migrerer/neutraliserer de genererte dataene.
Cutover-Mini-Cutovers statt Big Bang
Også ved Strangler Pattern finnes det Cutovers – bare mindre. Typisk er Mini-Cutovers ved bytte av et prosesssteg eller ved endring av dataeierskap. Hver Mini-Cutover trenger:
- Datenfreeze (kort, men bindende): Hvem får endre hva i denne perioden?
- Abgleich: Hva har blitt endret siden siste Sync?
- Umschalten: Routing/Feature Flags, Jobs, Zeitpläne, Berechtigungen.
- Verifikation: Faglige Smoke-Tests (f.eks. opprette ordre → følgeseddel → faktura), pluss tekniske Checks (Queues, Fehlerraten, DB-Last).
For IT-Leitung er det viktig at disse trinnene er dokumentert som en repeterbar prosess og sikret personellmessig. Ellers hviler prosjektets suksess på enkeltpersoner som „wissen, wie es geht“.
Schnittstellen zuerst stabilisieren: Das unterschätzte Fundament der Legacy-Ablösung
Mange Legacy-Systeme kommuniserer via etablerte Schnittstellen: CSV-Exporte in Ordner, nächtliche Jobs, direkte Datenbankzugriffe durch Dritttools, E-Mail-basierte Workflows. En trinnvis Ablösung blir betydelig enklere hvis dere først inventarisieren Schnittstellenlandschaft og konsoliderer an wenigen Stellen.
I praksis innebærer dette: Identifiser systemkritiske integrasjonspunkter (f.eks. finansregnskap, forsendelse, produksjonsreturmeldinger, identiteter/tillatelser) og etabler klare kontrakter der. «Kontrakt» mener vi her ikke juridisk, men teknisk stabilitet: versjonering, entydige felt, stabile ID-er, dokumentert feilhåndtering, definerte SLAs for dataleveranse.
Hvis dere etablerer et internt API-/integrasjons-governance-modell (Owner, Deprecation-regler, test-/staging-stier), reduseres risikoen for at en Legacy-endring plutselig lammer den nye komponenten deres. Et passende tematisk anknutningspunkt for intern lenking ville for eksempel være et innlegg om API-governance og deprekasjonsstrategier.
Sikkerhet, tillatelser og audit: Parallelldrift skjerper problemstillingen
I parallelldrift finnes det ofte doble bruker- og rollemodeller. Dette fører til skyggerettigheter: En bruker er korrekt begrenset i det nye systemet, men har fremdeles vidtrekkende rettigheter i Legacy – og ender opp med å bruke «den enklere veien». I tillegg kommer tekniske kontoer (Service Accounts) for synkronisering, import, køer og batchjobber.
Konkret bør dere avklare tidlig:
- Identity-Quelle: Hvor kommer brukere og grupper fra? AD/Entra ID? Eget IAM? Viktig at provisioneringen er etterprøvbar.
- Rollenmapping: Hvis roller ikke passer 1:1, trengs overgangsroller som er tidsbegrensede og re-sertifiseres.
- Service Accounts: Minste rettigheter, secrets-rotasjon, ryddig loggføring. Spesielt synkroniseringskontoer er ellers en inngangsvei og vanskelig å auditere.
- Audit-Trails: Når datans eierskap skifter, må det være klart hvor beviset for endringer ligger og hvordan det kan etterspores på tvers av begge systemer.
Viktig for beslutningstakere: Sikkerhet er her ikke «ekstra scope», men påvirker gjennomførbarheten av utrullingen. Å senere oppdatere rettigheter i parallelldrift er som regel dyrere enn et tidlig og pragmatisk snitt for roller og servicekontoer.
Monitoring, logging og driftsoverlevering: Uten observability blir parallelldrift blind
I parallelldrift er feilbilder ofte indirekte: Et delta henger, en retry kjører i det uendelige, en kø hoper seg opp, eller en tidskritisk jobb kolliderer med en databaselås. Hvis dere kun oppdager dette gjennom brukerstøttehenvendelser, er dere for sent. Dere trenger derfor fra starten et observability-minimum: Monitoring (tilstand), Logging (hendelser) og – der det er hensiktsmessig – Tracing (kjedesporing på tvers av systemer).
Praktiske, godt driftbare signaler er for eksempel:
- Synkroniserings-backlog (hvor mange endringer „venter“), pluss alder på den eldste posten.
- Feilrater per grensesnitt og feilkategori (validering, timeout, auth, datakonflikt).
For driftsoverlevering er det mindre avgjørende hvilket verktøy som brukes, og mer om ansvar og runbooks er tydelige. Har dere on-call eller vaktordning, må driften være i stand til å håndtere typiske hendelser uten at utviklere må drive detektivarbeid.
Når Strangler Pattern ikke passer (eller bare med klare begrensninger)
Det finnes situasjoner hvor trinnvis utskifting kun fungerer i begrenset grad:
- Ekstrem tett transaksjonskobling: Hvis nær sagt alle operasjoner går på tvers av alle moduler og krever streng konsistens, blir parallellkjøring raskt uhåndterlig.
- Direkte DB-tilganger fra tredjepartssystemer: Hvis flere verktøy skriver/leser direkte mot legacy-tabeller, må denne villvoksingen først stanses eller kontrolleres.
- Uklart dataeierskap: Hvis det ikke kan fastsettes hvem som eier dataene, er konflikter garantert – og utskiftingen blir politisk snarere enn teknisk.
- Manglende driftsdisiplin: Uten rene miljøer, reproduserbare utrullinger og overvåkning blir hvert mellomsteg en risiko.
Det betyr ikke at dere er tvunget til en Big Bang. Men dere må endre rekkefølgen: Først stabilisere integrasjonspunkter, sentralisere dataaksesser, avklare roller og eierskap – og først deretter anvende Strangler Pattern.
En praktisk gjennomførbar fremdriftsplan for trinnvis utskifting av legacy-systemer
Som veiledning for prosjektansvarlige har en fremgang i klare etapper vist seg å fungere. Den nøyaktige utformingen avhenger av system og bransje, men logikken er robust:
- Inventar & avhengigheter: grensesnitt, jobber, dataflyter, brukergrupper, kritiske tidsvinduer (avslutning, inventar).
- Definere snittflater: prosessmoduler, dataeierskap per område, integrasjonsavtaler.
- Bygge routing og brytere: Gateway/Proxy, Feature Flags, sentral loggføring.
- Fastlegge datavei: CDC/Event/Dual Write, konfliktregler, karantene, avstemmingsrapporter.
- Pilot med reell belastning: ikke bare demo, men med reelle saker, inkludert unntak.
- Fasevis utrulling: inntredenskriterier, Cutover-Checklisten, rollback-øvelser.
- Avvikling og rydding: deaktivere gamle baner, fjerne jobber, tilbakekalle rettigheter, oppdatere dokumentasjon.
Siste punkt er essensielt: Mange organisasjoner lar legacy-komponenter „for sikkerhets skyld“ gå videre. Resultat: doble kostnader, uklart risiko, ingen våger å slå av. Planlegg dekommisjonering som et delprosjekt med dato, ansvarlige og bevis (z. B. „ingen tilgang siden X uker“, „alle eksporter omstilt“, „revisjonskrav oppfylt“).
Konklusjon: Trinnvis utskifting betyr å behandle konsistens og drift som et produkt
En trinnvis legacy-utrangering er ikke automatisk enklere – men i mange selskaper er det det eneste realistiske alternativet. Strangler Pattern fungerer hvis dere per etappe definerer klare prosesssnitt, planlegger parallelldrift som en reell driftsmodus og ikke overlater datakonsistens til tilfeldighetene. Avgjørende er tidlig avklaring av dataeierskap, robuste synkroniseringsmønstre med konfliktregler samt et rollout-design med bølger, godkjenninger og øvd tilbakefall.
Hvis du planlegger en utskifting og ønsker å gå strukturert gjennom grensesnittene, parallelldrift eller konseptet for datakonsistens, når du oss via .
Neste trinn
Når et tema blir et reelt prosjekt, bør arkitektur, eksisterende systemer og drift vurderes samlet allerede tidlig i prosessen.
Vi bistår ikke bare med enkeltspørsmål, men også når kodesnutter, legacy-temaer eller portalideer skal utvikles til et robust virksomhetsprosjekt.
- Eksisterende tilstand, målbildet og tekniske risikoer vurderes samlet.
- REST, datatilgang, portaler og utrulling blir ikke utsatt som etterfølgende oppgaver.
- Dere ser tidlig hvilken vei som er økonomisk og driftsmessig levedyktig.