A text adventure in which a young developer discovers that the most valuable technology career of 2026 was hiding in plain sight – behind a green glowing terminal, a RACF login, and three snakes guarding the Change Management Cave.
It is 2026. Every job posting you see mentions React, Kubernetes, Python, or AI. Your LinkedIn feed is a river of people building startups, shipping SaaS products, and posting about their Series A.
Nobody told you about the treasure.
It has been sitting in the basement of every major bank, insurance company, and government institution since before you were born. Quietly processing more money per day than the entire cryptocurrency market has ever seen in its lifetime. Never crashing. Never complaining. Never asking for a standup meeting.
The treasure is real. The path runs through RACF. The enemies are named S0C7 and COMP-3. The Change Management Cave has snakes.
This is the Quest for the Lost Holy Mainframe Treasure.
A fully playable text adventure that runs in your browser, inspired by the world of IBM MVS. The game is written in HTML and JavaScript – no mainframe required. (Running it natively on MVS 3.8j is a future ambition. Who knows.)
Everything in this game – the abend codes, the JCL, the COBOL, the ISPF menus, the linkedit messages, the change management process, the snakes – is based on real mainframe conventions. Close enough that mainframe professionals will either laugh or cry. Possibly both.
Play it here. Then read on.
A note for Android Chrome users: if the game looks misaligned when it first loads on your phone, please rotate the device once and back. This is a Chromium first-paint viewport bug – JavaScript tries hard, but it cannot reproduce what physical rotation does inside the layout engine. Firefox Android handles it correctly. iOS handles it correctly. A mainframe terminal application, naturally, would have handled it correctly: z/OS has been laying out 3270 screens in EBCDIC since 1964 and has never once required the user to flip the device for the rows and columns to line up. Some technologies improve. Some just churn.
Everything in that game is based on something real.
RACF – Resource Access Control Facility – is IBM's security system for MVS. It has been the standard for mainframe security since 1976. Every access to every resource – datasets, programs, transactions, operator commands – is verified by RACF at the time of access, not just at login. The password rules, the ICH70001I messages, the SMF Record 80 audit trail: all real. Zero Trust before Zero Trust was a buzzword. The snide commentary about Quantum Computing is editorial, but the underlying point is accurate: superposition is not an access method.
Every MVS system displays a Message of the Day after login. Most shops use it for maintenance notices or planned outage schedules. The text is transmitted in EBCDIC – Extended Binary Coded Decimal Interchange Code – the character encoding the mainframe has used since 1964. Not ASCII. Never ASCII. The mainframe does not know what ASCII is, and if it did, it would not be impressed.
We used Pulp Fiction quotes. You're welcome. Share your favourite with a colleague who has been in mainframe for thirty years and watch their face.
S0C7 is "Data Exception" – the most common abend in COBOL batch processing. A numeric field received non-numeric data. Spaces, low values, or in this case, data in an unexpected format. The program attempted arithmetic. The system declined.
S0C7 is not a bug in the code. It is the system's way of saying: I expected numbers. You gave me something else. We cannot continue this conversation. It appears in production at 3 AM. It has done so since 1964. It will do so until the last mainframe is switched off, which is not happening any time soon.
The fix in the game is technically correct and this is worth explaining because it surprises people.
COBOL's MOVE statement handles numeric conversion automatically between packed decimal (COMP-3) and zoned decimal (standard PIC). When you MOVE a numeric field to another numeric field, COBOL handles the format conversion – you do not need to write conversion code. This is one of COBOL's genuine strengths.
The problem was not the MOVE. The problem was the field definition.
COBPAY03 defined WS-BASE-SALARY as PIC S9(7)V99 COMP-3. This tells MVS: this field stores values in packed decimal format. When the HR migration changed the incoming data to standard zoned decimal, the field definition no longer matched the data. The result: S0C7.
The fix is to remove COMP-3 from the PIC clause. One word deleted. The field becomes PIC S9(7)V99 – standard numeric, which accepts zoned decimal. COBOL handles the rest automatically.
Four hours of diagnosis to find it. Two seconds to fix it. One comment written to explain why. The comment took longer than the fix. It always does.
The IGY compiler messages are based on real MVS compiler output. IGY-CL-0009 RETURN CODE 0000 means the compiler found no errors or warnings. A clean compile is necessary but not sufficient – the program can compile perfectly and still be wrong at runtime. Every MVS developer has learned this lesson personally. Usually at 3 AM. Usually in production. The stalactites are metaphorical. The lesson is not.
For completeness: IGY is IBM's Enterprise COBOL compiler. If your shop uses a third-party compiler, the message numbers and prefixes look different. Same idea, same return codes, different dialect.
The linkage editor – IEWL on MVS – resolves external references and creates the load module. This is the executable program that MVS will run. IEW0351I means a called subroutine was found and resolved. IEW0000I RC=0000 means the linkedit succeeded.
The distinction between the object module (compiler output) and the load module (linkedit output) confuses developers from other platforms. In MVS, you compile and then you linkedit. Both must succeed. The program does not exist until both have completed.
One footnote on terminology: IEWL was the original z/OS linkage editor. Modern shops mostly run the Program Management Binder – the mighty, shiny replacement. It is invoked the same way, the messages look familiar, but the Binder understands the newer PROGRAM OBJECT format with long names and z/Architecture features that pure linkedit cannot produce. Same RC=0000, more capability underneath.
The snakes are real.
Every production mainframe shop in the world has a change management process. This process exists for excellent reasons – a production outage at a major financial institution is measured in millions of dollars per minute. The RFC form, the risk classification, the testing evidence, the business owner sign-off: all of it is there because something went wrong without it, once, and it cost more money than you want to think about.
At 3:47 AM with 847 employees unable to be paid, the emergency change process exists for exactly this situation. The snakes know it. They are professional snakes. They approved the change.
The RFC forms on the cave walls going back to 1987 are also real. RFC-2003-0001 NEVER CLOSED is a comfort to anyone who has ever worked in change management. You are not alone.
The treasure was never the salary, though it is genuinely good. It was never the job security, though that is real and significant.
That ability is rare. It is getting rarer every year as the generation that built these systems moves toward retirement. The institutional knowledge – why the threshold is this number, which regulatory change required this calculation, what the 2009 design document that was purged in 2021 actually said – is leaving the industry faster than it can be replaced.
Nobody is racing to acquire this ability. The job boards are full of cloud certifications and React frameworks. The mainframe sits in the basement, quietly processing the world's money, waiting for the person patient enough to learn its language.
Whose chopper is it?
Zed's chopper. Zed's dead, baby. Zed's dead.
His COBOL, however, is very much alive. And it will outlive us all.
Also worth reading: Is Mainframe a Good Career Choice in 2026? · The Hidden Risk in Every COBOL Migration Project · Starting Mainframe Work at a Bank: First 90 Days