Modernization track · Flagship · self-paced ~42h with labs (7 days as a cohort) · prerequisite: CS510 (or demonstrated Java) and CS120; CS130, CS140 and CS150 helpful — the course explains the VSAM, DB2 and CICS it needs
Take a real mainframe application — AWS CardDemo: 18 batch programs and their JCL, 17 CICS/BMS screens, 2 DB2 screens, VSAM and DB2 data — through a refactor-pattern modernization in six waves: data to PostgreSQL, batch to Spring Batch, online to Spring Boot REST and a thin web UI, every wave proven equivalent against the original running on SteelFrame through goldens, masks and a rules file of declared differences, under Git and CI, with Testcontainers and golden-file tests, deployed as a container. 60 short videos (about 7h40m), side by side the whole way: the 3270 screen and the web page showing the same account, the JES spool and the Spring Batch log showing the same totals. Every lesson refers back to the AWS CardDemo application running live on SteelFrame — its COBOL source, batch jobs, CICS screens and VSAM/DB2 data — and every lab starts on the mainframe side: you run the legacy program under your own user to produce the golden, then make the Java match it.
Self-paced available Cohort
Open for enrollment now. The lesson videos for this course are in production — release order across the track: CS510 → CS520 → CS530 → CS521 → CS535 → CS500 → CS550 → CS525 → CS540 → CS545 — and every session below is published as its lessons and lab now and marked Coming soon until its videos are released. CS520 is second in the release order, after CS510.
Plans: Free individual at no cost, or Paid individual at $349 per course, one-time — code review, extra exercises, grading and priority support.
Every session ends in a lab on your own environment. Labs are machine-checked against expected outputs — you and your L&D team always know exactly where you stand.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. What "modernization engineer" means in the postings and in this course, with the six-wave plan; CardDemo as it runs — sign-on, account view and transaction add on 3270, the nightly chain POSTTRAN → INTCALC → TRANREPT → CREASTMT → TRANBKP in SDSF, the clusters in LISTCAT and the DB2 tables in SPUFI, the Control-M and CA-7 definitions in sched_list; the target architecture drawn from the inventory; refactor not rewrite — behaviour first, improvement second, the suite decides.
LAB Wave 0: seed your private CardDemo copies with CDSEED, run the chain under your HLQ, capture goldens with run_capture and export_state, clone the Java skeleton and build it green; four capture ids and eight export checksums under your userid.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. The verdicts — identical, equivalent, different, missing — and the rules file with declared differences that have an owner and an expiry; goldens from the oracle (run_capture for batch, export_state for data, cics_run_script for screens); the compare — byte diff through the record layout, keyed row diff, field diff by BMS name, masks for jobids and timestamps; wiring it into a Maven verify phase that fails on a non-empty undeclared diff; the suite red against the empty skeleton.
LAB The red you will turn green: every Wave 0 golden loaded, the suite enabled, mvn verify red with all sixteen artefacts missing — pushed.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Six videos. Layout truth — copybook to DDL (NUMERIC(p,s) for packed, CHAR vs VARCHAR, dates, the sign; REDEFINES as columns or JSONB, never a guess); keys — KSDS primary key, alternate index to index, ESDS to sequence, RRDS to integer key, read off LISTCAT and vsam_info; the migration load from EBCDIC bytes with a control trailer, Flyway for schema; reconciling counts, sums and hashes against the mainframe’s own CDTOTALS report; the leading-zero account number that became an integer.
LAB Wave 1: all eight CardDemo clusters and two DB2 tables loaded through Flyway and a load job, reconciled to the byte and the cent against CDTOTALS and export_state; data artefacts green.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Six videos. JCL to Spring Batch — job, step, reader/processor/writer, chunk, COND and IF/THEN as flow decisions, return codes as exit statuses — with READACCT in EDIT beside the job configuration; CBACT01C as the first job and a byte-identical writer, with the reader that must say ORDER BY; restart and the job repository against RESTART= and the CLOSEFIL/OPENFIL batch window; PARM and symbolics as job parameters and the pinned business date; scheduling — the real CA-7 and Control-M definitions read from sched_list and expressed as a flow.
LAB Wave 2: CBACT01C, CBCUS01C and CBACT03C as restartable, parameterised Spring Batch jobs, reports byte-identical to your READACCT, READCUST and READXREF captures; craft rules on (BigDecimal, 80% coverage, ArchUnit).
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. CBTRN02C as a stateful step — balances updated, rejects written, the 38-record reject set as the equivalence target; CBACT04C interest — arithmetic order, truncation, the id generator, idempotence (HALF_EVEN costs a cent on three accounts); chaining jobs — dataset hand-off to table or file hand-off, the dated backup; performance honesty with the ×100 input and the mainframe’s elapsed in JESMSGLG as the baseline.
LAB Wave 3: the posting chain end to end — 300 transactions, 38 rejects identical in order and text, balances and category balances identical, the 857-line report and 1212-line statements byte-identical, restartable and idempotent.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Six videos. Pseudo-conversation, COMMAREA and EIBAID to stateless REST with client-held state; COACTVWC’s read chain as a service with the exact message texts as fixtures; COTRN02C’s validation ladder — eleven "can NOT be empty" messages then the format checks — reproduced in order and wording; Spring Boot anatomy with DTOs named from bms_preview and the .mf fidelity line for the parallel run; USRSEC sign-on to Spring Security with hashes, the password-storage difference declared.
LAB Wave 4: sign-on, menus, account view and card list as services and pages; ten cics_run_script scenarios transcript-equivalent by field.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. REWRITE under CICS vs optimistic locking with a version column, with two CICS sessions colliding on CAUP and the same message reproduced; bill pay and transaction add — writes, keys and a provider-agnostic payment seam with no vendor in the domain model; a thin web UI mirroring the 3270 layout for the parallel run, then the better one; the leading-digit menu quirk — reproduce it or declare it, decided and pinned by a test.
LAB Wave 5: all 15 non-DB2 screens’ behaviours as services, transcript-equivalent on the course’s 40 scenarios, every difference declared with owner and reason.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Four videos. Embedded SQL to Spring Data and JdbcTemplate — COTRTLIC’s cursor as pagination, SQLCODE as exceptions, −803 as DuplicateKeyException; DB2 to PostgreSQL dialect differences that bite — DECIMAL scale, CURRENT DATE, FETCH FIRST, CHAR padding — proven statement by statement against SPUFI; the transaction-type admin screens CTLI and CTTU end to end.
LAB Both DB2 screens equivalent on eight scenarios including the −803 duplicate path and the +100 end of list, the table rows equal between SPUFI and PostgreSQL.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Three videos. The parallel-run period — routing by function, the mainframe as system of record while Java reads through a program-level façade; cutover rehearsal with real volumes, the held chain, the final load, the reconciliation that catches drift, and the rollback that must be true before the flip; the full coexistence programme is CS535.
LAB The coexistence lab: the Java account view reads the live VSAM through cics_link to COACTVWC while the 3270 session still works — ten accounts identical, the .mf line equal to the live answer.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. Project structure by domain with the ArchUnit rules that enforce it, the packages read off analysis_graph; Testcontainers, golden-file tests from run_capture, OpenAPI contract tests; CI running unit, integration and the SteelFrame equivalence suite through the sf CLI exit codes with a scoped token; a Dockerfile and compose with configuration and secrets outside the image, the container run beside the JES run.
LAB Pipeline green on push with the equivalence stage against your SteelFrame goldens; the container runs the whole application and the suite passes from inside it.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. From "Java that thinks in COBOL" to idiomatic Java — refactorings that keep the suite green, with CBTRN02C’s paragraph beside its refactor; the domain model — Account, Card, Transaction with invariants, the ledger invariant checked against VSAM totals; events — publishing posted transactions behind a Kafka-shaped interface with the CardDemo MQ trigger as the precedent; observability — logs, metrics and traces beside JESMSGLG and SMF.
LAB One refactor pull request with the equivalence suite as the safety net: suite green before and after, the PR citing the capture ids that prove it.
Coming soon The videos for this session are being produced; its lessons and lab are published here now.
Five videos. Reading an unseen Spring Boot service beside the CardDemo program it came from; the hidden variant — two seeded behaviour changes in the COBOL that your suite must find before you read a line; writing the equivalence report an auditor accepts, with capture ids that resolve; portfolio and interview with the side-by-side frames taken live; the capstone run on camera and the certificate criteria.
LAB Capstone: re-capture the hidden variant’s goldens, let the suite name the two changes, reproduce them, suite green; the equivalence report; the 30-question reading check (80%).
CobolStack Certificate — Modernization Engineer (CS520) is issued from the lab harness’s own record of your runs — not from attendance. To earn it you must clear every gate below:
The certificate attests that you can modernize a real mainframe application to Java/Spring in waves and prove each wave equivalent against the original running beside it — the job the GM, IBM and SI postings describe — with the evidence a steering committee and an auditor accept.
Your seat is a private, full z/OS-compatible environment with the AWS CardDemo estate (COBOL, JCL, CICS/BMS, VSAM, DB2) and the SteelFrame oracle tools (run_capture, export_state, cics_run_script), beside your own Java 21 + Maven + PostgreSQL toolchain; Spring Boot 3, Spring Batch 5, Flyway, Testcontainers, Docker in the browser — nothing to install, snapshot and reset per exercise. By the end of the course the lab harness will have verified: six wave checkpoints (private CardDemo copies seeded and captured; data loaded and reconciled to the byte and the cent; three report jobs, then the posting chain with 300 transactions and 38 rejects, byte-identical; 15 online screens, then all 17, transcript-equivalent with every difference declared), the coexistence lab (Java reading the live VSAM through cics_link while 3270 still works), and the capstone on a hidden CardDemo variant whose two seeded behaviour changes your equivalence suite — not your eyes — must find.