Note: You may wish to read Part I of this series to gain context.
When first assigned to the Plus project I was told to play the role of “bug manager”. “Jim (see Part I) wants to do the right thing,” the boss remarked. “so he’s informed his new company that he’ll be providing bugfixes and support on the Plus project during his first month. We can contact him about bugs at any time during work hours and he’ll try to have a fix coded and checked into SVN before the next day.”
Given Jim’s apparent charity, my role in the project was simply to aggregate bug reports from the 150 users, de-duplicate and prioritize them, and ship the result off to Jim. This seemed decently straightforward; after all, I didn’t know anything about the 500-class codebase or the difference between intended functionality and broken features, and there wasn’t any requirements document, project documentation, or decent in-code documentation available. As the voluminous bug reports crashed in like a tidal wave in monsoon season during an earthquake, I went to work.
This system worked out okay for a couple of days, which is about as long as it took to get the first response from Jim regarding the bug reports (which represented 49 serious issues over a period of five months). Problems like “Application memory usage climbs in direct relation to the duration it is open” got solutions like “Upgrade RAM for all users”. Problems like “Autosave creates 500+ MB of identical files – runs continuously” resulted in (I’m not joking) “coded” (it wasn’t). And the rest, like “Data form randomly saves blank files and won’t allow user to enter data” (complete with concrete evidence and steps to reproduce), didn’t receive any response at all.
During this period I was the sole point of contact for the angry users of this product. Finally I became so frustrated that I started investigating the Plus codebase. Part I chronicles some of the unhelpful comments found there, but more interestingly I discovered that Jim had used a portion of his 9-month development time to add themes. Yes, that’s right – the Plus application was failing all sorts of tests for critical functionality, but it had themes.
More than twenty of them.
In addition, it had a feature that created a preview of each tab as the user hovered the cursor over the tab name. Also, the application’s splash screen was a 6MB animated GIF of a weird-looking spinning globe (almost-kind of-sort of like the company’s logo, except horribly distorted and using non-company colors). As if that weren’t enough, easter eggs littered the code landscape, activated by lucky keystroke combinations. Ctrl-Alt-F7 launched a Tetris mini-game complete with a high-score board. Alt-Shift-T popped something called “Tea Timer”, which turned out to be a dialog that allowed the user to choose between tea, hot chocolate, and coffee and see Jim’s estimated preparation time (no, I’m not joking). This appeared to be Jim’s introduction to Java Swing components, his experimental form in which to try those weird GUI things like listening for user-initiated events and laying out form controls. I hope this is so – the alternative is that Jim’s knowledge of Swing programming was around the average high schooler’s level in 2000.
As soon as the option came I ripped out every one of these “features”, giggling with glee and smiling devilishly. What bastard puts a Tetris game in a productivity application designed for people who were stereotyped as lazy, unmotivated, dishonest, unsupervised fools? What non-managerial sniveling turd decides pretty GUI themes is more important than core functionality? What lying coward assures everyone he will stand behind his work, is given the support to do so, runs away and then has the nerve to complain loudly because someone else has touched his sacrosanct code (to be explained in a future story)? And let’s face it, what loser thinks a Swing form acceptable as a first-week assignment for an Introduction to Programming course is anywhere nearly as cool as an easter egg is meant to be?
I ask these probing questions because after systematically exterminating every ridiculous non-essential programming perversion Jim wedged in, I added dancing monkeys for rector to find after I’ve been fired and he’s forced to take over the codebase
Comments