Managing Bugs in an Agile Project - Agile debt collectionPreviously I spoke of the bug debt and how, over the course of a project, bugs will arise and will either be handled immediately or held over to be completed “at a later date”. In order to maintain the concept where you are only ever a single iteration away from shippable, these holdover bug items must be collected and budgeted for.
One approach to managing this is to maintain an additional backlog listing all of these carryover bugs. This backlog is maintained using three simple rules:
- Every sprint outstanding bugs are retested to confirm that they still exist and the backlog updated accordingly.
- The backlog is continually prioritised by the product owner.
- Each sprint planning meeting a portion of time is put aside to estimate the bug backlog, assigning estimates to new bugs and revising old bug estimates armed with any new information gathered.
This process remains ongoing every sprint.
If at any point the total estimate of the bug backlog, your bug debt, exceeds your sprint capacity then you are no longer a sprint away from shippable. You’re debts have exceeded your means which in this model, as in life, is not a tenable position! As such, as soon as this situation occurs it is immediately resolved by taking as many bugs from the top of the backlog off and feeding them into the next sprint as is necessary to reduce your debt back to a sprint’s worth.
Working in this manner is an effective way to manage bugs and has some clear advantages.
Giving the product owner visibility of the bug backlog for prioritisation keeps him very much aware that bugs exist but, will also make him aware, through the estimation, of how minor the effort of fixing these is in relation to the effort expended on value add functionality. This will help provide perspective and reinforce the perception of quality of the teams’ deliveries.
Re-estimating the backlog every sprint keeps the bugs in the teams’ consciousness and will allow them to address the issue if they are making a modification to a problem area to facilitate new functionality and it doesn’t cause impact. It can also act as an ongoing aid memoir of what has gone wrong previously to help people avoid similar bugs in the future.