Saturday, September 27, 2014

The Way Everything Works

My first software job, when the ink barely dry on my Computer Science diploma, was being a QA guy, a software tester, for a midsize local company. I'd been only a day or two on the job when I found a bug. A bug! I was sure of it. I verified it.

I showed it to my boss, who was unimpressed. "Sure," he said, "let's have you learn to file a bug report." My coworkers also were not very interested. I began to wonder if I had found myself a dud of a company. The next day I found three more bugs. I was hot stuff! Only nobody seemed very excited.

As time went by, I learned why. There was a enormous database of known bugs. The software was riddled with bugs. It was miraculous that it worked at all. Each development cycle, the developers would spend a few weeks fixing the worst ones, but the backlog steadily grew. Many of the bugs were so deep in the infrastructure that they couldn't be torn out without rewriting the thing from scratch. Some -- many -- most -- of the bugs would never, ever be fixed.

This was a successful product of a successful company. And as I moved on to bigger-name companies, ones you've heard of, I found that this was true of all software. A QA guy's job is not to discover the few rare, uncommon bugs. It's to find the important bugs, the ones that users will typically encounter, the ones that will make them grumpy. And yes, this is true of the software that decides how to modulate the force of the brakes in your car, and the software that decides whether a command to launch nukes has really been received from the White House. You might want to think about that. Or you might not.

As I wander on through life, observing various human endeavors, I've come to realize that everything is like that. Nothing has really been built to specs. Nothing quite operates as advertised. The flaws are various and infinite. All you can do is fix a few of the most glaring problems. The rest will have to stand. You can see it in software, because software is uniquely observable: it does exactly the same thing, over and over again, and it breaks down readily into tiny discreet steps. But everything works that way.


Tom said...

I cannot say that I am wildly enthused with the idea that my future progress through this life is based on inadvertently side-stepping life's numerous bugs. It is to be hoped that something, somewhere, can see what I cannot and is taking the trouble to guide my footsteps.

It is also to be hoped that it hasn't just eaten dinner and is feeling mildly queasy about devastation-seeking bugs!! :)

Dale said...

Well, I'm just speaking of the world as built and understood by human beings. Civilization. There are larger perspectives :-)

christopher said...

And I couldn't agree more. A robust program is not a perfect program but one that functions smoothly enough to not drive you crazy most days. And life is like that. Evolution works best in such a cobbled together way. If it didn't work like this, we could not make progress. Very few endeavors survive the perfection complex. If it can't work at 80% or thereabouts there is little chance for profit over the long haul. That's an engineering number. You work to 80% because the last 20% costs as much to accomplish as the first 80% does. That is just true.

I made my career on getting to 95% without costing too much, but I was kept in my own little cubicle and did not contaminate the rest of the crew for the most part. It was justified because I was doing machine design rather than project management, but I was also laid off a bunch... They avoided that kind of work when possible... Cost too much even when it didn't.