In the late ’70s, just out of college, I was hired at a large company to do revenue forecasting. For the first six months, it was probationary. I could be let go as a bad fit. No need to show cause, but economics and math was right up my line. I was hot to show how sharp I was.
After two months, I’d helped on all the routine operations – forecasts by product, seasonality adjustments, Box-Jenkins, regression with revenue history, sector and GDP growth, and so on. Most days I worked from 7 in the morning to 6 at night.
The procedure I was ordered to follow required the output of one run to be manually input into the next job stream. That required me to babysit the operation. There were more than a dozen product lines to be forecast each week. Each ran 15 to 30 minutes. Also imagine the tedium of entering each of 13 coefficients to 9 decimal places.
I was at the terminal all day, except for bathroom breaks. The terminal room, my home at work, lay inside the building, a room with no windows, no pizazz at all. I’m convinced it was a converted janitor closet, just 6 feet wide and 20 feet long. There were several other programmers who came in, ran their programs, and left. I was jealous of their freedom. A loud fan droned all day, blowing heat up to the outflow ducts, and killing all meaningful conversation. There were no posters or pictures on the walls. The walls were gray and faded. After a long day in there, my aesthetic side screamed for attention. My soul was being starved.
Jack, my boss, was a nasty goblin of a man, short but wide with an impressive beer gut. He bragged that our computing bill with the SimCalc vendor was $25K last month. That’s more than my job paid for the whole first year! He laughed and told me that Walt, the big boss, complained. Jack laughed live he was swallowing a hobbit and claimed he told Walt that just showed how valuable his forecasts were.
I took the SimCalc manual home to study. Emily wasn’t happy that all night I had my nose in the book, but I had to get out of that damn terminal room. Too many more days eating cheese crackers and washing them down with grape soda lunch, while monitoring programs, would drive me insane. Later that first night, I found my goal – commands to read and write output to files.
The next night, I brought home listings of two forecast programs that ran in sequence. I laid them on the kitchen table. All the forecast programs had the same basic structure. If I figured out how to alter this pair, I’d be able to automate them all. At that point, I’d be able to take lunch wherever I wanted, with real food. I could even go outside and breathe in nature.
It was after midnight. The Eric Burden sang “We’ve Gotta Get Out of this Place” on the stereo. The programs were long with many loops and performed functions. I focused on spots to write the parameters in the first program and where to read them in the second.
I should have gone to sleep then, but my brain was revved. I glanced through intricate calculations in the SimCalc langauge. I made a few notes, but didn’t really understand what they were doing. But then I noticed an oddity. After the final calculation, right before I wrote the results, the first program had a loop that seemed to write a time series to memory ten thousand times.
Why would it do that? I looked higher up in the listing. Even there, temporary results were followed by loops writing to memory ten thousand times as well. I shook my head. That didn’t make sense. A sure sign I was too tired to think straight. I went to bed.
After the late hours, it was hard to pull myself out of bed until I remembered that I could juice the programs today.
As usual, I arrived at work at 7 A.M. I made the changes before Jack came in. He wouldn’t like it. He’d told me not to change the programs. I hadn’t, not really. The calculations were the same. They just ran with less hand-holding.
While my first tandem pair ran, I paged through the SimCalc manual. A command Profile caught my eye. It reports, after the program runs, how much time is spent on each command.
I added Profile for the next tandem run. By lunchtime, I had discovered that the various 10 thousand write loops consumed 25% of the total CPU usage of the program. SimCalc charged us by CPU time. That meant their billing was goosed up by 25%!
Before I’d barely thought through this, Jack came in the terminal room.
“Jack, you won’t believe this,” I said. “SimCalc is bilking us for six thousand a month!”
His forehead creased, a worry line. He raised his hand like a traffic cop. “Not here. My office.”
I picked up my marked listing and followed him.
Back at his desk, he shoved a sheet with handwritten numbers into his top drawer. I recognized it as a tally from passion, his weekly poker game. He glared at me through lowered brows. “What are you accusing SimCalc of?”
“They’re cheating us.” I put the listing down in front of him. “See here.” I pointed to the final empty loop.
He glanced at it and shrugged his shoulders. “So? They have a loop. That’s how the program works.”
I straightened up. “That loop writes the same results to the same memory location. Not once but ten thousand times. The empty loops account for a quarter of the program time. They’re bogus loops.”
Jack leaned back in his chair. “This program was written by Jimbo, the best programmer SimCalc has. I don’t believe he made such a mistake. Did you use the decimal precision as I told you to use?”
“Yes.” I had to stop myself from arguing about that. Our sales data only had 2 decimals. Twelve digits in parameters gave a false impression of accuracy. “All I’m saying, Jack, is if it’s not a mistake, then it’s a conscious decision to charge us more!”
He stood up. “I’ll take care of this. Let me …” He picked up my program listing. “What are these other assignments? They look like new variables.”
I had to fess up. “I added them to make the procedure more automatic.”
“I told you not to change the programs! That’s what caused these crazy Profile numbers! You caused it.” Jack waved his fat paw towards the door. “Get out. Go to the terminal room and finish the forecasts that I assigned you. And run the programs unaltered.” He stuffed my listing into a drawer and retrieved his poker true-up sheet.
It amazed me. He didn’t believe the evidence. Of course, my automation variables wouldn’t affect CPU usage in other parts of the program. Any decent programmer would know that. He wasn’t dumb. He’d figure it out when he thought it through.
I handed him the forecasts at 5:30 that evening. He grunted thanks and gave me half a smile. He was probably realizing I’m right.
That night, I was on a high from my amazing findings. I told Emily that we’d be moving into that rancher as soon as Jack realized the company cost savings. I fantasized that when Jack showed Walt my discovery, they’d be so impressed that I’d be immediately taken on as permanent.
The next day, I eagerly arrived at work. There was a note on my desk. “Meet me in Walt’s office at 10. Jack.”
I started the daily forecasts, killing time. Promptly at 10, I rapped on Walt’s door Jack sat in the wing chair. They looked up.
Walt gestured me in with a hand wave to the straight-back chair across from him. “Sit.”
I did and waited for congratulations.
Walt wrote something in his daily planner, glanced briefly at Jack, then turned to me. “Jack tells me that you don’t follow his orders. You goofed up the program by an undisciplined approach. Is that right?”
“No.” This was not what I expected. I knew an explanation was required, but all I could say was “I didn’t do anything wrong.”
Walt scratched his head. “It’s not a complicated question, but it seems too much for you. Jack, what’s the specifics?”
“Yes, sir.” Jack bobbed his head. He turned to me. His wide fake smile showed his incisors. “I gave you the simple task of product line forecasts.” He took a sip of coffee, then continued. “I specifically told you not to change any of the code. You changed the code and you’re late getting me the results. I have to work late because you never get me things on time.”
That was so unfair. Before I couldn’t finish them in the normal time, because they were so poorly constructed. I improved them and this is what I get!
Walt looked at me over his reading glasses. “Well?”
“I improved …”
“That is not the question,” Walt interrupted me. “Did you fail to get your assigned forecasts to Jack by the 3 PM deadline?”
“Yes, it was later.” I hung my head instinctively, then realizing it showed guilt, which I didn’t feel, I looked up at them.
Walt sat calmly, but Jack’s black orbs blazed.
“The changed code,” Jack reminded Walt.
“Did you change the code that Jack told you to leave alone? That we have a small fortune invested in?”
That was impossible. The forecasts could never be ready in mid afternoon, the way they were. I had to be honest, “Yes, but I improved them.”
Jack snorted. “That’s why I didn’t get them until after 5 yesterday.”
“That settles it,” Walt said. “I hired you to help Jack, but that’s not helping. You’ve got to go. We’ll count today as a half-day, but I want you out within the hour.”
I stood up, dumbfounded, and left. I don’t remember how I got home that day.
It took me weeks before I came to grips with the shame of losing the promising job that I had bragged I was so well matched for.
It wasn’t until I hesitantly told the story to my best friend when I realized Jack’s true motivation. Jack had gotten rid of me as soon as I stumbled across the SimCalc billing scam. One of his poker buddies was Jimbo, the SimCalc programmer. They’d been pocketing the excess billing.
Jack got a kickback. I got the kickout!
Stop image from National Archives at College Park / Public domain