The Reporting System

Matt looked up and saw his boss, Jack, poking around the corner of his cube wall like an oncoming iceberg. “Huh? Oh, that. Yeah. My dad gave that to me as a joke…”

Matt trailed off; his boss had vanished the instant he heard, “Yeah”.

This was 1997, and in the closing moments before the dreaded Y2K bug rained chaos and destruction on enterprise system the world over, any consulting firm that could claim in-house COBOL expertise could get some juicy contracts. And because Matt owned a COBOL book, his employer could claim to have COBOL expertise. Matt would have been more upset, but he liked a challenge; it also meant bigger paychecks, and the longer hours gave him an excuse to avoid seeing Titanic with his girlfriend for the third time.

The contract that wanted a mainframe programmer with COBOL experience was well on its way, like an ocean liner crossing the North Atlantic. The customer had already converted most of its legacy software into an Oracle database with a Java front-end. By 1997 standards, it was so cutting edge that it could find a new home in a butcher shop. It even had a web interface, which was a big deal for a customer that didn’t deploy web browsers to their desktop machines.

“We need you on these reports,” Jack explained to Matt. “They need to be exactly the same as on the mainframe system. They need to start the same way, generate the same way, and get the output the same way. Exactly the same.”

The customer wasn’t kidding about exact. Along with the specs, the customer provided a list of known bugs. They didn’t want these bugs fixed; the bugs were tests. If the new software didn’t have the same bugs, the customer wouldn’t accept it.

After a lot of round trips and false starts, Matt and his team worked on delivering the solution the customer wanted. The customer was very precise about what they wanted, and Matt and his team delivered exactly what the customer demanded. And that’s why they got a solution like this one.

The process started, not in COBOL, but in a FORTRAN program running on a VAX/VMS system. The user requested a report, and the FORTRAN
program called out to a remote Java application. The Java application connected to the Oracle database, extracted the data and formatted it into a COBOL flat-file structure- essentially a string where fields were fixed length. Then the Java application connected to a socket-based application on the VAX, written in C. The C application took the record structure and used IPC to hand it off to the FORTRAN application.

That was the first half of the process. Once the FORTRAN program had the data, it converted the character encodings from ASCII to EBCDIC, and specifically the correct dialect of EBCDIC, in this case derived from a punch-card format that had gone out of use 30 years prior. Thus prepared, they could then FTP the EBCDIC-encoded file to their document management vendor. The vendor would run off a print out on continuous form paper, and then snail-mail the green-barred documents back to the original user. Finally, in a tip of the hat to modernization, the end user had the option of scanning in each page of the print out into a PDF stored on their local hard drive, for easy access.

Despite this particular experience, Matt didn’t jump ship, and instead stayed with the consulting firm. Over the years, the firm repeatedly tried to convince the customer to upgrade their process. Each time, the customer replied, “If it ain’t broke, don’t fix it.”

As time passed, Matt’s company cranked the dial on the service fees for maintaining this process, going from burning money at “1/2 speed” to “flank speed”. As people with VAX expertise retired, salaries for their peers soared. When the original VAX hardware was old enough to drink, it also got retired and replaced with an expensive emulator, which the customer got billed for. Even as the costs soared, the customer stood firm: “Why should we fix something that isn’t broken?”

Impressively, the system is stable and requires very little active support. But occassionally, it still gives Matt little treats. The last time it crashed was on the same night Matt’s wife wanted to see the 15th anniversary, 3D re-release of Titanic. Don’t worry, it just required a simple restart of the C component; their VAX will go on.