paulasilva Paula Silva | AI-Native Software Engineer
Core Banking Modernization

Core Banking Modernization on Unisys ClearPath MCP.

A COBOL85-to-.NET playbook, driven by GitHub Copilot agents.

From a 31-year-old Unisys core to a modern .NET application. The platform, the archaeology, and the build, with agentic AI carrying the work from first reading to validated code. A 90-minute session, 40 of them on the technical core.

AuthorPaula Silva
RoleAI-Native Software Engineer
ScenarioContoso National Bank · CIBS
Legacy stackCOBOL85 · DMSII · WFL · COMS
Target.NET 8 modular monolith
Deck map

Five technical parts, framed for the boardroom:
from a working Unisys legacy to validated .NET.

Part 01

The dilemma.

Why a core that works perfectly is the real risk.

Part 02

The system.

Inside a Unisys ClearPath MCP estate, and the COBOL within it.

Part 03

The method.

Intent over syntax. Seven agents, gates and evidence.

Part 04

From legacy to .NET.

Archaeology, architecture, build, evolution, on CIBS.

Part 05

Surviving reality.

Data, coexistence, scope, decommissioning.

Part 00 opens with the executive summary and Part 06 closes with the decision; between them, the five technical parts below. Each part carries its own color through the deck. Press O at any time for the full overview, N for speaker notes, F for presenter view.

Part 00 · For the leadership team
00

A system that works
is not a system without risk.

Three slides for the people who decide. The situation in plain terms, the cost of waiting, and what we recommend. The technical chapters that follow prove every claim made here.

4The situation
5The cost of waiting
6What we propose
The situation

CIBS works. That is the problem.

Contoso National Bank runs on a core banking system that has performed flawlessly for three decades. Its reliability is not in question. What is in question is whether the bank can still change it, and for how much longer.

31years in production, since 1994, never a lost cent
4.7Maccounts and 2.3M customers depend on it every day
3COBOL developers who still know the core remain
2024the year the last DMSII database administrator retired

Read those last two numbers together. The system that runs the bank is understood by three people, and the person who understood its database has already left. The risk is not failure. The risk is that the knowledge walks out the door while the platform ages out of support.

The cost of waiting

Two risks compound every quarter you wait.

Doing nothing is a decision, and it has a price that rises over time. Two separate clocks are running, and they do not stop on their own.

Knowledge risk

The rules that run the bank live in COBOL written over thirty years, much of it undocumented. Every retirement takes some of that understanding with it. Once the last person who knows why a rule exists is gone, the rule becomes a fact nobody can safely change.

Platform risk

The Unisys ClearPath MCP environment is supported, but the talent pool shrinks every year and the hardware and licensing costs do not. The longer the core stays, the fewer people exist who can operate it and the more it costs to keep running.

And the rewrite is not the escape

The instinct is a big-bang rewrite, and that instinct is how core modernizations fail. Large rewrites of running systems have a long history of overrunning and being cancelled, because a clean cutover of a system this size is close to impossible and the undocumented rules surface only when something breaks. The answer is not a bigger rewrite. It is a smaller unit of change.

What we propose

Modernize one context, prove it to the cent, then scale.

A modernization that cannot fail catastrophically, because it never bets the whole system at once. Three principles make it safe, and the rest of this deck shows each one working on the real estate.

01 · Incremental

One bounded context at a time

Carve the core into domains and modernize one, end to end, before touching the next. The blast radius of any step is a single context, never the bank.

02 · Proven

Behavioral equivalence, to the cent

The modern code must reproduce the legacy result exactly on the same accounts, proven before anything is switched. A one-cent difference is a failure.

03 · Amplified

Seven agents on the specky pipeline

GitHub Copilot agents do the reading, specifying, and proving, enforced by a spec-driven pipeline. The veterans are amplified, not replaced.

The ask: CAP

Part 01 · The dilemma
I

A core that works perfectly
is not a comfort. It is the problem.

CIBS has run since 1994 without losing a cent. And it is the single largest risk on Contoso's technology balance sheet. This is the legacy dilemma.

8CIBS in numbers
9The working-legacy paradox
10Why big-bang rewrites fail
11Where the easy answers stall
12The reframe: extract, then build
CIBS in numbers

A success by every operational measure,
and a liability by every other one.

Contoso National Bank, a United States regional commercial bank founded in 1962. Its Core Information and Banking System, CIBS, in production since 1994. The scenario is fictional; the shape of the pressure is real.

31 yrs
in production. A Unisys ClearPath MCP core posting millions of transactions every night without complaint.
Since 1994
4.7M
accounts for 2.3 million customers. Demand deposit, savings and term deposit, all on one ledger.
Accounts under management
3
MCP COBOL developers still on staff who can safely change the system. The pool only shrinks.
People who understand it
2024
the year the DMSII and DASDL database administrator retired. The deepest data knowledge already left the building.
DBA retired

The system runs, but almost no one alive fully knows why it works. That gap, between a system that runs and a team that understands it, is the entire problem.

The working-legacy paradox

Risk in a legacy system is not
how often it breaks. It is who can change it.

A legacy system earns trust the slow way, by not failing. The instinct to leave it alone is correct, right up until the day it must change.

What you can measure

Operationally, CIBS looks stable.

  • 31 years of clean nightly runs.
  • Zero lost transactions on Eleanor Whitfield's savings since 1996.
  • Predictable batch windows, known throughput.
  • Conclusion drawn: "if it is not broken, do not fix it."
What stays invisible

Structurally, CIBS is fragile.

  • Three people can modify it safely, and the count falls.
  • Decades of business rules live in code and nowhere else.
  • One regulation change away from a forced, risky edit.
  • Reality: the stability is exactly what let the understanding decay.

A system that runs flawlessly but that only three people can touch is not stable. It is fragile in a way that stays invisible until the day it is not.

Why big-bang rewrites fail

