We modernised the system over 24 weeks using a strangler fig approach — building the modern system alongside the legacy system, migrating functionality incrementally. Modern architecture design (weeks 1-4): planning the target state. Architecture: microservices on: Kubernetes (hosted on: CSC — Finland's IT Center for Science — providing: government-grade cloud hosting within Finnish jurisdiction). Services: application intake (receiving and validating applications), case processing (workflow engine for: application processing), decision engine (Finnish regulatory logic for: eligibility and decision rules), notification (citizen communication — email, SMS, and: Suomi.fi messages), integration hub (modern API-based integration with: other government systems), and: citizen portal (Next.js — responsive, accessible, Suomi.fi-authenticated). Database: PostgreSQL (replacing Oracle). Each service: independently deployable, independently scalable, and: independently maintainable — addressing: the monolithic architecture that: made the legacy system brittle. Business logic extraction (weeks 2-8): understanding what the legacy system actually does.
Regulatory logic archaeology: working with the agency's legal and policy teams: mapping every regulatory rule encoded in the system — eligibility criteria, processing rules, fee calculations, deadline calculations, and: exception handling. The extraction: discovering: 847 distinct business rules — many: undocumented (implemented in code without: corresponding policy documentation). 23 rules: found to be incorrect (implementing: superseded regulatory versions) — the legacy system: producing wrong results for: certain edge cases that: hadn't been noticed because: the volume was low. Automated test creation: every extracted rule: converted into: an automated test case with: known inputs and expected outputs. The test suite: 3,400 test cases covering: the 847 business rules — the tests: runnable against both the legacy and modern systems to: verify identical behaviour. Citizen portal (weeks 4-12): modern frontend replacing the 2007 JSP interface. Suomi.
fi authentication (citizens: authenticating with Finnish bank credentials or mobile ID — the same authentication used across: all Finnish government services — replacing: the legacy system-specific login). Responsive, accessible design (WCAG 2.1 AA compliant — mobile-responsive, keyboard-navigable, screen-reader-compatible. Finnish and Swedish languages supported natively). Smart forms (application forms: pre-populated with: data from DVV (population registry) and: other government systems — citizens not re-entering: information that the government already has — reducing: form completion time and: data entry errors). Real-time status (citizens: checking application status in real-time — "Your application was received on X, is currently being processed, estimated decision date: Y" — replacing: the legacy "your application is in process" with: no further detail). The citizen portal: deployed as the first strangler fig component — new applications: entering through the modern portal but: processing continuing in the legacy backend.
Integration modernisation (weeks 6-16): replacing SOAP and file-based integrations with modern APIs. API gateway (a modern API gateway: providing standardised REST APIs for: all government system integrations. Each legacy SOAP integration: replaced with: a modern REST API — the API gateway handling: authentication, rate limiting, logging, and: error handling. The modernised integrations: more reliable (retry logic, circuit breakers), more visible (API monitoring and: alerting), and: easier to maintain (standard REST patterns rather than: custom SOAP implementations)). Decision engine migration (weeks 10-20): migrating the core business logic. Rule engine (the 847 business rules: migrated from Java code and Oracle stored procedures to: a modern rule engine — rules: expressed declaratively (readable by: policy staff, not just developers), testable independently, and: version-controlled (each regulatory amendment: a tracked change in the rule base)).
Automated testing: every rule: tested against: the 3,400 test suite — any deviation from: legacy system behaviour: investigated (is it a modernisation bug, or: a legacy bug that should be fixed?)). Parallel processing (for 8 weeks: every application: processed by both legacy and modern systems in parallel — results compared. Any discrepancy: investigated and resolved before: traffic migrated to the modern system exclusively)). Data migration (weeks 14-22): moving from Oracle 11g to PostgreSQL. Schema modernisation (the legacy Oracle schema: denormalised, with: cryptic column names and: undocumented relationships. The modern PostgreSQL schema: normalised, clearly named, and: documented. The migration: mapping 340 legacy tables to: 180 modern tables — merging redundant tables, normalising denormalised data, and: establishing: proper foreign key relationships). Data validation (every migrated record: validated — counts, sums, checksums, and: spot-check comparisons — ensuring: no data lost or corrupted during: migration).
Historical data (19 years of application data: migrated in full — maintaining: audit trail continuity and: enabling: historical analysis that: the agency hadn't been able to perform on the legacy system).