Give Bugs A Chance
I have a confession: I am not the kind of person who wanders around the house looking for things to fix. Let me rephrase that: I am not the kind of person who fixes things around the house as soon as something breaks. OK, you’re on to me — I hate fixing things around the house! I don’t own any fancy tools, I don’t have 167 types of screws and nails, and you will never catch me trying to build something I can buy. But that’s not the end of it. A couple of months ago the light bulb in our bedroom burnt out. It took me an entire month to buy a new one and replace it.
I know it’s nothing to be proud of. So, why am I wasting your time telling you about my dysfunctional nature? In some sense, articulating your problems aloud is a kind of therapy. But that’s not the real reason for sharing these embarrassing facts. I just wanted to share my perfect excuse with you. You see, I can always find something more important to do.
Here’s the thing: no matter how important or urgent some home improvement chore is, my other tasks are always more important. Can you compare changing a light bulb to writing a chapter in my upcoming book? Is replacing a leaky faucet a match to writing a new blog post?
I guess most of you don’t buy these excuses. My wife doesn’t buy them either. If she had, I would have written this post in the dark, to the sound of endless dripping. So, against my will I eventually find myself wandering around the local hardware store, trying to figure out what is it I need in order to cause as little damage as possible around the house.
Unfortunately, in software development we get away with the exact same excuse much more often. And here’s how it goes. During development many bugs are identified by the testing group. Some of them are very easy to fix. Some of them are severe enough to require an immediate fix. But there will always be some bugs you can live with for the time being. And that’s exactly where things start to go wrong.
The easiest thing you can do with those “we-can-live-with-that-for-now” bugs is to postpone fixing them until the next version. This is a legitimate decision. After all, this is what we have priorities for. And priorities are the key to successful project management. But when that next version is about to be implemented, many of us are tempted to postpone these problem one more time. Fixing those “ancient bugs” always seems less important than implementing a new feature. And thus, almost all postponed bugs will stay unresolved for eternity.
But it gets even worse. The longer you live with the bugs, the harder they become to fix. If by any chance you find yourself forced to fix these problems by a furious customer, there is a good chance no one will remember what it was that caused that strange behavior. By then, you will have piles of new code dependent on your flawed code. Fixing an ancient bug at this stage might be much more dangerous.
So, should you resolve every single bug in your code the minute it is found? Of course not! Prioritizing bugs, and postponing some of them, is a necessity in every project. What you should do, however, is give your bugs a fair chance to be resolved. Your postponed bugs should be treated just like any other task.
Here are a couple of guidelines for treating your bugs fairly:
1. Don’t slander. Don’t be tempted to argue that new features are always more important than fixing old problems. Old problems will always come to haunt you at some point. Getting rid of them is generally a good strategy. The relative priority of bugs and features should be determined on a per case basis.
2. Don’t discriminate. Don’t maintain two separate task queues (one for bugs and one for features). When you plan the next version of your product, you should prioritize new features and postponed bugs in the same queue.
3. Don’t be a stranger. Regularly check your postponed bugs to see how they are doing. If seeing the same bug in your database over and over again becomes too annoying, maybe it’s time you fix it.
4. Don’t be lazy. Fixing a leaky faucet is not much fun, but it is by far better than having a constant drip as the soundtrack of your life.












September 18th, 2006 at 2:26 am
Nice =)
September 18th, 2006 at 9:31 am
From what I’ve seen, “Hard” bugs are usually caused by flawed architecture. In most of those cases the architecture doesn’t align with the business model. This is a huge problem since if the flaw isn’t fixed, tiny changes to the business model may (usually) become huge problems in the code.
Thus: the two “laws” of architecture flaws:
1) They are hard to fix
2) They will keep producing new and unforeseen bugs until they are fixed
To properly evaluate their cost (to prioritize), requires knowing what unforeseen bugs the flaw will produce over time. This is: impossible!
My rule–give extra preference to fixing architecture bugs (by at least a factor of 10 if not 100). In the end it will pay off.
September 18th, 2006 at 10:07 am
“But it gets even worse. The longer you live with the bugs, the harder they become to fix. ”
Appropos the building image - that is pretty much like the “broken window theory” http://en.wikipedia.org/wiki/Broken_windows_theory
September 18th, 2006 at 10:50 pm
Even though I do tend to fix things around the house, what I choose to fix quickly and what I procrastinate about is telling. I like doing repairs when I know I will succeed. (So changing a lightbulb is generally an easy win.) The ones I delay are the ones that are difficult for me — I don’t know how to do them, don’t have the experience, and may require outside help. Attacking those fixes sooner doesn’t seem to make them easier to fix, nor does leaving them make them harder. I admit, though, that it makes it less pleasant to live in the house.
So in software, one question is: what can make one more able to fix difficult bugs when reported?
Meanwhile, regarding Arnon’s comment about the broken windows theory, I lived in New York when they got rid of graffiti on the subways. It really did make a big difference.
So for software, my second question is: what can reduce the maximum difficulty of fixing a bug in your software?
For that one, people do have an answer, though don’t always invest accordingly: good design.
September 20th, 2006 at 8:55 am
[…] Read the whole post here. […]
September 27th, 2006 at 9:27 am
[…] >> All we are saying, is give bugs a chance. [1] No one wants to be hot and sweaty in a car with Kate Winslet unless they are being paid $2.5 million[3] or they are Melanie Lynskey. Especially if they have to listen to Celine Dion. […]