The COBOL is not the specification.
It is the only surviving copy of one.

You cannot verify a rewrite of a system you never understood. If you do not know what the old program did in a rare case, you cannot confirm the new one does the same. You have traded one black box for another that merely looks modern.

The real reason

Decades of rules, regulatory tweaks and corner-case fixes live inside the code. A rewrite re-derives a design no one remembers, from code optimized to run, not to be read.

The evidence

Large all-at-once rewrites consistently overrun or fail outright. The root cause is almost always lost undocumented logic, not the code or data layer itself.

A face you will meet

A single undocumented constant, the Basis Factor, has shaped 16 years of interest. A faithful rewrite copies it perfectly, bug and all, and no one would know.

Where the easy answers stall

Two shortcuts look attractive
and solve the wrong problem.

Both are real and sometimes useful. Neither closes the gap between a system that runs and a team that understands it.

Shortcut 1

Lift-and-shift

Rehost the system as it is on cheaper or cloud infrastructure, unchanged. Valid, sometimes the right first move.

Stalls because: it changes where the system runs, not how well it is understood. The undocumented logic travels with it.

Shortcut 2

Naive AI rewrite

Point a code tool at the COBOL and ask for modern code. The output may even compile.

Stalls because: generated code for behavior you cannot specify is unverifiable, in exactly the corner cases that matter most in banking.

The third path

Recover, then build

Read and understand the legacy first. Extract rules into reviewable artifacts. Specify, build, and prove behavioral equivalence.

Works because: it operates on intent and structure, which every system has.

The hardest asset to migrate is not the code or the data. It is the knowledge in people's heads, and that is a clock, not a static risk.

The reframe

Invert the order of operations:
recover the meaning, then build against it.

Instead of rewriting and hoping the meaning survives, first recover it in a form a human can review and a machine can check. Only then build, in slices, never one risky leap.

Understand

Read the legacy

Extract business rules into explicit, reviewable artifacts. Catalog what you cannot explain.

Specify

Write the spec

A modern specification in EARS that a domain expert can confirm. Each rule traced to a requirement.

Build

Generate the code

Build against the spec. The portable COBOL core converts cleanly; the proprietary surface is re-platformed deliberately.

Prove

Equivalence test

Run legacy and modern on the same real accounts. The new behavior must match the old, to the cent.

The legacy keeps running the whole time. You replace it in slices, a pattern with a name: the Strangler Fig. This reframe is the spine of the agentic method, and it is why the method moves cleanly from a Natural and Adabas estate to a Unisys one. It operates on intent, not on the syntax of any one language.

Part 02 · The system
II

Inside a Unisys
ClearPath MCP system.

You cannot read a building's wiring without knowing the building. The mainframe is a city, your application is one building in it. This part draws that line, then shows that the COBOL inside is still COBOL.

14What a mainframe actually is
15The two ClearPath lineages
16The MCP environment
17The city and the building
18COBOL is still COBOL
21Reading the seam in INTCALC
What a mainframe actually is

A mainframe is built around three priorities
ordinary servers treat as afterthoughts.

These priorities explain why banks still run them, and why they feel unfamiliar. CIBS mirrors this shape exactly: an online side by day, a batch side by night, a database woven through both.

Priority 1

Extreme reliability

Uptime measured against decades, not quarters. The machine is engineered to never lose a transaction, and the bank's trust is built on that record.

Priority 2

High throughput

Huge volumes of transactions during the day, large batch jobs at night. CIBS accrues interest, posts fees and cuts statements for 4.7 million accounts each night.

Priority 3

Integrated database

The data store is a first-class citizen of the operating environment, not bolted on beside it. On MCP that database is DMSII, woven into the platform itself.

Hold that shape. Everything in CIBS, the daytime online path, the nightly batch, and the database between them, follows directly from these three priorities.

The two ClearPath lineages

"Unisys mainframe" is not one thing.
Confirming the lineage is the first scoping question.

The ClearPath family has two separate lineages that share neither operating system, database, nor language dialect. CIBS runs on Libra and MCP, the Burroughs descendant, and this playbook targets it throughout.

ClearPath Dorado · out of scope

Sperry and Univac 1100/2200 heritage.

OSOS 2200 DatabaseDMS 2200, RDMS 2200 BatchECL OnlineTIP

Mentioned only so you can recognize it. Its tooling substitutes for the MCP tooling at every turn.

ClearPath Libra · CIBS lives here

Burroughs A Series heritage.

OSMCP, the Master Control Program DatabaseDMSII, Enterprise Database Server BatchWFL OnlineCOMS

The more COBOL-centric line, with the most mature modernization paths, including published Azure reference architectures.

Both run COBOL, and the COBOL core is standard in both. Everything around it differs entirely. Scoping starts by confirming which line you are on.

The MCP environment

The system software is the city.
You read your application through it, you do not modernize it.

MCP is the operating system at the heart of the Libra line. Around it sits a set of system software you will meet in the CIBS estate. You need enough to recognize each one and know which modern capability it maps to.

MCP Master Control Program. The operating system itself, the ground everything stands on.
MARC Menu Assisted Resource Control. The operations interface operators drive the system from.
CANDE Command and Edit. Where source is created, edited and compiled. "Opening a program" meant opening it here.
DMSII The integrated database, Enterprise Database Server today. Its schema is written in DASDL. The data heart of the estate.
WFL Work Flow Language. Compiles programs, sequences jobs, runs the nightly streams. Comparable in role to JCL.
COMS Communications Management System. The online transaction monitor that routes a teller's request to the right program.
SDF · SDF Plus Screen Design Facility. Defines the forms and screens that tellers see at the terminal.
Output Manager Enterprise Output Manager. Handles printing and the distribution of output across the estate.

Four of these you read your application through: DMSII, WFL, COMS, and the compiler. They become a relational database, a job orchestrator, and REST endpoints in the modern target.

The city and the building

