We wrapped the mainframe in a strangler-fig architecture centered on a new event-sourced ledger service. The first wave was intentionally low-risk, savings accounts, roughly 8% of balances, and ran in parallel with the mainframe for 90 days. A dedicated reconciliation service compared every balance and every posting daily, with drift alarms tuned to the cent. Only when parallel run produced zero unexplained discrepancies for 30 consecutive days did the wave cut over, and the mainframe remained the fallback book of record for another quarter.
Change data capture via Debezium streamed DB2 mutations into Kafka, which let us feed the new ledger, the reconciliation service, and the 200-plus downstream consumers from the same event backbone. Instead of forcing every consumer to migrate at once, we generated their legacy batch files from the event stream, bit-compatible with the mainframe output, so downstream teams could move to real-time APIs on their own schedule. Products migrated in seven waves over 14 months: savings, then term deposits, current accounts, cards, SME lending, mortgages, and finally payments orchestration.
In parallel we rebuilt the delivery machinery, because a modern core on quarterly releases would have wasted the investment. EKS clusters provisioned with Terraform, GitOps deployments through ArgoCD, and a progressive-delivery pipeline took the bank from four releases a year to roughly thirty a week, with every change traceable for the regulator.