Agile – Keeping agile with zero-bug/defect policy

agilebacklogbugscrum

In our project we work in a zero-bug (a.k.a zero-defect) methodology. The basic idea is that bugs are always higher in priority than features. If you're working on a story and it has a bug it must be resolved in order for the story to get accepted. If a bug is found during the sprint for an older story we need to put it next on our backlog and resolve it – top priority.

The reason I'm saying resolve is that we not always fix the bug. Sometime we just declare it "won't fix" as it's not that important. All-in-all it sounds great. We're shipping high-quality products and don't carry "a hump" in the form of a huge bug backlog.

But i'm not sure this approach is correct. I do tend to agree that we always need to fix serious bugs ASAP and we need to throw-away non-interesting bugs. But what about bugs that are important but not as important as new features? I tend to think they should be filed in the backlog with a suitable priority.

I'll give an example in order for it to be clearer – in my project we work with a UI written in flex. We have a wizard screen that opens at the same size for every screen resolution. It turns out that when we extend the wizard window, one of the pages does not look good (there is a vertical scroll bar that does not disappear although the wizard can now present everything and does not require the scrollbar). I think this bug is ugly. I'm sure it MUST be fixed. But we're on a tight schedule and we have a lot of features that we're afraid won't make the cut and enter the release. I feel that we can live with such bug. It does need to be fixed but on lower priority than other features (so, in case we won't be able to complete it, at least we didn't leave out more important features). But, we work in a 0-bug policy and it must be fixed now (even though we spent more than a day trying to resolve it and we'll need at lease another one).

I would love to hear opinions about how to manage with bugs that I don't want to mark as "won't fix" but also are not of highest importance.

Best Answer

Fixing bugs before writing new code is actually one of the twelve points of Joel test. Joel also explains why this is a must-have:

In general, the longer you wait before fixing a bug, the costlier (in time and money) it is to fix.

You have a choice:

  • Either you implement a highly requested feature and delay fixing a bug, which will inevitably increase the cost of fixing it,

  • Or you fix the bug right now, given that customers will be disappointed that you're so slow at delivering the feature they need so much.

If the bug is not very important, while the feature is, management will be inclined to ask to implement the feature first, then fix the bug. Business-wise, this is a perfectly valid choice, as far as the management clearly understands the consequences, i.e. that it would be more difficult to fix the bug later than now.

Sticking to "no new features until all bugs are fixed" may not be the best business choice. You already mentioned its limitations, so there is no need to explain it.

This being said, the risk of letting very important features be implemented before fixing minor bugs has a risk: where to put the limits? Is a feature requested by 1 000 customers is more important than a bug encountered by 100 customers? How to evaluate whether a given feature should be done before fixing a given bug?

Without strict rules and if management doesn't understand the development process very well, you may see yourself in a few years with a backlog full of bugs which were considered not important enough in order to be fixed before just another fancy feature.

Related Topic