An application like CIBS is not one thing.
It is a set of artifacts the platform hosts.

A great deal of confusion in mainframe modernization comes from mistaking the city for the building. Draw the line clearly, and you know what is yours.

CIBS · this project
LogicCOBOL85 programs (INTCALC, POSTTRAN) Datathe DMSII database CIBSDB, in DASDL BatchWFL jobs, such as the nightly EODRUN OnlineCOMS windows and transactions ScreensSDF teller-facing forms
The platform · shared, not yours
OSMCP and its system software OpsMARC, CANDE, Enterprise Output Manager Tenantsloan origination, reporting, other apps

Your application is almost never the only one on the host. That fact is small now and decisive later: it is why you do not modernize "the whole MCP" at once.

Daytime · online
teller → SDF screen → COMS → COBOL → DMSII
Nighttime · batch
scheduler → WFL (EODRUN) → COBOL (INTCALC) → DMSII
Unisys COBOL is still COBOL

Standard COBOL wearing
a manufacturer-specific jacket.

The single most useful lens in the playbook. Unisys COBOL85 is based on the ANSI X3.23-1985 standard. What is proprietary is a finite, bounded set of couplings. Learn to see the seam.

Portable core · readable by anyone

Standard COBOL logic.

  • The four divisions, standard: Identification, Environment, Data, Procedure.
  • Data description, standard: PIC clauses, level numbers, level-88, COMP.
  • Procedural verbs, standard: MOVE, COMPUTE, IF, EVALUATE, PERFORM.
  • Fate: converts cleanly and mechanically to C#.
Proprietary surface · finite and known

Four couplings to Unisys products.

  • DMSII verbs to talk to the database.
  • COMS structures to converse with the monitor.
  • SDF constructs for the teller screens.
  • Fate: re-platformed deliberately, one known construct to one known target.

This makes reading faster, estimating more honest, and modernizing tractable. A developer who reads COBOL anywhere can read most of a CIBS program with no Unisys knowledge at all.

The CIBS estate, mapped

The city runs the building. You modernize the building.

One picture of the whole estate. The environment that schedules and connects the work, the database at the boundary, and the COBOL business logic that does what the bank actually does. Modernization moves the logic, replaces the boundary, and retires the city.

THE CITY · ENVIRONMENT
COMS
transaction environment
WFL
job control, nightly batch
MCP
the operating environment
THE BOUNDARY
DMSII the network database, described in DASDL. Structure that encodes meaning.
THE BUILDING · LOGIC
INTCALC
interest accrual
POSTTRAN
transaction posting
GLPOST
general ledger
STMTGEN
statements
CUSTMNT
customer master
ACCTMNT
account master

The proprietary surface is the city and the boundary: COMS, WFL, the MCP, and the DMSII access verbs. The portable core is the building: the arithmetic and control flow inside these COBOL programs. The seam between them is where the anti-corruption layer goes, and the Interest and Fees slice begins with INTCALC.

The proprietary surface

Four kinds of coupling,
each with one known modern target.

The surface is not an open-ended unknown. It is enumerable. You do not guess at it, you map it.

01 · DMSII

Database access

FIND, STORE, MODIFY, LOCK, transaction statements and their ON EXCEPTION handling. Conceptually embedded database access.

Target: relational access through an ORM.

02 · COMS

Online conversation

Headers, agendas and message areas the program uses to converse with the online transaction monitor.

Target: an API and application host.

03 · SDF

Teller screens

SDF and SDF Plus constructs for manipulating the forms and screens that tellers see.

Target: a web user interface.

04 · Compiler images

Build directives

Directives at the top of source, written with a leading dollar sign, that control how the program compiles. No standard COBOL equivalent.

Target: build configuration.

Add one environmental fact, not a syntax: data representation. The Burroughs heritage means EBCDIC encoding and a specific way COMP numerics map onto the machine. It rarely changes how you read the logic, but it matters enormously for fidelity when you migrate data and translate calculations.

Reading the seam

INTCALC: portable core in green, proprietary surface in yellow.

INTCALC.cbl · CIBS periodic interest accrual
$ SET LIST IDENTIFICATION DIVISION. PROGRAM-ID. INTCALC. * CIBS - PERIODIC INTEREST ACCRUAL - PROD SINCE 1994 DATA DIVISION. DATA-BASE SECTION. DB CIBS-DB = CIBSDB. WORKING-STORAGE SECTION. 01 WS-DAILY-RATE PIC S9V9(8) COMP. 01 WS-ACCRUED PIC S9(11)V99 COMP. 01 WS-BASIS-ADJ PIC S9V9(6) VALUE +0.083340. * *** ADJ PER MEMO - JRC 03/09 *** (no memo on file - do not remove) PROCEDURE DIVISION. ACCRUE-INTEREST. BEGIN-TRANSACTION RESTART-DST. FIND FIRST ACCT-BY-PRODUCT ON EXCEPTION GO TO DONE. COMPUTE WS-DAILY-RATE = PROD-APR / 365. COMPUTE WS-ACCRUED = ACCT-LEDGER-BAL * WS-DAILY-RATE * WS-PERIOD-DAYS. COMPUTE WS-ACCRUED = WS-ACCRUED * (1 + WS-BASIS-ADJ). MODIFY ACCT-ACCRUED-INT = ACCT-ACCRUED-INT + WS-ACCRUED ON EXCEPTION PERFORM LOG-DMS-ERROR. END-TRANSACTION RESTART-DST.

The yellow lines map to relational access in Parts IV and V. The green lines translate to C# almost line for line. The trap: WS-BASIS-ADJ sits in the portable core, trivial to translate, yet carries the heaviest semantic risk in the estate.

DMSII and DASDL

A network database,
not a relational one.

DMSII is the data heart of CIBS, its schema written in a language called DASDL. It does not map cleanly onto the relational model that modern tools assume, and knowing where it resists is half the migration.

DMSII · the network model

