Pillar-sivu
Legacy-järjestelmien modernisointi
Monoliitin inkrementaalinen refaktorointi mikropalveluiksi, migraatio vanhentuneista teknologioista moderniin stackiin, pilvimigraatio — ilman liiketoimintakatkoa, rollback-suunnitelmalla ja täydellisellä audit-jäljellä.
Jokaisella yrityksellä on jokin legacy-järjestelmä. Joillakin on useita. Vuoden 2008 kirjanpitosovellus, joka jotenkin yhä toimii. CRM, jonka kirjoittivat konsultit, joita kukaan ei enää muista. Varastojärjestelmä Accessissa. Jokainen niistä on jossain vaiheessa korvattava — kysymys ei ole jos, vaan milloin ja miten.
Legacy-järjestelmien modernisointi on yksi vaikeimmista IT-projektityypeistä. Se vaatii kolmen voiman tasapainotusta: liiketoiminnan jatkuvuuden ylläpitoa (järjestelmän on toimittava koko ajan), modernien teknologioiden käyttöönottoa (mikropalvelut, pilvi, tekoäly) ja riskien hallintaa (jokainen refaktorointi voi rikkoa jotain, mikä on toiminut vuosia).
Miksi „kirjoittaminen alusta uudelleen" ei riitä?
Kokemuksemme mukaan 9 onnistuneesta modernisoinnista 10:stä on inkrementaalinen refaktorointi, ei rewrite. Rewritet houkuttelevat käsitteellisellä yksinkertaisuudella („aloitetaan puhtaalta pöydältä"), mutta käytännössä niillä on kolme perustavanlaatuista ongelmaa:
- Näkymätön liiketoimintalogiikka. Vanha järjestelmä sisältää vuosien liiketoimintasäännöt — erityisehdot suurimmille asiakkaille, verovapautukset tietyille toimialoille, kiertotiet vuoden 2015 sääntelyille. Suurin osa ei ole dokumentoitu. Rewriten on luotava ne kaikki uudelleen ihmisten muistista tai koodianalyysistä.
- Työn kahdentaminen. Uutta järjestelmää kirjoitettaessa liiketoiminta edelleen vaatii muutoksia vanhaan (sääntelyt, uudet asiakkaat, pienet bugit). Tiimi joko tuplaa työn (muutos kahdessa paikassa) tai jäädyttää vanhan järjestelmän (liiketoimintariski).
- Big bang -käyttöönotto. Vuoden työn jälkeen uusi järjestelmä on „melkein valmis". Kaikkien käyttäjien vaihtaminen yhden yön aikana synnyttää valtavan riskin. Jokainen odottamaton ongelma tarkoittaa paluuta vanhaan järjestelmään, tiimin moraalin menettämistä ja liiketoiminnan luottamuksen heikkenemistä.
Inkrementaalinen refaktorointi (yleensä Strangler Fig -kuvion mukaan) ratkaisee kaikki kolme: liiketoimintalogiikka löydetään asteittain, yksi totuuden lähde jokaiselle entiteetille, käyttöönotto vaiheittain feature flageillä.
Kuusi modernisointikuvaa
Jokainen ratkaisee tietyn riskin. Useimmissa projekteissa yhdistämme useita ja valitsemme kuvion moduulikohtaisesti.
Strangler Fig
Vanhan järjestelmän asteittainen „kietominen" uusilla komponenteilla. Vanha koodi pyörii yhä, mutta jokainen uusi ominaisuus menee uuteen mikropalveluun ja olemassa olevat moduulit korvataan yksi kerrallaan. 12-24 kuukauden jälkeen vanha monoliitti sammutetaan.
Anti-corruption layer
Adapteri, joka suojaa uutta koodia vanhan järjestelmän omituisuuksilta (lukukelvottomat kenttänimet, oudot päivämääräformaatit, epäjohdonmukaiset tyypit). Kaikki „ruma" logiikka eristetty yhteen paikkaan — uusi koodi operoi puhtaalla domain-mallilla.
Database refactoring
Refactoring Databases -kirjan (Ambler/Sadalage) kuviot: expand-and-contract skeeman migraatiolle, datan validointi ennen vanhojen sarakkeiden poistoa, molempien skeemojen rinnakkaisajo sovelluksen migraation aikana.
Branch by abstraction
Abstraktiokerroksen lisääminen vanhan komponentin ympärille, uuden komponentin rinnakkainen toteutus, liikenteen asteittainen siirto 0 %:sta 100 %:iin (feature flag). Ilman „big bang" -käyttöönottoa.
Shadow mode
Uusi koodi pyörii vanhan rinnalla — molemmat käsittelevät samoja pyyntöjä, mutta vain vanhan tulokset päätyvät käyttäjälle. Tuloksia verrataan offline. Yhteensopivuuden vahvistuksen jälkeen (tyypillisesti 2-4 viikkoa) liikenne siirretään uuteen koodiin.
Event sourcing migraatiolle
Tallennamme liiketoimintatapahtumien virtaa vanhasta järjestelmästä ja toistamme sen uudessa. Tämä mahdollistaa uuden arkkitehtuurin esivalidoinnin ilman tuotantoriskiä ja paluun mihin tahansa historialliseen tilaan.
Tyypillinen modernisointiaikataulu
Keskikokoiselle järjestelmälle (monoliitti ~200 000 koodiriviä, 5-10 liiketoimintamoduulia):
- Kuukausi 1: Discovery ja dokumentaatio. Arkkitehtuurin reverse engineering, riippuvuuksien kartoitus, datavirtojen tunnistaminen, liiketoimintaprosessien dokumentointi liiketoimintasidosryhmien avulla.
- Kuukausi 2: Kohdearkkitehtuuri ja pilotti. Uuden arkkitehtuurin suunnittelu, teknologiavalinnat, pilotti yksinkertaisimmalla moduulilla (proof of concept). Ensimmäinen lähestymistavan validointi.
- Kuukaudet 3-4: Ensimmäisen tuotantomoduulin irrottaminen. Strangler Fig -kuvio, shadow mode 2-3 viikkoa, liikenteen vaihto, hypercare. Ensimmäinen todellinen liiketoiminta-arvo.
- Kuukaudet 5-12: Seuraavien moduulien iteratiivinen irrottaminen. Jokainen 4-6 viikon syklissä: refaktorointi → testit → shadow → tuotanto → hypercare. Prosessin jatkuva parantaminen, ajan väheneminen moduulia kohti.
- Kuukaudet 12-18: Tietojen migraatio ja monoliitin käytöstä poisto. Kun kaikki kriittiset moduulit on irrotettu, viimeistelemme historiallisen datan migraation, sammutamme vanhan järjestelmän ja arkistoimme. Juhlimme.
Vanha järjestelmä vs. modernisoitu
| Aspekti | Legacy-järjestelmä (tyypillisesti) | Modernisoinnin jälkeen |
|---|---|---|
| Uuden ominaisuuden toimitusaika | 4-8 viikkoa (korkea regressioriski) | 3-7 päivää (automaattitestit minimoivat riskin) |
| Testikattavuus | 5-15 % (tai ei lainkaan) | >80 %, CI/CD-putkessa |
| Kehittäjien saatavuus | Matala (vanhentunut teknologia) | Korkea (suositut, modernit stackit) |
| Turvallisuus | Vanhat kirjastot paikkaamattomilla CVE-haavoittuvuuksilla | OWASP-skannaus, gitleaks, automaattipäivitykset |
| Skaalautuminen | Vertikaalinen (lisää resursseja monoliitille) | Horisontaalinen (yksittäisten mikropalveluiden skaalaus) |
| Havainnollisuus | Lokit tiedostoissa, ei metriikoita | Prometheus + Grafana + Sentry + SIEM |
| Compliance (GDPR, EU AI Act, ISO 27001) | Vaativa, kallis todistaa | Sisäänrakennettu arkkitehtuuriin, audit-valmis |
Kuusi tyypillistä riskiä — ja miten käsittelemme niitä
Riski: Testien puute legacy-järjestelmässä
Lieventäminen: Ensin rakennamme karakterisointitestit (capture tests) — tallennamme järjestelmän nykyisen käyttäytymisen tuotantolokien ja liikennetallenteiden perusteella. Vasta sitten aloitamme refaktoroinnin, testit turvaverkkona.
Riski: Tieto keskittynyt yhteen henkilöön („truck factor 1")
Lieventäminen: Tiedon siirto alkaa projektin ensimmäisellä viikolla. Kaikki tapaamiset järjestelmän tuntevan henkilön kanssa nauhoitetaan ja transkriboidaan, keskeiset prosessit dokumentoidaan, arkkitehtuuripäätökset perustellaan. Projektin jälkeen koko tiimi ymmärtää järjestelmän.
Riski: Tiimin tilapäinen hidastuminen
Lieventäminen: Ensimmäiset 2-3 kuukautta tiimi ylläpitää vanhaa järjestelmää + rakentaa uutta. Luonnollinen muutosvauhdin hidastuminen. Lievennämme sitä: priorisoimme muutokset, jotka menevät vain uuteen järjestelmään, jäädytämme matalan prioriteetin muutokset vanhassa koodissa.
Riski: Tietojen migraatio
Lieventäminen: Jokaisella tietomigraatiolla on kolme vaihetta: dry-run (tuotannon kopiossa), staging (testiympäristössä todellisella datamäärällä), tuotanto (huoltoikkunassa tai inkrementaalisesti). Rollback-suunnitelma valmiina ennen aloitusta.
Riski: Organisaation vastustus
Lieventäminen: Viestintä liiketoiminnan kanssa ensimmäisestä päivästä alkaen: miksi modernisoidaan, mikä muuttuu käyttäjälle, mikä on aikataulu, miten mittaamme onnistumisen. Ensimmäinen iteraatio valitaan niin, että se näyttää nopeasti konkreettista arvoa (esim. uusi UI tai nopeampi raportti).
Riski: Kustannusten aliarviointi
Lieventäminen: Discovery (1-2 viikkoa) ennen projektin hinnoittelua. 2-3 viikon iteraatiot konkreettisilla toimituksilla — helpompi korjata kurssia kuin pitkässä „kaikki kerralla" -projektissa. Budjetissa 20-30 %:n puskuri yllätyksille.
Usein kysytyt kysymykset
Mikä on legacy-järjestelmä?
Miksi modernisoida, jos järjestelmä toimii?
Eikö ole helpompaa kirjoittaa kaikki uudelleen alusta?
Vaatiiko modernisointi liiketoimintakatkoa?
Kuinka kauan tyypillinen modernisointi kestää?
Mistä teknologioista migroimme useimmin?
Entä olemassa olevat integraatiot muihin järjestelmiin?
Miten vähennätte liiketoimintariskiä?
Entä järjestelmädokumentaatio, jota ei ole?
Miten modernisoinnin kustannukset suhteutuvat vanhan järjestelmän ylläpitoon?
Aloitetaan auditoinnilla
Viikon tekninen auditointi: nykytilan kartoitus, kiireellisimpien modernisointialueiden tunnistaminen, vaiheittainen suunnitelma konkreettisilla liiketoimintatuloksilla ensimmäisessä iteraatiossa.