Pillar stranica

Modernizacija naslijeđenih sustava

Inkrementalni refaktoring monolita u mikroservise, migracija sa zastarjelih tehnologija na moderne stackove, prijenos u oblak — bez poslovnog prekida, s planom rollbacka i potpunim revizijskim tragom.

Svaka tvrtka ima neki naslijeđeni sustav. Neke ih imaju nekoliko. Računovodstvena aplikacija iz 2008. godine koja nekako radi. CRM koji su napisali konzultanti kojih se nitko više ne sjeća. Skladište u Accessu. Svaki od njih jednom će morati biti zamijenjen — pitanje nije hoće li, nego kadakako.

Modernizacija naslijeđenih sustava jedan je od najtežih tipova IT projekata. Zahtijeva uravnoteženje tri sile: održavanje poslovnog kontinuiteta (sustav mora raditi cijelo vrijeme), uvođenje modernih tehnologija (mikroservisi, oblak, AI) i kontrolu rizika (svaki refaktoring može pokvariti nešto što je radilo godinama).

Zašto „pisanje ispočetka" nije dovoljno?

Iz našeg iskustva 9 od 10 uspješnih modernizacija je inkrementalni refaktoring, a ne rewrite. Rewriteovi su konceptualno primamljivi („počet ćemo s čistom pločom"), ali u praksi imaju tri fundamentalna problema:

  • Nevidljiva poslovna logika. Stari sustav sadrži godine poslovnih pravila — posebne uvjete za najveće klijente, porezna oslobođenja za konkretne industrije, zaobilaženja za regulative iz 2015. godine. Većina nije dokumentirana. Rewrite ih mora sve rekreirati iz sjećanja ljudi ili analize koda.
  • Dupliciranje rada. Tijekom pisanja novog sustava, biznis i dalje zahtijeva promjene u starom (regulative, novi klijenti, sitni bugovi). Tim ili duplicira rad (promjena na dva mjesta) ili zamrzava stari sustav (poslovni rizik).
  • Big bang deployment. Nakon godine rada, novi sustav je „skoro gotov". Prebacivanje svih korisnika u jednoj noći generira monumentalan rizik. Svaki neočekivan problem znači povratak na stari sustav, gubitak morala tima, podrivanje povjerenja biznisa.

Inkrementalni refaktoring (najčešće prema Strangler Fig obrascu) rješava sva tri: poslovna logika otkriva se postupno, jedan izvor istine za svaki entitet, deployment u fazama s feature flagovima.

Šest obrazaca modernizacije

Svaki od njih rješava konkretan rizik. U većini projekata kombiniramo nekoliko, birajući obrazac za konkretan modul.

Strangler Fig

Postupno „omotavanje" starog sustava novim komponentama. Stari kod i dalje radi, ali svaka nova funkcionalnost ide u novi mikroservis, a postojeći moduli zamjenjuju se jedan po jedan. Nakon 12-24 mjeseca stari monolit se gasi.

Anti-corruption layer

Adapter koji štiti novi kod od posebnosti starog sustava (nečitljiva imena polja, čudni formati datuma, nedosljedni tipovi). Sva „ružna" logika izolirana je na jednom mjestu — novi kod operira na čistom modelu domene.

Database refactoring

Obrasci iz knjige Refactoring Databases (Ambler/Sadalage): expand-and-contract za migracije sheme, validacija podataka prije brisanja starih stupaca, paralelno održavanje obje sheme tijekom migracije aplikacije.

Branch by abstraction

Uvođenje sloja apstrakcije oko stare komponente, paralelna implementacija nove komponente, postupno prebacivanje s 0% na 100% prometa (feature flag). Bez „big bang" deploya.

Shadow mode

Novi kod pokreće se paralelno sa starim — oba obrađuju iste zahtjeve, ali samo rezultati starog dolaze do korisnika. Rezultati se uspoređuju offline. Nakon potvrde sukladnosti (obično 2-4 tjedna) prebacujemo promet na novi kod.

Event sourcing za migraciju

Snimamo tok poslovnih događaja iz starog sustava i reproduciramo ga u novom. Omogućuje preliminarnu validaciju nove arhitekture bez produkcijskog rizika te povratak na bilo koje povijesno stanje.

Tipičan harmonogram modernizacije

Za srednji sustav (monolit ~200 tis. linija koda, 5-10 poslovnih modula):

  1. Mjesec 1: Discovery i dokumentacija. Reverse engineering arhitekture, mapiranje ovisnosti, identifikacija tokova podataka, dokumentacija poslovnih procesa uz pomoć poslovnih ljudi.
  2. Mjesec 2: Ciljna arhitektura i pilot. Projekt nove arhitekture, odabir tehnologija, pilot na najjednostavnijem modulu (proof of concept). Prva validacija pristupa.
  3. Mjeseci 3-4: Izdvajanje prvog produkcijskog modula. Strangler Fig obrazac, shadow mode kroz 2-3 tjedna, prebacivanje prometa, hypercare. Prva stvarna poslovna vrijednost.
  4. Mjeseci 5-12: Iterativno izdvajanje sljedećih modula. Svaki u ciklusu 4-6 tjedana: refaktoring → testovi → shadow → produkcija → hypercare. Kontinuirano unaprjeđenje procesa, smanjenje vremena za sljedeće module.
  5. Mjeseci 12-18: Migracija podataka i povlačenje monolita. Kada su svi kritični moduli izdvojeni, finaliziramo migraciju povijesnih podataka, gasimo stari sustav, arhiviramo. Slavimo.

Stari sustav vs. modernizirani

AspektNaslijeđeni sustav (obično)Nakon modernizacije
Vrijeme implementacije nove funkcije4-8 tjedana (visok rizik regresije)3-7 dana (automatski testovi minimiziraju rizik)
Pokrivenost testovima5-15% (ili ništa)>80%, u CI/CD pipelineu
Dostupnost programeraNiska (zastarjela tehnologija)Visoka (popularni, moderni stackovi)
SigurnostStare biblioteke s CVE rupamaSkeniranje OWASP, gitleaks, automatska ažuriranja
SkaliranjeVertikalno (više resursa za monolit)Horizontalno (skaliranje konkretnih mikroservisa)
ObservabilnostLogovi u datotekama, bez metrikaPrometheus + Grafana + Sentry + SIEM
Compliance (GDPR, EU AI Act, ISO 27001)Zahtjevno, skupo za dokazivanjeUgrađeno u arhitekturu, spremno za reviziju

Šest tipičnih rizika — i kako ih adresiramo

Rizik: Nedostatak testova u naslijeđenom sustavu

Mitigacija: Prvo gradimo karakterizacijske testove (capture testove) — snimamo trenutno ponašanje sustava na temelju produkcijskih logova i snimki prometa. Tek onda počinjemo refaktoring, s testovima kao sigurnosnom mrežom.

Rizik: Znanje koncentrirano u jednoj osobi („truck factor 1")

Mitigacija: Prijenos znanja započinje u prvom tjednu projekta. Svi sastanci s osobom koja poznaje sustav se snimaju i transkribiraju, ključni procesi dokumentiraju, arhitektonske odluke obrazlažu. Nakon projekta cijeli tim razumije sustav.

Rizik: Privremeno usporavanje tima

Mitigacija: U prvih 2-3 mjeseca tim održava stari sustav + gradi novi. Prirodno usporavanje tempa promjena. Mitigiramo ga: prioritet za promjene koje idu samo u novi sustav, freeze za niskoprioritetne promjene u starom kodu.

Rizik: Migracija podataka

Mitigacija: Svaka migracija podataka ima tri faze: dry-run (na produkcijskoj kopiji), staging (na testnom okruženju sa stvarnom razmjerom podataka), produkcija (u servisnom prozoru ili inkrementalno). Plan rollbacka gotov prije starta.

Rizik: Organizacijski otpor

Mitigacija: Komunikacija s biznisom od prvog dana: zašto modernizacija, što se mijenja za korisnika, kakav je raspored, kako mjerimo uspjeh. Prva iteracija odabrana je tako da brzo pokaže opipljivu vrijednost (npr. novi UI ili brži izvještaj).

Rizik: Podcjenjivanje troška

Mitigacija: Discovery (1-2 tjedna) prije procjene projekta. Iteracije od 2-3 tjedna s konkretnim isporukama — lakše je korigirati kurs nego u dugom projektu tipa „sve odjednom". Budžet s rezervom 20-30% za nepredviđeno.

Najčešća pitanja

Što je naslijeđeni (legacy) sustav?
Naslijeđeni sustav je softver koji još uvijek radi u organizaciji, ali se temelji na zastarjelim tehnologijama, ima dubok tehnički dug, nedostaju mu testovi, dokumentacija ili programer koji ga je napisao. Klasični primjeri: monolitna aplikacija u PHP 5.x ili .NET Framework 4.0, baza podataka bez migracija, frontend u jQueryju, deploy preko FTP-a. Radi, ali svaka promjena je visok rizik i trošak.
Zašto modernizirati ako sustav radi?
Tri glavna razloga. Prvo: trošak održavanja raste eksponencijalno sa starošću sustava — sve manje programera poznaje tehnologiju, svaka promjena traje dulje, svaki bug ima veći domet. Drugo: sigurnosni rizik — stari frameworci imaju nezakrpane rupe, nema podrške proizvođača, neusklađenost s GDPR-om/ISO 27001. Treće: blokada rasta biznisa — novi zahtjevi (mobile, API, integracije, AI) teški su ili nemogući za dodavanje.
Nije li lakše napisati sve iznova?
Klasična dilema „rewrite vs refactor". Rewriteovi su konceptualno primamljivi, ali u praksi: traju 2-3 puta dulje nego što je planirano, projekt umire pod teretom rekreiranja nevidljive poslovne logike, u međuvremenu stari sustav treba dalje razvijati (dupliciranje rada). Iz našeg iskustva: 9 od 10 uspješnih modernizacija je inkrementalni refaktoring (Strangler Fig obrazac) — postupna zamjena dijelova starog sustava, uz održavanje poslovnog kontinuiteta. Rewrite ima smisla samo za vrlo male sustave.
Zahtijeva li modernizacija poslovni prekid?
U velikoj većini projekata ne. Primjenjujemo obrasce koji omogućuju zamjenu komponenti „uživo": blue-green deployment, feature flags, dark launches, paralelno pokretanje starog i novog koda s usporedbom rezultata (shadow mode). Kratki servisni prozori mogu biti potrebni kod migracije baze podataka sa značajnom promjenom sheme, ali planiramo ih unaprijed (obično noću, vikendom) i s potpunim planom rollbacka.
Koliko traje tipična modernizacija?
Ovisi o razmjeri. Pojedini modul monolita izdvojen kao mikroservis: 1-2 mjeseca. Veća modernizacija (5-10 modula, nova baza podataka, novi API): 6-12 mjeseci u iteracijama od 2-3 tjedna. Potpuna transformacija monolita enterprise klase: 18-36 mjeseci, ali poslovna vrijednost pojavljuje se već nakon prve iteracije — svaki izdvojeni modul odmah daje koristi (brže promjene, niži rizik, bolja observabilnost).
S kojih tehnologija najčešće migriramo?
Najčešće putanje: PHP 5/7 → PHP 8 ili Python (FastAPI) ili Node.js (Express/Fastify). .NET Framework 4.x → .NET 8 ili Java/Spring Boot. Java EE (JBoss/WebSphere) → Spring Boot ili Quarkus. jQuery + monolitni predlošci → React/Vue/Astro. Oracle DB → PostgreSQL (značajne uštede na licencama). On-premise → oblak (AWS, Azure, GCP, lokalni privatni oblak).
Što s postojećim integracijama s drugim sustavima?
Svaka postojeća integracija mapira se u fazi discoveryja. Plan migracije uključuje: zadržavanje postojećih ugovora (interni i vanjski klijenti ne primjećuju promjenu), uvođenje verzioniranja (v1 stari ugovor, v2 novi), postupno migriranje konzumenata na v2, tek onda povlačenje v1. Potpuna unatražna kompatibilnost tijekom migracije.
Kako ograničavate poslovni rizik?
Pet slojeva: 1) inkrementalnost — zamjenjujemo modul po modul, a ne sve odjednom; 2) karakterizacijski testovi — prije refaktoringa snimamo trenutno ponašanje sustava (capture testovi), koji potom provjeravaju da ništa nije pokvareno; 3) feature flags — nova funkcionalnost pokreće se postupno (1% korisnika → 10% → 50% → 100%); 4) plan rollbacka za svaki deploy (<5 min); 5) hypercare nakon implementacije (intenzivan monitoring 2-4 tjedna).
Što s dokumentacijom sustava koja ne postoji?
Čest problem kod legacyja. Prva faza projekta: reverse engineering dokumentacije. AI agenti analiziraju kod, shemu baze podataka, produkcijske logove i generiraju: shemu arhitekture, popis endpointa, mapu ovisnosti, opis poslovnih procesa. Ova dokumentacija potom se provjerava s poslovnim ljudima (izgleda li proces tako kako razumijemo iz koda). Rezultat: potpuna dokumentacija prije početka refaktoringa, korisna ne samo za projekt modernizacije, već i za produktni tim.
Kakvi su troškovi modernizacije u usporedbi s održavanjem starog sustava?
Kratkoročno modernizacija je skuplja od održavanja (ulaganje u refaktoring + paralelno održavanje starog sustava). Točka break-evena (gdje novi sustav postaje jeftiniji za održavanje od starog) obično nastupa nakon 12-18 mjeseci. Nakon toga novi sustav: košta manje za održavanje (manje programera, više automatizacije), omogućuje brže uvođenje promjena (kraći time-to-market), smanjuje rizik (bolja observabilnost, više testova, izolacija kvarova).

Započnimo revizijom

Tjedna tehnička revizija: mapiranje trenutnog stanja, identifikacija najhitnijih područja modernizacije, fazni plan s konkretnim poslovnim učincima u prvoj iteraciji.