Pre-threaded structure.

  • Data sets are structures roughly like tables.
  • Sets and subsets are access paths, closer to indexes than to tables.
  • Embedded data sets nest one record inside another.
  • Variable-format records change shape by record type.
The relational target

Looked up on demand.

  • Data sets become tables.
  • Sets become indexes; navigation becomes set-based queries.
  • Embedded data sets become child tables.
  • Variable-format records become table-per-type.

A filing cabinet whose folders are pre-threaded together with physical cross-reference strings, versus a spreadsheet that looks relationships up on demand. The DMSII audit trail becomes the bridge during coexistence, in Part 05.

WFL and COMS

Two worlds in one estate:
the night shift and the switchboard.

Batch and online are the two ways work reaches a COBOL program on MCP. They are different worlds, and the modern target splits them into two clean responsibilities.

WFL · the night-shift run sheet

Work Flow Language

Compiles programs, sequences jobs, and runs the nightly streams. Its role is comparable to JCL on other mainframes. The CIBS end-of-day stream is EODRUN: it runs the COBOL programs in order, including the interest accrual program INTCALC, each reading and updating DMSII. No teller is involved; the bank's books are being closed.

Modern target: an orchestrated job pipeline.
COMS · the daytime switchboard

Communications Management System

The online transaction monitor. A teller submits a request through an SDF screen, COMS receives it and routes it to the right COBOL program, which reads or updates DMSII and sends a response back. This is the path POSTTRAN takes. COMS manages the message flow through headers and agendas.

Modern target: REST endpoints behind an app host.

WFL is the night-shift run sheet. COMS is the switchboard for daytime calls. Holding the two apart is what lets you modernize each into the right modern shape.

Part 03 · The method
III

Modernize, do not rehost.
Intent over syntax.

The method operates on intent and structure, which every system has, not on the syntax of any one language. That is why it moves from a Natural and Adabas estate to a Unisys one unchanged.

25Three modernization tiers
26The seven-agent pipeline
27The specification as the unit of work
28Specky, the SDD engine
29The 10-phase enforced pipeline
30Specky for modernization
Three modernization tiers

Three tiers, one spectrum.
Only one recovers meaning.

Translating a novel versus reprinting it in a new font. All three are valid in their place, and a real estate uses a mix. The question is which one each workload deserves.

Tier 1

Rehost

Lift and shift onto cheaper or virtualized infrastructure, unchanged. The fastest move, lowest risk to behavior.

Changes where it runs. The undocumented logic travels with it untouched.

Tier 2

Convert

Automated COBOL-to-C# translation, such as the Avanade AMT path. The portable core converts mechanically.

Changes the language. Stops where domain redesign begins, the rules are still implicit.

Tier 3 · this talk

Modernize

Recover the rules, redesign into a modern architecture, and prove equivalence. Intent and structure as the unit of work.

Changes how well it is understood. The only tier that recovers meaning.

Where automated conversion stops, domain redesign begins. CIBS is the strategic core, so it deserves Tier 3. Other workloads on the Contoso host may rightly stay at Tier 1, a scoping decision in Part 05.

The seven-agent pipeline

Seven agents, one discipline.
You orchestrate. Three human gates punctuate the flow. Each agent refuses to start before the last one signs off.

Four agents do the core moves; three more harden the highest-risk steps: a specifier that makes the rules explicit, a critic that attacks the plan, and a verifier that proves equivalence. Model routing matches the work: deep reasoning for discovery, design, and critique, fast iteration for build.

1 · Discovery · Opus · read-only

@archaeologist

Reads COBOL85, DMSII and DASDL, WFL and COMS. Surfaces the business rules and the scars, including the Basis Factor.

Gate: discovery report.

2 · Specification · Sonnet

@specifier

Turns discovered behavior into an explicit EARS spec with an equivalence target, before any code exists.

Human gate 1: spec reviewed.

3 · Design · Opus

@architect

Carves bounded contexts, designs the modular monolith and the anti-corruption layer, records ADRs.

Gate: design drafted.

4 · Adversarial · Opus · read-only

@critic

Attacks the spec and the design. Demands the proof on risky retirements, cites INC-001 on the Basis Factor.

Human gate 2: design approved.

5 · Implementation · Haiku

@builder

Generates the .NET 8 code from the approved spec. Fast and cheap; the thinking already happened upstream.

Gate: builds and unit-tests pass.

6 · Equivalence · Sonnet

@verifier

Proves the modern code matches the legacy to the cent. Eleanor accrues 16.63 on both sides.

Human gate 3: increment accepted.

7 · Iteration · Sonnet

@evolution

Captures lessons, runs coexistence with the Strangler Fig and the DMSII audit trail, prepares the next context.

Gate: reconciliation holds.

The three additions are not overhead. The specifier makes the rules explicit so nothing is lost, the critic catches what one model misses, and the verifier proves equivalence. AI amplifies the COBOL and DMSII veterans, it does not replace them.

Spec-Driven Development

The specification becomes the unit of work.
Code is the consequence, not the starting point.

An executable spec instead of a verbal instruction. The agent executes what is written, not what you imagined. The spec is the handoff artifact between stages.

No spec

Vague request

"Modernize the interest module."

+ context

Scoped request

"Reimplement INTCALC's accrual for DDA, SAV and TD."

+ EARS spec

Auditable spec

Formal requirements, acceptance criteria, test contracts, ADRs, each traced to a legacy rule.

+ pipeline

Executable spec

The seven agents and their gates. The spec drives execution end to end.

EARS · Easy Approach to Requirements Syntax

REQ-CALC-002: When interest is accrued,
the system shall apply the rate from a
versioned, auditable rate-parameter table.

REQ-CALC-003: The system shall retire the
Basis Factor literal and record every
rate change with an effective date.

