I hate Product Backlogs’ unrestrained tendency to grow, get messy and unmaintainable.
How Backlog Was Supposed To Work
Ideally, a Product Backlog should give the whole team a clear roadmap on work to be done.
I remember times when I actually believed this is really possible, even with a huge Backlog, but in practice in every project I worked on I struggled with keeping the Backlog up-to-date, prioritised and consistent.
Then, thanks to Roman Pichler (see Top Ten Product Backlog Tips for example) I understood that the Product Backlog requires a lot of care (well, the same way like codebase does). This includes:
- Finding right wording for user stories
- Writing acceptance criteria for stories
- Managing stories on various level of detail, decomposing them when necessary
- Removing(!) no longer valid entries from the list
- Rewriting other ones
- Getting stories estimated
- and that is probably not the end of the list.
All of this done regularly!
Woow, that is a lot of work!
In practice, most of Product Owners or people responsible for Product Backlog (including myself) do not perform most of these tasks regulary, because the only really important horizons (at least in agile/lean approach) are:
- This iteration/week
- Upcoming release or other important date, usually within a couple of weeks from now
This means that what actually matters is on the top of the Backlog. All other stories are… well… you can either say “less important at the moment” or, I believe more correctly, “waste”.
No… Well, Maybe
I am a huge fan of “Start With No” approach.
Hovewer, over and over again I observe the following scenario:
Customer: Hey, could we have feature X in our product?
Development Team: Well… it all depends on your priorities.
Customer: Yeah, this X is really important.
Development Team: OK, in our Backlog next things to work on are Y and Z. Should we do X before?
Customer: Ah, no! Y and Z are crucial too. Hm… Maybe we could implement X immediately after Y and Z?
Development Team: Yeah, sounds like a plan. Although we will still have several important things to do after Z for the upcoming release, so we will have to see how X fits.
Development Team: OK, let’s put X to the Backlog and we will see.
And you know what? Quite often this X stays in the Backlog forever.
This is what I call saying “Maybe”, instead of “No”. Backlog is a safe option to close such a conversation, but unfortunatelly later on no one dares to remove anything from there, so lower part of Product Backlog becomes Idea Trash.
Here is what I suggest:
- Keep very small, focused “Backlog” (better name “This week” or “This release”)
- Put a hard limit on number stories in it. In other words, limit WIP, where story in the backlog is also considered as “in progress”
- Anytime you are tempted to break the limit, remove less important stories from the Backlog
- Most importantly: Have a clear working agreement that removing an item from the Backlog does not mean rejecting to do it at all. You can add such a story later when it becomes important enough.
I am using such an approach on my Personal Kanban board and I would love to give it a try in a project. Actually, this post is triggered by our hassles with managing Backlog in Codebrag and by writing my thoughts down I hope to convince my teammates to give it a try 😉 [update: We have tried it in Codebrag and it works very well]
The idea behind this is making an issue of “There is always more to be done than our capacity” more (frequently) visible. I believe that having a clear backlog helps having clear mind and making better decisions.
The argument against this approach I hear mostly is that something important or innovative might be forgotten if not written down. I disagree. If a user story really “loves” me, it will come back. Otherwise it is not worth my effort.