First and foremost, I'd like to thank Raymond Chen, Mike Gunderloy, Tom Kyte, Eric Sink, and Blake Ross for providing some excellent articles while I was away last week. I'd also like to thank you, the readers, for filling out the Reader Survey and giving an insight into how educated you are (78% have or working towards a college degree), how old you are (80% are 22 to 40), your income (58% earn at least $50k/year), and your excellent taste in websites (100% of you read The Daily WTF).
I thought it'd be nice to start this week out with Tom's experience on the Client Management Module. Despite its name, the CMM is not actually a module; it's a fully contained application. But that's not why the developers have avoided maintaining it over the years. They've avoided it because all of the developers before them avoided it. And the developers before them avoided it because their predecessors avoided it.
It was a cycle that went back since the Beginning of the CMM and no one was willing to find out why. For if they knew, that would give them the knowledge needed to maintain it. And no one wanted that. It just wasn't worth the risk.
Tom prided himself on avoiding the CMM for his entire tenure as an employee. Even in his last week, no one asked him to fix one of the several long-standing issues and didn't offer. A few months later, his former employer asked if he'd be willing to "help out with a few things" as an off-hours consultant. The extra money certainly wouldn't hurt and, by this time, Tom had completely forgotten about the CMM. He agreed.
A few days later, Tom stopped by the office for a tasks overview meeting. And that's exactly when he remembered the CMM: just before he was handed the list of changes that he agreed to do. Being the professional that he was, Tom didn't cut and run and decided to just suck it up. How bad could it be?
There is no obfuscation in this "design time" screenshot: all of the controls and labels are stacked directly on top of each other and their visibility is changed at run-time by a several-thousand line case statement. In order to change the text of a sub-heading (as Tom was required to do) or properties of any control, all of the overlapping controls must be carefully dragged off, put aside, and dragged back in the exact same place.
This is one of the many reasons that the developers have avoided the CMM. It is also one of the first things that made Tom question his decision to not jump through the window of the fourth-floor conference room on the day he had his tasks meeting. Ironically, these controls are all placed in a Container Control, the control specifically designed to prevent this from happening.