I often read about buggy software and how vendors should be held accountable. Usually it is from someone writing is USA Today or the Wall Street Journal probably quoting a lawyer or policitian who has never programmed a day in their life, but I also hear it when the Linux zealots blast Windows.
While I can grudgingly forgive non-developers for being ignorant, I’m surprised when I hear developers complaining. I am not advocating we accept programs that exhibit bugs, far from it, but whenever I hear programmers complaining about bugs it is usually combined with intense emotion. That confuses me as I would assume they would understand the nature of bugs.
As I see it, there are two primary reasons for bugs. "Logic" bugs and what I’ll call "Assumption" bugs. The logic bugs are the true bugs, and ideally would be uncovered with coverage and unit testing. Assumption bugs are where assumptions made by developers become invalid at runtime and the software fails which is viewed as a bug. The problem is realistically you cannot program without making assumptions, so practically every piece of software has bugs. I like to define the hunt to eradicate assumptions bugs as “The quest to prove there is NOT a needle in that haystack.“ But even logic bugs might not be so obscure they are not discovered in testing.
Developers of the software that is generally viewed as solid and stable have simply done a better job of handling exceptions for the assumptions that fail most often. Ones whose software is considered buggy have done a poorer job.
What’s my point? I’m asking developers to acknowledge it is impossible to eliminate bugs, and stop emoting so strongly about bugs. If a software vendor does a poor job of handling failed assumptions, make note of it, blog about it even, and then decide not to buy their software, but don’t morally condemn them. They didn’t put that bug in on purpose to make your life hell, and they would love it if they had caught the bug before the software was released. I’m sure of it.
So, I say let the first developer who has released software to his endusers without one single bug be the one to cast the first stone.