“Why, oh why, is the state of software so bad, so buggy?” reads a common lament on forums frequented by programmers. As programmers, we’re a perfectionist bunch, and it bothers those of us who care about quality to see things work poorly.
Why indeed? The answer is almost entirely dictated by economics.
Imagine that you’re a customer looking to have a custom web site / application built to help manage your small local bookstore. It’d be bad if the system lost all your data, but other than that, minor bugs are tolerable, and your business just doesn’t make a ton of money in the first place.
You talk to two local shops that might be able to code up what you need:
- One offers to write code they guarantee to be free of bugs. It doesn’t have many features, but would probably get the job done.
- The other company can get it done for a bit less, with many more features than the first one.
You ask the first vendor about the extra features, and they say they might be able to get to them over time.
Since those extra features would be handy, you opt for the second vendor. Once in a while, it does have an annoying bug or two, but the programmers do try hard, and manage to fix most of them in a few weeks, and none of them cause you any major problems.
The above anecdote is how much of the market for software works: everyone says they want high quality, defect free code, but how many people are willing to pay for it with either much higher prices, or a reduction in features? It depends on what the software is used for, but by and large: not many. They’d rather have the features, or pay less, and tolerate the odd bug here and there.
Everyone’s heard the old adage, “good, fast or cheap, pick any two”, which is very closely related to another triad: “lots of features, few bugs, cheap”. You simply can’t develop something quickly or on the cheap, and have both lots of features and very few bugs. You trade off features for time spent on ensuring there are no bugs, and since eliminating bugs is something that seems to asymptotically head for, but never quite achieves perfection, the more time you spend on that, the fewer features you have.
This suggests that if you want to work where people pay a lot of attention to quality, you should work where even small bugs cost a lot of money, or where they put people’s lives in danger. Those are the sorts of environments where quality will count.