Before the rush at Bespokeware

published:
Wed, 9-Feb-2005
|
updated: Thu, 27-Oct-2005

It was four o'clock in Bespokeware, our à-la-carte software and
hardware shop, about an hour before the evening rush of tired-and-stuck
programmers hit. It was always the same on a Thursday: they'd
over promised at the beginning of the week and come Thursday afternoon
realized that they only had one day left to complete their projects.
And that meant more business for us as they came rushing in looking
for help.

I settled back in the comfy chair, reading Martin Fowler's latest
paper. Tom was fiddling around inside a customer's desktop. He was the
consummate hardware geek; always changing this or that chip or board.

An expletive ripped through the air as a jagged soldered pin ripped
through his knuckle.

"Now, now, Tom," I said. "It's a good job the customers aren't here
yet: they're going to be stressed enough as it is."

"Sorry." He pushed the new board in, closed up the side of the
machine, and powered it up. I sipped on my latte. Fowler was making a
valid point, but in my relaxed state it seemed that I wasn't joining
up the dots too quickly.

There was a loud rat-a-tat-tat on the shop door.

"A bit early. Tell him to get lost," muttered Tom darkly. Obviously
the driver wasn't seeing the new board.

"Indeed, and of course not." I responded to both his points, went to
the door and opened it. Outside it was a bright sunny day, shoppers
with brand-name bags passing to and fro, happy smiles on their faces
as they chatted. The man at the door though was anything but happy.

"Your piece of tripe data structure is crashing," was his opening
gambit.

Through my mind flashed a vision of my perfect kick-boxing jab to his
throat and his head snapping back, but instead I smiled at him.

"Why don't you come in and explain the problem."

He brushed past me and sat at one of the tables. Tom looked at him as
if gauging the size of the stone from under which he'd crawled.

I remembered him now. He'd come in a couple of weeks ago and I'd
helped him with an implementation of some data structure or other. A
bad tipper, I recalled. I'd worked hard on the project, brought it in
under budget and within a day, saved his bacon, and he'd stiffed me
with the tip. When will people realize that if they want better
service they'd better take care of the staff.

He had a laptop ready to show off the problem. I still had the smile
on my face, although it was starting to hurt my cheek muscles. He
showed me the problem: lo and behold his application was raising an
unhandled null pointer exception bang in the middle of the data
structure code. I mulled over how to approach this.

"Could I?" I asked, motioning to the laptop. He handed it over. I
browsed through the source code. Some of it didn't look familiar to
me. I brought up the test suite I'd provided as part of the job and
ran it. A test case failed immediately.

"That's odd," I said. "The test suite was working when I handed over
the code but now it's failing. Have you changed anything in the data
structure code?"

"Just a minor enhancement," he replied brusquely.

"Did you run the test suite afterwards?"

"No, of course not. It was working in my application which is test
enough. Besides I didn't have time to understand and mess around with
all that test code."

The smile on my face was starting to feel like rigor mortis.

"I'd venture to say that perhaps the failing test case might have
helped you find the problem. Look here," and I pointed at some code.
"Your change means that this object gets freed before it should be.
This means that under certain circumstances, the circumstances which
the failing test case was checking, the run-time library will raise a
null pointer exception."

He looked at the laptop's screen for a long moment and suddenly folded
it up. "Good day," he said and was gone, the shop's door bell tinkling
as the door slammed.

"Very diplomatic," Tom said. "I'd have told him in no uncertain terms
that the test suite is there to be used and run regularly and only
idiots don't do so. And that only complete brain-dead idiots change
the code without changing the test suite."

I chided him but for some reason my smile wasn't hurting any more.
Fowler, the comfy chair, and the latte were calling and I settled down
again for those few minutes of peace before the rush. Outside the
passers-by passed by with their Gap bags, the sun shone, and all was
well with the world.