Skip to content

mainframe exit

Mainframe modernization: COBOL and AS/400 to Go, Rust and TypeScript

COBOL programs, JCL job graphs, CICS screens, VSAM files and DB2 tables become Go services, an ordinary scheduler, a web client and Postgres. Copybooks turn into typed structures, packed decimal stays decimal, and every job is compared against your production output to the cent before it takes over. AS/400 as well: RPG, CL, DDS-described files and 5250 screens. Thirty days for a full exit, and the first job stream moves inside a week.

Get a quoteFour screens about the machine, the job streams and the date. The reply comes from an engineer who reads COBOL.

30 days for a full exit; the first job stream moves in 7


The green screens go last, and the replacement stays keyboard-first: operators are faster on a keyboard than on a mouse, and a migration that slows them down fails at the desk.

On z/OS

JCL job graph, COBOL programs, 3270 screens, VSAM and DB2 underneath.

  • BATCH.JCLJCL
  • PAYCALCCOBOL
  • CICS screens3270
  • VSAM filesflat
  • DB2z/OS

Off it

Go services on an ordinary scheduler, Postgres, a web client operators can type through.

  • batch runnerGo · cron
  • paymentsGo
  • web clientTypeScript
  • postgresfrom VSAM + DB2

30 days for a full exit; the first job stream moves in 7

The green screens go last, and the replacement stays keyboard-first: operators are faster on a keyboard than on a mouse, and a migration that slows them down fails at the desk.

How the work goes

One job stream at a time, run in parallel with yours, compared record by record.
  1. 01days 1–5

    Inventory the job graph

    Every JCL step, every dataset, every program it calls, as a graph. Also the parts nobody mentions at kickoff: the FTP job at 3am, the utility only one person can restart.

  2. 02days 4–12

    Move the data model

    Copybooks become typed structures, VSAM and DB2 become Postgres tables. EBCDIC, packed decimal and REDEFINES get dealt with here instead of being discovered in the last week.

  3. 035–9 days per stream

    Port one stream, run both

    The new stream runs the same inputs on the same night and the output is compared record by record. It takes over when the differences are zero, or written down and agreed.

  4. 04per subsystem

    Retire the region

    CICS transactions move to the web client, the LPAR shrinks, and the MIPS and licence line finally goes down. This is the part your CFO was asking about.

What the platform does, what a person does

Parsing forty years of COBOL is machine work and the platform does it in days. Knowing which of those programs still matters is why our engineers sit with yours.
The comparison run decides whether a stream is ready. Nobody on either side gets to overrule it with an opinion.
What the platform does, what a person doesWho does itNotes
Parsing COBOL, JCL and copybooksPlatformDialect quirks included, and the copybook that is included eleven times with different REDEFINES.
Working out which programs are still aliveBothJob logs answer most of it. The rest needs somebody who remembers 2004.
Translating a programPlatformReviewed as a pull request, and rewritten by hand where the machine output reads like translated COBOL.
Fixed-point arithmeticPlatformDecimal stays decimal. A drift of one cent shows up in the comparison run and fails it.
Operator screensEngineerDesigned with the people who use them, keyboard-first, timed against how fast they were on 3270.
Batch window and cutoverEngineerWhich night, who is on call, and what the rollback looks like at 4am.
The conversation with your licence vendorEngineerTiming the exit against contract dates is worth real money and nobody automates it.

Who is doing the work

A team of engineers who read COBOL and RPG for a living, with dozens of migrations and more than ten years on machines like yours: z/OS and AS/400, JCL batch and CICS transactions, VSAM, DB2 and IMS, copybooks with eleven REDEFINES, packed decimal that has to land on the cent. Your COBOL people will be talking to engineers who read the same code they do.


One job stream is the test we suggest, and we scope it that way: ported, run against your own production inputs for a few cycles, with the record-level diff on the table. You judge a comparison report on your own data rather than our marketing.

Questions we get from engineers

Why Go rather than Java?
Because a batch job that starts in milliseconds and ships as a single static binary is easier to schedule and to reason about at 3am. If your platform team is standardised on Java, we write Java, and nothing about the method changes.
What happens to our COBOL people?
They become the most valuable people on the project. Every migration stalls on a rule nobody wrote down, and they are the only ones who know it. In the plans we write, they move from maintenance to adjudication.
Will the numbers match exactly?
That is the acceptance criterion rather than an aspiration. COMP-3 fields become fixed-point decimal, never floating point, and the comparison run fails on a one-cent difference. Where a difference is legitimate, it gets written down and signed off before the stream switches.
How long do we run both systems?
Until the comparison is clean, which for most streams means one to three cycles. For a month-end job we replay the month you already recorded rather than wait for the next one, so a quarterly close does not add a quarter to the project.
Do you do AS/400 as well?
Yes: RPG and CL, DDS-described files, green screens over 5250. The mechanics match z/OS and the timeline is usually shorter, because the job graph is simpler and the boxes are smaller.

Start with one job stream

What it does, when it runs, and what breaks downstream if it finishes late. That is enough for us to come back with a scope, a duration and a price for moving it.

Get a quote

The form asks about job streams and the batch window, so it helps to have the scheduler open.