Chuck had plenty of time to wonder about the smooth jazz that played on their conference call system. The beatless clarinet noodling was probably supposed to sooth you while waiting for others to join the call. In practice, it was frustration as performed by Michael Bolton.
It was a sound Chuck had become very familiar with over the past few days. He was consulting with an outside contractor so that they would know the internal coding standards. The meetings were scheduled at hours most convenient in England, not the US, which meant some early mornings for Chuck. But that didn't mean anyone from Ajax Solutions actually bothered to come to the meetings. The first time, Roger, the product lead claimed that he had been stuck in traffic on the M180. The second, it wasn't in his Outlook. He didn't bother with an excuse the third time.
"I understand your complaints," Chuck's boss said. "But our internal customer wants this contractor to do the work. They apparently originally designed the software."
And what a design it was: a VB6 front-end on top of Access. There wasn't anything exciting or complex to it, just a big pile of database driven forms and a handful of reports. It did its job, mostly, and only fell over and died near the end of the month when the users were really pounding on it. The SBU using it wanted it upgraded to .NET and SQL Server. Chuck's team could do it in a fraction of the time Ajax had quoted.
As weeks went by, Chuck and Roger kept passing like ships in the North Atlantic in winter. Chuck never actually managed to pin Roger down before he received an email: "Here's Milestone 1, on time! Cheers, mate!"
Chuck downloaded the zip file containing the project and tried to build it. It failed. He skimmed the code and saw a pretty crappy pile of VB6 with tacked on .NET style. From the inconsistent use of Hungarian notation to the complete lack of separation of function, he was treated to piles of useless or bizarre code. They seemed to have found every possible abuse case in WinForms and used them all. Twice.
Chuck emailed Roger that the code was unacceptable and it didn't work. Roger replied, "Oh, blast, I uploaded the wrong version. Let me get the right one up there."
The next version was little better. One of the supporting class libraries compiled, which was an improvement, but remained completely unacceptable. Chuck escalated this up the management chain. Angry phone calls followed, but nothing really changed.
By Milestone 3, they had added an interesting block to the main form's load event. At each launch, the application would attempt to run a series of hard-coded ALTER statements against the database, e.g. add a column here, create a table there, drop this index and create that one. If any execptions were thrown, it just assumed that those changes must have already been done, and it simply ignored any exceptions.
This cycle of non-functional, non-compiling code continued through all of the milestones. Roger would claim that he had hit the milestone. He'd hand off something completely broken. When confronted his reply was always, "Oh, that's the wrong version. Sorry about that mate. I'll get the proper one uploaded ASAP." "ASAP" was usually code for, "sometime in the next two or three weeks." Each time, the code got more spaghettified and bug-ridden. By the end, it was about as supportable as the Tacoma Narrows Bridge.
During one heated email exchange, Chuck's boss popped into his cube. "They want to do a production install at the end of the month. I know this is a real turd, but it is what it is. I want you out there to try and make the install a success. I'll forward you the relevant info."
One piece of the "relevant info" that Chuck's boss forwarded, probably by accident, was the invoice for the work done so far. For the past six months of effort, Ajax solutions had raked in £100,000. In the weeks leading up to the trip, that little ember burned away in his brain. By the time he arrived at the Louth plant, it was a nice little fire of hate.
Chuck, despite deplaning at an ungodly local hour, dragged himself in for an 8AM start. Roger didn't feel the need to arrive until 10. Chuck showed him to a computer and logged him onto the network and then settled back to watch the install process.
"Um, there's no developer tools here," Roger said.
"Of course not," Chuck said. "This is a manufacturing facility. Why do you need developer tools?"
"To tweak the code," Roger said, as if that should be patently obvious.
Chuck glared at him.
"Ah, I'll pop out mate, and grab one of the computers from our office. No problem, right?"
It wasn't until 1PM that Roger returned with a desktop tower and CRT monitor balanced in his arms. "We, ah, we don't have any laptops," he explained. He diddled around with the code for a few hours, and around 4PM, he stepped out of the room. And didn't return.
Steaming, Chuck went to dinner at the only pub in town. "Oi!" Roger called at him from a table, behind a stack of empty pint glasses tall enough to hold back the Mongol hordes. "Chuck! C'mon over here mate and I'll buy you a round or six."
Chuck weighed his rage against the prospect of free beer. When he thought about the flavorless mass that he had eaten for lunch, he decided the beer would be required to make the meal palatable.
Chuck picked at his meal and sipped his beer while Roger tossed pints back nearly as fast as the barmaid could pull them. "Now, see, you're a smart bloke, right?" Roger slurred like a philosopher. "You just need the right sort of ambition to get out of your racket. I worked at Ajax Solutions back in the day before the company went under. Same sort of work you're doing, that factory programmer thing, yeh? So when the company goes under, there they are sellin' off the tacks real cheap like. So I pull together five thousand quid, and buy up the lot- the company name, the phone number, the domain. Boom- no more scut work programming for me! We don't keep an office, so I've just got these two Ukranians living in a shed in Khazakblast or wherever. I ship them specs and fifty quid a day, and they churn out code like good little monkeys."
Roger survived the week. This was surprising for three reasons: first, the amount he drank should have killed him; second, Chuck was only scheduled to be there for three days, not the whole week. The entire install should have only taken a day, and then Chuck was to provide onsite support during the burn-in.
The third reason arrived in Chuck's email just minutes before he and Roger parted ways forever. It was an email from his boss. "Hey, great work, Chuck. Listen, since you're the closest person to this app, you're going to have to take point on it. The users have already submitted a list of feature requests. Jump on that when you get back into the office."