ChallengeA Toronto-headquartered Canadian life insurance company (CAD $12.4B in-force premium, 2.8 million active policies across individual life, group benefits, and individual annuities, 3,200 employees) needed to modernize their core policy administration system — a COBOL-based mainframe application (IBM z/OS) that had been in production since 1988. The system managed policies with 30-50 year lifecycles: whole life, universal life, term, group life, group health, disability, and individual annuities — each product generation with different rules, riders, and calculation methods accumulated over 36 years. Core challenges: (1) Mainframe COBOL complexity — the policy administration system contained 3.8 million lines of COBOL (COBOL II and Enterprise COBOL), running on IBM z/OS with DB2 and VSAM databases. The system had been modified by approximately 45 developers over 36 years — each adding product generations, regulatory changes, and tactical fixes. Code quality varied dramatically: the original 1988 code was well-structured (built by a now-retired team of mainframe architects), but subsequent modifications had introduced: deeply nested conditional logic (IF statements nested 12-15 levels deep for premium calculations that handled every product variation introduced since 1988), undocumented business rules (modifications made in response to regulatory changes with comments like "per actuarial memo 2004-17" — the memo no longer locatable), dead code (estimated 30 percent of the codebase was unreachable but no one was confident enough to remove it), and copy-paste variations (the same calculation implemented slightly differently in 8 modules, each handling a specific product generation). Only 4 developers (average age 58) could modify the system with confidence. (2) Product generation complexity — the system administered 2.8 million active policies across 142 product variations. Each "product generation" had distinct rules: a Universal Life policy issued in 1992 had different cost of insurance rates, policy loan provisions, minimum guaranteed interest rates, and surrender charge schedules than a Universal Life policy issued in 2005. These rules were hardcoded in COBOL — not parameterised. Adding a new product generation required modifying COBOL code, not configuring a table. The complexity was multiplicative: 142 product variations multiplied by provincial regulatory differences (Ontario, Quebec, Alberta, BC each having specific insurance regulations), policy riders (waiver of premium, accidental death, child term — each with product-generation-specific rules), and tax treatment variations (policies issued before/after specific dates receiving different tax treatment under the Income Tax Act). (3) Regulatory modernization pressure — OSFI Guideline E-13 (Regulatory Compliance Management) and OSFI's supervisory expectations required the company to demonstrate: clear understanding of all business rules governing policy administration (difficult when rules were encoded in 3.8 million lines of undocumented COBOL), ability to implement regulatory changes within reasonable timeframes (current COBOL modification cycle: 4-6 months for significant changes), and data governance meeting OSFI expectations (the mainframe's data model made it difficult to produce the analytical reporting OSFI increasingly demanded). OSFI examiners had specifically noted in their last examination report that the company's "technology risk related to ageing core administration platform warrants management attention and a credible modernization roadmap." (4) Digital experience gap — the mainframe system operated on batch processing cycles: daily batch runs calculating policy values, processing premium payments, and updating policy status. This meant: policyholders could not see real-time policy values online (values updated overnight), premium payments processed with 24-hour delay, and customer service representatives accessed policy information through green-screen terminal emulators — unable to provide the instant, comprehensive service that customers expected. Competitors (particularly Manulife and Sun Life) were investing heavily in digital customer experiences — the company was losing group benefits clients to competitors with self-service portals that their legacy system could not support. (5) Cost escalation — IBM mainframe costs were increasing while providing decreasing value. Annual mainframe costs: MIPS charges (CAD $2.2M), IBM software licences (CAD $1.8M), Rocket Software tools (CAD $340K), data centre space and power (CAD $680K), and specialist COBOL developer costs (CAD $1.4M for 4 senior developers and 2 junior). Total annual mainframe cost: CAD $6.4M — increasing 8-12 percent annually as IBM raised MIPS pricing and specialist developer costs increased with scarcity.
SolutionWe delivered a comprehensive legacy modernization over 52 weeks — replacing the 36-year-old COBOL mainframe with a modern, cloud-native policy administration platform. (1) Business rule extraction: decoding 36 years of insurance logic. Automated COBOL analysis: custom tooling parsing 3.8 million lines of COBOL, identifying: 8,400 distinct business rules (premium calculations, cash value projections, surrender value calculations, death benefit determinations, dividend calculations, policy loan processing, rider processing, and regulatory calculations), 142 product-generation-specific rule sets (each product variation's unique logic isolated and documented), dead code identification (1.14 million lines — 30 percent — confirmed as unreachable through static analysis), and data flow mapping (how data moved between COBOL programmes, DB2 tables, and VSAM files). Actuarial validation: every extracted business rule validated against actuarial documentation. Working with the company's actuarial team: premium calculations compared against filed rate tables and actuarial memoranda, cash value and surrender value calculations compared against policy contract provisions, and dividend calculations validated against the participating account methodology. This actuarial validation was critical — modernization could not change how a policyholder's values were calculated. Even a CAD $0.01 discrepancy on a policy value could create regulatory issues and customer complaints. (2) Modern platform: cloud-native insurance administration. Architecture: the replacement platform built on Canadian-region cloud (AWS Canada Central — Montreal) with: Kubernetes (EKS) for orchestration, Java/Spring Boot microservices for insurance calculation engine (chosen for actuarial precision — BigDecimal handling critical for insurance mathematics), PostgreSQL for relational data, event-driven architecture (Amazon EventBridge) replacing batch processing with real-time events, React frontend with self-service policyholder portal, and GraphQL API enabling integration with group benefits portals, advisor tools, and regulatory reporting. Product configuration engine: the key architectural innovation — replacing hardcoded COBOL product rules with a configurable product engine. Each product generation defined through configuration (rates, provisions, formulas, riders) rather than code. Adding a new product generation or modifying existing rules required configuration changes, not code deployment. The 142 product variations modelled as configurations, each validated against the extracted COBOL business rules. This configuration approach reduced product launch time from 6 months (COBOL modification cycle) to 4 weeks. Actuarial calculation engine: a dedicated microservice implementing insurance mathematics with: precision guarantees (matching COBOL's fixed-point arithmetic — ensuring values calculated by the modern system matched COBOL to the penny), product-generation-aware calculations (each policy processed according to the rules of its specific product generation — a 1992 UL policy calculated differently from a 2005 UL policy), and regulatory calculation modules (provincial premium tax, federal tax provisions, OSFI capital calculations). (3) Parallel running: penny-for-penny validation. The most critical phase: running COBOL and modern systems simultaneously, comparing every calculation for every policy. Batch comparison: every night, both systems independently calculated policy values for all 2.8 million active policies. Automated reconciliation compared: current cash value, death benefit, premium due, dividend allocation, surrender value, policy loan balance, and all rider values. Any discrepancy exceeding CAD $0.01 flagged for investigation. Initial comparison: 4.2 percent of policies showed discrepancies — each investigated and resolved. Common causes: COBOL rounding behaviour differences (COBOL using different rounding modes than Java — resolved by implementing COBOL-compatible rounding), date calculation differences (COBOL using Julian dates, Java using Gregorian — leap year handling creating edge cases), and legacy data quality issues (discovered through comparison — policies with incorrect product codes, missing rider records, and orphaned data — issues that had existed undetected in the COBOL system for years). After 8 weeks of parallel running: discrepancy rate reduced to 0.0003 percent (8 policies out of 2.8 million — each explainable by legacy data quality issues that the modern system actually handled more correctly). (4) Migration sequence: lowest-risk-first approach. Phase A — group benefits (weeks 10-22): group benefits (group life, group health, group dental, group disability) migrated first — these products had shorter policy cycles (annual renewal), simpler calculations, and lower regulatory complexity than individual life. 180,000 group certificates migrated. Self-service employer portal launched — a capability the legacy system could not provide, immediately differentiating the company in group benefits sales. Phase B — individual term life (weeks 18-30): term life insurance (the simplest individual product — level premium, fixed death benefit, no cash value) migrated to prove individual product capabilities. 420,000 term policies migrated. Phase C — individual annuities (weeks 26-38): individual annuities migrated — complex calculations (interest crediting, minimum guaranteed rates, surrender charges) validated through parallel running. 280,000 annuity contracts migrated. Phase D — individual participating and universal life (weeks 34-48): the most complex products migrated last — whole life with dividends, universal life with flexible premiums and investment accounts. 1.2 million policies migrated. These products required the most extensive parallel running due to calculation complexity (dividend allocation, cost of insurance deductions, policy loan interactions). Phase E — legacy decommission (weeks 48-52): mainframe decommissioned after 4 weeks of modern-only operation. Data archived in read-only format for regulatory retention (OSFI requiring 7-year retention of historical records). (5) OSFI compliance throughout. Regulatory communication: OSFI notified of modernization programme at initiation — providing supervisory comfort through regular progress updates. Parallel running reports shared with OSFI demonstrating calculation accuracy. Post-modernization OSFI examination: conducted 6 months after mainframe decommission — zero findings related to the modernization. The OSFI examination team noting that the modern platform provided "significantly improved regulatory reporting capability and data governance" compared to the legacy system.
OutcomeResults over 12 months post-modernization. Policy administration: 2.8 million active policies successfully migrated — zero policyholder impact during transition. Calculation accuracy: penny-for-penny match with legacy system validated through parallel running (0.0003 percent discrepancy rate — all attributable to legacy data quality issues). Real-time processing: policy values, premium payments, and status changes processed in real-time (replacing 24-hour batch cycle). Digital experience: policyholder self-service portal: 340,000 policyholders registered in first year (from zero). Group benefits employer portal: cited by 3 new group clients as a deciding factor in selecting the company. Customer service: representatives accessing real-time policy information through modern interface (replacing green-screen terminals). Product agility: new product launch time from 6 months (COBOL modification) to 4 weeks (configuration). Product generation modifications from 4-6 months to 2-3 weeks. Regulatory change implementation from 3-6 months to 3-4 weeks. OSFI compliance: OSFI examination: zero modernization-related findings. Regulatory reporting: automated OSFI capital returns (previously requiring 3 weeks of manual data extraction and manipulation — now generated in 4 hours). Data governance: comprehensive audit trails meeting OSFI expectations. Cost: mainframe elimination: CAD $6.4M annual cost eliminated. Modern platform: CAD $1.8M annually (AWS infrastructure + SaaS licences). Annual infrastructure saving: CAD $4.6M. Technology talent: COBOL team (4 developers, average age 58, CAD $1.4M annually) replaced by modern development team (6 developers, average age 34, CAD $1.2M annually). Net saving: CAD $200K with larger, more sustainable team. Total modernization investment: CAD $8.2M (ZTABS engagement + internal team + AWS + parallel running costs over 52 weeks). Annual savings: CAD $4.8M (infrastructure + talent). Payback period: 21 months. 5-year TCO reduction: CAD $15.8M.