Wednesday, November 14, 2007

Oh No My Queue Has a Bug!

One of the things about working in a de facto SCRUM environment is how you handle defects.

Basically, at the start of an iteration, you have a force-ranked list of what you're going to work on. The team walks down the list, commits to some portion of it, and the iteration starts. The list of tasks can be features, bugs, overhead work (install computers, etc).

Okay, so that feature that you thought you had nailed had a bug in it. Now what? There are a lot of ways to handle this. You could:

Put the bug in the product backlog and handle it just like any other task.

Pros: Doesn't break the process!

Cons: If you have an urgent bug, you're basically stuck until at least the end of that iteration.

Net: This is great for non-urgent items. But for emergencies it's really not feasible. If you're really seriously considering this you've either got extremely patient clients or you're being overly optimistic.

Add the bug to the iteration - at the top of the queue.

Pros: Bugs get fixed.

Cons: All those tasks you committed to? Those aren't going to happen.

Net: This is probably swinging too far in favor of bug fixing.* It also will have you doing things your customers want less than all those other backlog items they've asked for.

Allot some amount of time for bug fixing as a task in every iteration.

Pros: Allows for bugs to happen, either previously existing or new, without destroying the iteration.

Cons: If there are no bugs and you have a lazy team, then you get people idle. Also, the amount of the iteration you need to allot is uncertain until you've done this for a while and learn what your needs really are.

Net: No bugs; yeah, right.

So, my preferred method is to allot some amount of time for bug fixing as a task in every iteration.

What have you seen tried? Do you have an answer for this dilemma?

* Disclaimer: Yes, we QA types do get to notice when something goes too far toward bug fixing. It's great when bugs get fixed, but sometimes that's not the best thing to do.