Why this changes the game

  • A spec is versionable in git, testable, and peer-reviewable.
  • Multiple agents read the same spec, coordination without a meeting.
  • Each commit points to the requirement it satisfies; auditing becomes trivial.
  • Regulatory traceability stops being overhead and becomes part of the flow.
The SDD engine

Specky makes the spec enforceable.
The discipline stops being a hope and becomes a pipeline.

Spec-driven development is a good idea that most teams cannot keep. Specky is the tool that enforces it: a CLI toolkit that installs into GitHub Copilot and turns the method into a state machine the AI cannot shortcut.

13specialized agents, from orchestrator to spec engineer to quality reviewer
58MCP tools that validate, generate and enforce every phase
10mandatory pipeline phases, with a state machine that blocks skipping
16hooks that run outside the model for deterministic enforcement
Built on Spec-Kit

Spec-Kit is the open methodology: EARS notation, the gated pipeline, the constitution model. Specky reimplements it as enforceable MCP tools, so the same discipline a human could follow by hand is now checked programmatically, requirement by requirement. Repository: github.com/paulasilvatech/specky.

The AI is the operator. Specky is the engine. The model's reasoning is channeled through a validated pipeline instead of producing unstructured guesswork.

The enforced pipeline

Ten phases. No skipping.
Three LGTM gates are the three human gates.

The state machine blocks phase-skipping: you cannot jump from Init to Design without completing Specify. At three points the pipeline pauses for a human to reply LGTM. These are the same three gates the seven-agent method already places.

01Init. Constitution, scope, codebase scan.
02Discover. Seven structured questions. Stakeholders and constraints surface.
03Specify. EARS requirements with acceptance criteria. LGTM gate.
04Clarify. Ambiguities resolved, decision tree generated.
05Design. Architecture, data model, API contracts. LGTM gate.
06Tasks. Implementation breakdown, dependency graph. LGTM gate.
07Analyze. Cross-artifact analysis, quality checklist, compliance check.
08Implement. Ordered execution with checkpoints per story.
09Verify. Drift detection, phantom-task detection.
10Release. PR generation, work-item export, documentation.

Every phase produces a traceable artifact. The requirement at Specify maps to the design, to the task, to the test, to the code. Nothing is orphaned, and the audit trail writes itself.

Specky for modernization

The same pipeline, pointed at a mainframe.
Specky runs the exact CIBS story.

Specky has a modernization path built in, and it maps one to one onto the journey this deck describes. The seven cognitive agents do the thinking; specky enforces the phases and produces the artifacts.

01Scan the legacy. sdd_scan_codebase maps the CIBS COBOL85, the DMSII structure, the WFL and COMS surface. This is @archaeologist's ground.
02Import what exists. sdd_batch_import ingests the recovered runbooks and the operations manual; sdd_batch_transcripts ingests the stakeholder meetings.
03Specify the rule. sdd_write_spec turns the Basis Factor into REQ-CALC-002 in EARS, with the equivalence target attached.
04Check compliance. sdd_compliance_check validates against the frameworks the bank answers to, before a line is migrated.
05Generate migration artifacts. sdd_implement, sdd_generate_iac and sdd_generate_runbook produce the plan, the infrastructure and the rollback runbook.

This is why the method is not a slide-ware idea. From the COBOL scan to the pull request, every step is a tool call with a gate, an artifact and a trace back to the legacy rule.

Part 04 · From legacy to .NET
IV

The seven agents,
running over CIBS.

Live, on the real estate. Read the rules, catalog the mystery, carve the contexts, translate the code, and prove it ties out to the cent before anything ships.

33@archaeologist reads INTCALC
34The Basis Factor, MYS-003
36@architect carves the contexts
39From DASDL to relational
40@builder proves equivalence
42@evolution runs coexistence
Roles meet phases

Seven roles are how you think.
Ten phases are how specky enforces it.

Before the demos, one map. The seven agents are the cognitive roles, the way a team divides the thinking. Specky's ten phases are the enforced steps. Each role does its work inside specific phases, so the demos you are about to see are not loose; every one of them lands on this pipeline.

@archaeologistDiscovery→  Init · Discover
@specifierSpecification→  Specify · Clarify
@architectDesign→  Design · Tasks
@criticAdversarial→  Analyze
@builderImplementation→  Implement
@verifierEquivalence→  Verify
@evolutionIteration→  Release

The three LGTM gates fall at Specify, Design, and Tasks, exactly between the roles: the spec is reviewed before the architect designs, the design is approved before the builder builds. The agents do the work; specky decides when a human has to look.

Demo · @archaeologist

Archaeology: reading a real COBOL85 program.

GitHub Copilot CLI
$ copilot --agent=archaeologist --model claude-opus-4.8 \ --prompt "Map the CIBS legacy in ./legacy and extract the rules from INTCALC.cbl" Reading ./legacy ... 6 DASDL data sets, 9 COBOL85 programs (.cbl), 1 WFL stream INTCALC.cbl (periodic interest accrual · prod since 1994 · 11 amendments) ├─ reads CUSTOMER + ACCOUNT via DMSII set ACCT-BY-PRODUCT ├─ Hidden rule: WS-BASIS-ADJ VALUE +0.083340 → ~8.3% uplift, no basis ⚠ ├─ Account types: DDA=demand SAV=savings TD=term deposit └─ applied to every accrued-interest run since ~2009 (comment "JRC 03/09") Source comment cites a memo: no memo on file (DMSII and DASDL DBA retired 2024) ✓ 23 business rules extracted · 4 documented nowhere ✓ Output: legacy-map.md, business-rules.md, mysteries.md

The agent finds what the documentation does not have. The Basis Factor is in no manual, and read-only archaeology surfaces it as a first-class finding before anyone proposes a change.

The Basis Factor · MYS-003

A mystery is a finding, not a failure.

The signature symbol of undocumented legacy risk. The team is afraid to remove it. The discipline is to trace it fully before you ever cut it, then retire it safely.

