Pillar stran
Modernizacija zapuščinskih sistemov
Inkrementalen refaktoring monolita v mikrostoritve, migracija s zastarelih tehnologij na sodobne stacke, prenos v oblak — brez poslovnega izpada, z načrtom rollback in popolno revizijsko sledjo.
Vsako podjetje ima kakšen zapuščinski sistem. Nekatera jih imajo več. Računovodska aplikacija iz leta 2008, ki nekako deluje. CRM, ki so ga napisali svetovalci, ki se jih nihče več ne spomni. Skladišče v Accessu. Vsakega od njih bo nekoč treba zamenjati — vprašanje ni ali, ampak kdaj in kako.
Modernizacija zapuščinskih sistemov je ena najtežjih vrst IT projektov. Zahteva uravnoteženje treh sil: ohranjanja poslovne kontinuitete (sistem mora delovati ves čas), uvajanja sodobnih tehnologij (mikrostoritve, oblak, AI) in nadzora tveganj (vsak refaktoring lahko pokvari nekaj, kar je delovalo leta).
Zakaj ne zadostuje „napisati znova od začetka"?
Iz naših izkušenj je 9 od 10 uspešnih modernizacij inkrementalen refaktoring, ne rewrite. Rewrite vabi s konceptualno preprostostjo („začeli bomo s čistim listom"), vendar v praksi ima tri temeljne težave:
- Nevidna poslovna logika. Stari sistem vsebuje leta poslovnih pravil — posebni pogoji za največje stranke, davčne oprostitve za določene panoge, obvodi za regulative iz leta 2015. Večina ni dokumentirana. Rewrite jih mora vse obnoviti iz spomina ljudi ali analize kode.
- Podvajanje dela. Med pisanjem novega sistema posel še naprej zahteva spremembe v starem (regulative, nove stranke, drobne napake). Ekipa bodisi podvaja delo (sprememba na dveh mestih) bodisi zamrzne stari sistem (poslovno tveganje).
- Big bang deployment. Po letu dela je nov sistem „skoraj pripravljen". Preklop vseh uporabnikov v eni noči generira ogromno tveganje. Vsaka nepričakovana težava pomeni vrnitev na stari sistem, izgubo morale ekipe, izpodbijanje zaupanja posla.
Inkrementalen refaktoring (najpogosteje po vzorcu Strangler Fig) rešuje vse tri težave: poslovna logika se odkriva postopoma, en vir resnice za vsako entiteto, deployment po fazah s feature flagi.
Šest vzorcev modernizacije
Vsak od njih rešuje konkretno tveganje. V večini projektov združujemo več njih in izbiramo vzorec glede na konkretni modul.
Strangler Fig
Postopno „ovijanje" starega sistema z novimi komponentami. Stara koda še deluje, vendar vsaka nova funkcionalnost gre v novo mikrostoritev, obstoječe module pa zamenjujemo enega za drugim. Po 12-24 mesecih se stari monolit izklopi.
Anti-corruption layer
Adapter, ki ščiti novo kodo pred posebnostmi starega sistema (nečitljiva imena polj, čudni formati datumov, neskladni tipi). Vsa „grda" logika izolirana na enem mestu — nova koda dela na čistem domenskem modelu.
Database refactoring
Vzorci iz knjige Refactoring Databases (Ambler/Sadalage): expand-and-contract za migracijo sheme, validacija podatkov pred izbrisom starih stolpcev, vzporedno vzdrževanje obeh shem med migracijo aplikacije.
Branch by abstraction
Uvedba abstrakcijske plasti okrog stare komponente, vzporedna implementacija nove komponente, postopen preklop z 0% na 100% prometa (feature flag). Brez „big bang" uvedbe.
Shadow mode
Nova koda se izvaja vzporedno s staro — obe obdelujeta iste zahteve, vendar le rezultati stare gredo k uporabniku. Rezultati se primerjajo offline. Po potrditvi skladnosti (običajno 2-4 tedne) promet preklopimo na novo kodo.
Event sourcing za migracijo
Snemamo tok poslovnih dogodkov iz starega sistema in ga predvajamo v novem. Omogoča predhodno validacijo nove arhitekture brez produkcijskega tveganja in vrnitev v poljubno preteklo stanje.
Tipičen časovni razpored modernizacije
Za povprečni sistem (monolit ~200 tisoč vrstic kode, 5-10 poslovnih modulov):
- Mesec 1: Discovery in dokumentacija. Reverse engineering arhitekture, preslikava odvisnosti, identifikacija tokov podatkov, dokumentacija poslovnih procesov s pomočjo poslovnih oseb.
- Mesec 2: Ciljna arhitektura in pilot. Načrt nove arhitekture, izbira tehnologije, pilot na najpreprostejšem modulu (proof of concept). Prva validacija pristopa.
- Meseca 3-4: Izločitev prvega produkcijskega modula. Strangler Fig pattern, shadow mode 2-3 tedne, preklop prometa, hypercare. Prva realna poslovna vrednost.
- Meseci 5-12: Iterativno izločanje naslednjih modulov. Vsak v ciklu 4-6 tednov: refaktoring → testi → shadow → produkcija → hypercare. Nenehno izboljševanje procesa, krajšanje časa za naslednje module.
- Meseci 12-18: Migracija podatkov in izklop monolita. Ko so vsi kritični moduli izločeni, dokončamo migracijo zgodovinskih podatkov, izklopimo stari sistem, arhiviramo. Praznujemo.
Stari sistem vs. moderniziran
| Vidik | Zapuščinski sistem (običajno) | Po modernizaciji |
|---|---|---|
| Čas uvajanja nove funkcije | 4-8 tednov (visoko tveganje regresije) | 3-7 dni (samodejni testi minimizirajo tveganje) |
| Pokritost s testi | 5-15% (ali brez) | >80%, v CI/CD cevovodu |
| Razpoložljivost razvijalcev | Majhna (zastarela tehnologija) | Velika (priljubljeni, sodobni stacki) |
| Varnost | Stare knjižnice z CVE luknjami | Skeniranje OWASP, gitleaks, samodejne posodobitve |
| Skaliranje | Vertikalno (več virov za monolit) | Horizontalno (skaliranje konkretnih mikrostoritev) |
| Opazljivost | Logi v datotekah, brez metrik | Prometheus + Grafana + Sentry + SIEM |
| Compliance (GDPR, EU AI Act, ISO 27001) | Zahtevno, drago za dokazovanje | Vgrajeno v arhitekturo, pripravljeno za revizijo |
Šest tipičnih tveganj — in kako jih obravnavamo
Tveganje: Brez testov v zapuščinskem sistemu
Mitigacija: Najprej gradimo karakterizacijske teste (capture tests) — snemamo obstoječe vedenje sistema na podlagi produkcijskih logov in posnetkov prometa. Šele nato začnemo refaktoring, s testi kot varovalom.
Tveganje: Znanje skoncentrirano v eni osebi („truck factor 1")
Mitigacija: Prenos znanja se začne v prvem tednu projekta. Vsi sestanki z osebo, ki pozna sistem, se snemajo in transkribirajo, ključni procesi dokumentirajo, arhitekturne odločitve utemeljijo. Po projektu celotna ekipa razume sistem.
Tveganje: Začasna upočasnitev ekipe
Mitigacija: V prvih 2-3 mesecih ekipa vzdržuje stari sistem + gradi nov. Naravna upočasnitev tempa sprememb. To ublažimo: prednost za spremembe, ki gredo le v nov sistem, freeze za nizko prioritetne spremembe v stari kodi.
Tveganje: Migracija podatkov
Mitigacija: Vsaka migracija podatkov ima tri faze: dry-run (na produkcijski kopiji), staging (na testnem okolju s pravim obsegom podatkov), produkcija (v servisnem oknu ali inkrementalno). Načrt rollback pripravljen pred začetkom.
Tveganje: Organizacijski odpor
Mitigacija: Komunikacija s poslom od prvega dne: zakaj modernizacija, kaj se bo spremenilo za uporabnika, kakšen časovni razpored, kako merimo uspeh. Prva iteracija izbrana tako, da hitro pokaže oprijemljivo vrednost (npr. nov UI ali hitrejše poročilo).
Tveganje: Podcenitev stroškov
Mitigacija: Discovery (1-2 tedna) pred ocenitvijo projekta. Iteracije 2-3 tedne s konkretnimi dostavljivimi učinki — lažje popraviti smer kot v dolgem projektu tipa „vse naenkrat". Proračun z buffer 20-30% za nepredvideno.
Pogosta vprašanja
Kaj je zapuščinski sistem?
Zakaj modernizirati, če sistem deluje?
Ali ni lažje vse napisati znova?
Ali modernizacija zahteva poslovni izpad?
Kako dolgo traja tipična modernizacija?
S katerih tehnologij najpogosteje migriramo?
Kaj z obstoječimi integracijami z drugimi sistemi?
Kako omejujete poslovno tveganje?
Kaj z dokumentacijo sistema, ki je ni?
Kakšni so stroški modernizacije v primerjavi z vzdrževanjem starega sistema?
Začnimo z revizijo
Enotedenska tehnična revizija: preslikava trenutnega stanja, identifikacija najnujnejših področij modernizacije, fazni načrt s konkretnimi poslovnimi učinki v prvi iteraciji.