Ask any developer at a bank about their deployment process and you'll hear about User Acceptance Testing (UAT). Many of us have felt the sting of code changes working in one or two environments, only to fail when it finally hits QA. Maybe it's just me.
Our anonymous submitter (we'll call him "Steve") felt this sting, too. He'd carefully and methodically developed a module that worked beautifully in the bank's development and test environments, but failed UAT. Testers had discovered a bug in the module that they couldn't reproduce. The official description was that the module caused "weird things" to happen.
Trying to get to the bottom of the problem, Steve called the tester and walked him through the change; the output was correct. He stepped through his code, unable to find any problems in the module. The bank was not pleased with his inability to find the problem and wanted to roll back his code. He needed to do something. He had to get into the UAT server room.
Getting into the server room was like getting out of Alcatraz. And not having Nicholas Cage, Sean Connery, or even Ed Harris at his disposal, Steve would have to improvise. The room required secure access, and by policy was inaccessible to developers. Pleading to his superiors fell on deaf ears. This was, after all, a problem with his module, so he'd have to fix it. The Bank Has Spoken!
Finally, a chorus of angels that we'll refer to here as "Senior Management" stepped in. "Our deadlines are slipping," they cried. "Our inability to resolve this issue is growing more and more expensive. We have to do something!" The Bank showed some mercy and allowed Steve into the server room.
While the battle to get into the UAT server room had been won, Steve was under intense pressure to fix the issue. This was his only hope of salvaging credibility - his reputation was on the line. Once you get a reputation for not knowing what you're doing in The Bank, you will not live it down.
The server room was separated from the rest of the building, and aptly referred to as "The Cage." The servers were in special air-conditioned cabinets, but the air conditioners were broken at the time. Steve worked in the Saharan server room, forehead sweaty from either the heat of the room or the pressure he was under (or both), scrambling to figure out what the problem was. He wasn't having any luck.
Depressed, lonely, and uncomfortably hot, he looked up from the monitor as a tech entered the room.
"Jesus, it's sweltering in here," the tech complained. "Mind if I turn this fan on?"
"Go ahead," Steve choked out of his dry throat.
The fan started oscillating while Steve contemplated his fate. The Bank was unhappy with him, he'd be known as the idiot, and to top it all off, his network connection on the server just died.
It reconnected. "Oh, cool, it's back up," he thought, just as the connection died again.
Lazily moving his eyes to the fan, he noticed a cable being bumped with each oscillation, killing the network connection each time. Fortunately, he was able to add a FanBumpedTheCableException() class to the code, which could be caught and make the thread sleep for the period of time that the fan was in contact with the cable.
Just kidding, they just moved the fan over about an inch.