+0.083340
WS-BASIS-ADJ · hardcoded in INTCALC
~8.3%
flat uplift on
accrued interest
16 yrs
on every interest-
bearing account
What we know

A one-line comment dates it to ~2009 and cites a memo nobody can find. No regulatory basis, no documented business reason. It has quietly shaped interest for 16 years.

The resolution path

REQ-CALC-002 retires the buried literal into a versioned, auditable rate-parameter table. The behavior is preserved exactly, then made visible, dated, and reviewable.

The unlabeled wire in an old fuse box. You trace it fully before you cut it. Cataloguing the mystery, rather than guessing past it, is exactly why archaeology is a stage of its own.

Demo · @specifier

Specification: the mystery becomes a requirement.

GitHub Copilot CLI
$ copilot --agent=specifier --model claude-sonnet-4.6 \ --prompt "Turn MYS-003 (the Basis Factor) into an EARS requirement with an equivalence target" Reading mysteries.md ... MYS-003: WS-BASIS-ADJ +0.083340, hardcoded, undocumented Tracing the rule in INTCALC.cbl ... applied when ACCT-BASIS-FLAG = "Y" Writing requirement REQ-CALC-002: WHEN interest is accrued for a basis-flagged account, the system SHALL apply the uplift from a versioned, dated, owned rate parameter source_legacy: INTCALC.cbl 5300-APPLY-BASIS ● Equivalence target attached: Eleanor (0047118003) must accrue 16.63 on both sides ● Known: ~8.3% uplift since ~2009. Unknown: the origin worksheet (not in file) ⚠ ✓ Requirement written, traceable BR → MYS-003 → REQ-CALC-002 ✓ Output: requirements.md (ready for human gate 1)

Before any code is written, the Basis Factor stops being a line of code and becomes REQ-CALC-002, an explicit requirement with an equivalence target a human can inspect and approve. This is the trust boundary between what was understood and what will be built.

Demo · @architect

Spec and architecture from the extracted rules.

GitHub Copilot CLI
$ copilot --agent=architect --model claude-opus-4.8 \ --prompt "From business-rules.md propose bounded contexts and EARS specs" Reading business-rules.md (23 rules) + 6 DASDL data sets Proposed bounded contexts: ├─ Customer CUSTOMER · 2.3M customers ├─ Accounts ACCOUNT · 4.7M · DDA / SAV / TD ├─ Interest & Fees INTCALC · Basis Factor (MYS-003) └─ Posting · General Ledger · Statements EARS spec generated: "WHEN interest is accrued THE SYSTEM SHALL apply the rate from a versioned table" ADR-001: Modular Monolith (not microservices) → 1 deploy · 6 modules ADR-002: DMSII access mapped to an ORM with structured exceptions ✓ requirements.md (EARS) + architecture.md + ADR-001 + ADR-002

From the extracted rule to a testable spec and a recorded architecture. The Basis Factor stops being a buried literal and becomes a named requirement, REQ-CALC-002, that a domain expert can review.

Demo · @critic

Adversarial review: try to break it before trusting it.

GitHub Copilot CLI
$ copilot --agent=critic --model claude-opus-4.8 \ --prompt "Try to break the spec and the design before we trust them" Reading requirements.md + design ADRs + the legacy they claim to preserve Challenging REQ-CALC-002 (retire the Basis Factor): ├─ Objection: removal was tried in 2014 and broke reconciliation overnight (INC-001) ├─ Demand: prove equivalence to the cent BEFORE the literal is retired └─ Risk if wrong: every interest-bearing account, every nightly run Challenging ADR-001 (modular monolith): consistent with a core ledger ✓ Cross-checking the six contexts against the extracted rules ... no gap found ● 1 blocking objection: REQ-CALC-002 needs the verifier proof attached ✓ Refutation list returned to @architect / @specifier (iterate to convergence) ✓ Output: critique.md (for human gate 2)

Every model has blind spots. The critic attacks the spec and the design, and on the Basis Factor it does the one thing that matters: it cites INC-001 and refuses to retire the literal until the equivalence proof exists. It runs on a different model so its blind spots are not the architect's.

The six bounded contexts

A banking core, carved into
six contexts that own their own rules and data.

Domain-driven design on a core ledger. Each context owns a clear slice of the domain. A modular monolith, not microservices: one deploy, six modules, clean internal boundaries.

Customer Identity and relationships. 2.3M customers, including Eleanor M. Whitfield, customer since 1996.
Accounts Demand deposit, savings and term deposit. 4.7M accounts, balances and product attributes.
Interest & Fees Accrual and fee posting. Home of INTCALC and of the retired Basis Factor, now a versioned rate table.
Posting The transaction engine. Applies debits and credits to accounts with consistency guarantees.
General Ledger The books of record. Every posting reconciles into the ledger that the bank closes each night.
Statements Customer-facing output. Periodic statements cut from balances, postings and accrued interest.

Drawing municipal district lines so each service owns its own streets. The boundaries come from the rules the archaeologist extracted, not from the legacy program structure, which is exactly how you avoid the distributed-monolith trap.

From DASDL to relational

Four hard mappings,
and one rule: lose nothing.

The CIBSDB schema does not map one-to-one onto tables. Four structures need deliberate handling, and numeric fidelity is non-negotiable in a ledger.

01

Data sets → tables

The direct case. Each DMSII data set becomes a relational table with typed columns and a primary key.

02

Embedded → child tables

An embedded data set, a record nested inside another, becomes a child table with a foreign key to its parent.

03

Sets → indexes

DMSII sets and subsets are access paths. They become indexes, and pointer navigation becomes set-based queries.

04

Variable → table-per-type

Variable-format records that change shape by record type are split into a table per type, preserving every variant.

Fidelity. COMP numerics and EBCDIC encoding must carry over exactly. Eleanor's balance and accrued interest are computed and stored so that the legacy and modern systems agree to the cent. Rebuilding a hand-threaded filing system as indexed tables, without losing a single cross-reference.

Demo · @builder

Reconstruction: code generated, proven against the legacy.

GitHub Copilot CLI
$ copilot --agent=builder --model claude-sonnet-4.6 \ --prompt "Implement the Interest Accrual module from requirements.md" Generating module (.NET 8 + C#) ├─ Account.cs, RateParameter.cs (EF Core, mapped from DASDL) ├─ InterestAccrualService.cs (DDA / SAV / TD + versioned rate table) └─ InterestAccrualEquivalenceTest.cs (legacy vs modern, same accounts) dotnet test ... ✗ 1 failing: rate not read from RateParameter (Basis Factor) Fixing InterestAccrualService.cs ... dotnet test ... ✓ equivalence holds, ties to the cent ✓ Interest Accrual module implemented · Eleanor M. Whitfield (0047-118-3) matches

Code generated from the spec, looping with the tests until the equivalence test passes. The old and new calculator must agree, to the cent, on the same receipt. The Basis Factor becomes a test, not a production surprise.

Demo · @verifier

Equivalence: proven to the cent, or it does not ship.

GitHub Copilot CLI
$ copilot --agent=verifier --model claude-sonnet-4.6 \ --prompt "Prove the modern interest service matches the legacy to the cent" Building fixtures from the anchor case + edge cases Running legacy logic and modern logic on the same inputs ... ┌─ Eleanor M. Whitfield · 0047118003 · SAV · ledger 6670.00 · APR 2.80% · 30d · basis Y ├─ legacy (INTCALC, hardcoded +0.083340) = 16.63 ├─ modern (versioned rate parameter) = 16.63 └─ diff = 0.00 → PASS Edge: no-basis path (flag N) → legacy 15.35 · modern 15.35 · PASS Edge: leap-year Feb, minimum balance, TD penalty accrual ... all PASS ✓ Equivalence holds to the cent. The literal can be retired safely (REQ-CALC-002) ✓ Output: equivalence-report.md (for human gate 3)

Behavioral equivalence is the heart of the method, and the verifier owns it. The modern service must reproduce the legacy result to the cent on the same accounts. Eleanor accrues the identical 16.63 on both sides, the edge cases hold, and only then can the literal be retired.

Demo · @evolution

Evolution: the new slice beside the legacy.

GitHub Copilot CLI
$ copilot --agent=evolution --model claude-haiku-4.5 \ --prompt "Prepare coexistence of the new module with the CIBS legacy" Strategy: Strangler Fig (legacy and new side by side) ├─ Route interest accrual to the new .NET module ├─ Keep EODRUN.wfl (end-of-day batch) on the legacy for now └─ Reconcile daily via the DMSII audit trail (POSTTRAN) Generating Databridge feed + change-data-capture pipeline (Azure Data Factory · PostgreSQL) Equivalence replayed at volume: 4.7M accounts, 0 drift ✓ Interest-accrual slice ready to run beside the legacy ✓ 0 big bang · rollback via feature flag

No big bang. Scaffolding a building while the tenants keep living in it, with both floors always in sync. The DMSII audit trail and a change-data-capture feed keep the legacy and modern systems consistent through coexistence.

Part 05 · Surviving reality
V

What decides whether
the project survives reality.

A clean .NET build is not the finish line. Data migration, coexistence, honest scope, and a decommissioning path are what carry a real bank project from a working slice to a retired mainframe.

44Data migration and coexistence
45Scope and decommissioning
Data migration and coexistence

Two workstreams,
and both floors always in sync.

What decides whether a real bank project survives contact with reality. Schema modernization and data migration are distinct, and coexistence keeps the legacy and modern systems consistent the whole time.

Workstream 1 · schema modernization

Reshape the model.

Derive the relational model from DASDL: data sets to tables, embedded to child tables, sets to indexes, variable-format to table-per-type. This is design work, done once, reviewed in ADRs.

Workstream 2 · data migration

Move the data, keep it live.

Databridge and the DMSII audit trail feed a change-data-capture pipeline, for example Azure Data Factory. The legacy keeps writing; the modern store stays current. Validate equivalence at full volume, not on a sample.

Source of truth
The DMSII audit trail, the same log that already records every legacy change.
Pipeline
Change data capture into PostgreSQL, Azure SQL as the stated alternative.
Proof
Equivalence replayed across 4.7M accounts, reconciled to zero drift.

Scaffolding a building while the tenants keep living in it. Coexistence is not a phase to rush; it is the safety mechanism that lets you replace the core without a single risky leap.

Scope and decommissioning

Scope honestly:
the mainframe is the last thing you switch off, not the first.

CIBS is the strategic core inside a larger Contoso MCP estate. You do not modernize the whole host at once. You place each workload on the right tier and sequence the portfolio.

Deep-modernize

The strategic core

CIBS. Recover rules, redesign, prove equivalence. Where the differentiating value and the worst undocumented risk live.

Re-platform

Stable, non-differentiating

Rehost or convert workloads that work and rarely change. Move them off the platform without a full redesign.

Retain

For now

Some workloads stay on MCP until their slice is ready. The host keeps serving the tenants you have not moved yet.

Decommission

Last

Only when the final workload has a proven replacement does the mainframe switch off. The end state, not the opening move.

Renovating one strategic building while the rest of the block stays occupied and serviced. Treating "the mainframe" as synonymous with "my application" leads to wildly wrong scope. The application estate and the whole MCP environment are two different things, and only one of them is your project this year.

The modernization in waves

Sequence by risk and value. One wave proves the next.

The portfolio is sequenced, not attempted at once. Each wave is chosen so that the riskiest, highest-value knowledge is captured first, and every wave reuses the pattern the previous one proved.

Wave 1 · prove the pattern

Interest and Fees

The context that holds the Basis Factor. Highest knowledge risk, clearest equivalence target, bounded scope. Proving Eleanor's 16.63 here proves the whole method.

Wave 2 · scale the pattern

Posting and Statements

High volume, well understood, and downstream of interest. With the pattern proven, these scale the approach and build the team's fluency with it.

Wave 3 · the core of record

Customer, Accounts, General Ledger

The system of record, modernized last because it is the most connected and the least urgent to change. By now the anti-corruption layer and the coexistence pattern are routine.

And what stays, for now

Some workloads on the Contoso host, the rarely-changed regulatory reports and the loan origination module, may rightly stay where they are at a lower tier. Modernization is not a mandate to move everything; it is a discipline for moving what matters, in order.

Part 06 · The decision
VI

From one proven slice
to a modern core.

The method is proven on the page. What remains is a decision: where to start, what it takes, and what we need from you to begin.

48The recommendation
49What it takes, what you get
50The ask
The recommendation

Start where the risk and the value meet.

The first slice is not chosen for ease. It is chosen because it retires the most dangerous knowledge risk while being small enough to prove completely.

01Begin with Interest and Fees. It is the context that holds the Basis Factor, the undocumented rule that nearly broke reconciliation once before. It is where the knowledge risk is highest and the equivalence target is clearest.
02Prove equivalence to the cent. The modern interest service must produce the same result as INTCALC on the same accounts. Eleanor accrues 16.63 on both sides, the edge cases tie, and only then does the slice ship.
03Then scale wave by wave. With the pattern proven and the anti-corruption layer in place, each following context reuses the same pipeline, the same gates, and the same definition of done.

This sequence means the bank is never exposed to a big-bang cutover, and the hardest-to-recover knowledge is captured as an explicit, tested specification first.

What it takes, what you get

A wave is a quarter of work, not a multi-year program.

The figures below describe the shape of the investment, not a quote. They are the kind of commitment a single bounded context requires, sized to be approved and delivered inside a normal planning cycle.

What it takes

A small team pairing the COBOL and DMSII veterans with .NET engineers, the GitHub Copilot and specky pipeline, and a quarter per context. The veterans are essential, not optional; the agents amplify them and capture what they know as specifications.

What you get

For each wave: a context retired from the mainframe, its rules captured as tested specifications, the platform and licensing cost for that workload removed, and an audit trail that proves the modern behavior matches the legacy to the cent.

The return compounds. The first wave is the most expensive because it builds the pattern, the anti-corruption layer, and the team's fluency. Every wave after reuses all three.

The ask

Three decisions, and we start.

Nothing here requires betting the bank. It requires committing to a first slice and to the discipline that makes it safe.

01Approve the first bounded context. Authorize the Interest and Fees slice as the proving ground, with the veterans assigned to it.
02Stand up the pipeline on the estate. Install the specky pipeline and the seven-agent kit against a read-only copy of CIBS, so discovery can begin without touching production.
03Adopt equivalence as the definition of done. Make to-the-cent behavioral equivalence the gate every slice must pass before it ships. This is the single rule that keeps the modernization safe.

Approve these three and the first discovery run can start this quarter. The deck you have just seen is the method; this is the beginning of the work.

paulasilva

Modernization is not big bang.
It is archaeology, then a build you can prove.

Recover the intent, specify it, build against it, and tie out to the cent. The platform changes; the discipline does not.

Paula Silva | AI-Native Software Engineer
linkedin.com/in/paulanunes
Backup · Objections 1/3

Can you trust AI with a bank's rules?

“Won't the AI hallucinate business rules?”
The pipeline is built so a hallucination cannot survive. The archaeologist is read-only and cites file and line for every rule. The specifier turns each rule into an explicit EARS requirement a human reviews at the first gate. And nothing ships without to-the-cent equivalence on real accounts: an invented rule produces a wrong number and fails the verifier.
“Bank source code inside an AI model?”
Discovery runs against a read-only copy of the estate, inside the bank's GitHub Copilot enterprise tenancy and its data controls. The artifacts, specs, ADRs and tests, live in the bank's own repository. The trail of who read what, and when, is part of the pipeline itself.

The honest answer to both questions is the same: do not trust the model, trust the gates and the proof.

Backup · Objections 2/3

Will it hold up, and what does it cost?

“Can .NET close the books for 4.7M accounts inside the batch window?”
The nightly close becomes an orchestrated pipeline that scales horizontally, and the claim is never taken on faith: during coexistence the modern side runs the full volume beside the legacy, the window is measured, and cutover waits until the numbers hold. If they do not, the legacy keeps closing the books and nothing was risked.
“What does a wave actually cost?”
A small team pairing the veterans with .NET engineers, for one quarter per context. The agent pipeline is a small fraction of the team cost. The first wave carries the one-time cost of the pattern and the anti-corruption layer; every wave after reuses both, so the unit cost falls.

Performance and cost are measured per wave, before cutover, never promised on a slide.

Backup · Objections 3/3

Why this path, and why now?

“Why not the automated conversion tools (Tier 2)?”
They are real and useful for the portable core, and the method uses conversion where it fits. But conversion stops where domain redesign begins: the rules stay implicit. A faithful converter copies the Basis Factor perfectly, bug and all, and no one ever knows. Tier 2 changes the language; only Tier 3 recovers the meaning.
“Why not wait for better AI?”
Because the two clocks do not wait. Every quarter the knowledge is scarcer and the platform costs more, and INC-001 already showed what an uninformed change does. The method captures the veterans' knowledge as tested specifications now, while they are still in the building. Better models will make future waves cheaper; they cannot recover knowledge that has already walked out.

Waiting is not neutral. It is the most expensive option on the table, paid invisibly.

1 / 24
navegar  ·  O overview  ·  N notas  ·  F apresentador
Core Banking Modernization · 54 slides
clique para ir · ESC para fechar
NOTAS DO APRESENTADOR N fecha  ·  F abre o apresentador
Agentic DevOps Hub
PDF
ENESPT