A team are planning their next sprint. One of the developers looks anxious:
“What do you mean we are changing the way we list items? This is going to be messy – does finance know? Well fine, we can do it, but it’s not on me when we have to roll back.”
Sound familiar? When the detail of what needs to be built gets decided too close to development, the integrity of your flow of requirements from idea to reality becomes sensitive to small events. The above statement is paraphrased from a real developer on a team building a financial research product. Someone was out of the office for one day, and a decision was made in their absence because “we needed to get on with it”.
A team are reviewing the work completed in the last sprint:
“It’s the end of the sprint but these features are not ‘done done’. I guess we’ll have to carry them over (again).”
It is perfectly normal for a team to miss their forecast now and then. If it happens most times, there is a very good chance that the following pattern has been established:
- Sizing is done during sprint planning.
- There is no time for the detailed task breakdown or solution design that can help teams forecast effectively.
- The team may not feel accountable for improving their forecasting and refinement practices.
- Planning is painful and cyclic because the no one understands the stories
A team are refining their backlog ahead of sprint planning:
“We forgot to submit this feature for SecArch review, so we’ll have to postpone it for a couple of sprints”
External dependencies increase complexity and ideally development teams should have the skills and mandate to handle architecture, design, and security reviews themselves. If you are not there yet, a mitigation is having clarity over what is coming and what needs to have been done by what stage.
The solution: backlog refinement
In other words, detailed business analysis, documented well, organised effectively, and executed at the right time. Backlog refinement is a general term encompassing all of the analysis that takes place before the work is started. This might include:
- A regular meeting with the whole team to estimate features and agree acceptance criteria;
- Smaller groups working on test plans, architecture, and design;
- Individual specialists preparing information to be discussed with the team;
- Anything that helps the team plan and forecast effectively before they start the work.
This is bad news if you interpreted the line in the agile manifesto “individuals and interactions over comprehensive documentation” to mean “just make it up on the fly without having to come to any boring meetings”. The level of detail required to bring a successful product to market is broadly the same whether you employ traditional or agile methods; it’s just a question of timing. In waterfall, all of the analysis is done up-front, which takes time and makes responding to change difficult.
Conversely, taking an agile approach means the detailed analysis is simply deferred until there is commitment to build each feature. This takes inspiration from the dramatic productivity gains achieved in lean manufacturing piloted by Toyota in the 1950s. Here, “just in time” delivery of components reduced warehouse costs and prevented waste as inventory become obsolete. The trick is to tune your system to establish a buffer so you don’t run out of work and set that buffer at the lowest safe level.
Set your product backlog refinement buffers
Before work begins on each feature, it’s likely that the following has happened:
- A high level description (such as a user story) has been written.
- The team have sized / estimated the effort required to build it.
- Acceptance criteria have been written.
- Supporting documentation has been created (wireframes, architecture diagrams, specifications, etc)
Make your own list of these types of analysis, and note down when you currently do the work. For many of the teams we have been invited to help, it looks something like this:
|Create vision for release||Never|
|Define scope for release||A few sprints too late|
|Write user stories||1 week – 1 year before sprint planning|
|Create wireframes||6 months in advance and being created faster than the code is being written|
|Estimate effort for user stories||During sprint planning|
|Write acceptance criteria||During sprint planning|
|Create technical sub-tasks||After sprint planning|
|Define a sprint goal||We treat the backlog like a tapas menu|
Review of timings
We find that considerable improvement may be made by simply reviewing these timings based on the lean principles that Toyota proved so effective. In lean, this became known as deciding as late as possible and was later codified to be a fundamental lean principle. The last part of that phrase is crucial: “as possible” – or to expand this a little, “Decide as late as possible without compromising your ability to do the job effectively”. The advantage of deciding later is you are not constrained by your choice. For example, if you have 6 months worth of wireframes then changing the plan would involve throwing away a considerable amount of work. To find when “as late as possible” might be, ask yourself when the last responsible moment might be. Here is an example of how this worked out at one organisation:
|ANALYSIS||LAST RESPONSIBLE MOMENT||IMPACT OF DECIDING LATER|
|Create vision for release||Before the release is funded||Stakeholders pull the release in different directions|
|Define scope for release||Before first sprint||Expectations over delivery dates and costs difficulty to manage|
|Write user stories||3 sprints in advance and written for all known requirements in next release||Developers have no idea what is coming up, and may lose a sense of purpose|
|Create wireframes||1 sprint in advance||More difficult to plan technical solution|
|Estimate effort for user stories||All known work for next release||Reduced ability to forecast time and cost of release, and less time to focus on technical detail during planning|
|Write acceptance criteria||2 sprints in advance||Less time to consider technical solutions and reach consensus|
|Create technical sub-tasks||During sprint planning||Items from the sprint are routinely rolled over to the next sprint as they were poorly understood|
This table worked for one organisation, but it will not work for you.
An agile organisation thrives on inspection and adaptation of the work being done and, crucially, the process for doing it. If you want to reduce confusion, uncertainty and delays in your team then a good start would be to theme a retrospective around backlog refinement with an agenda as follows:
- Make your own list of requirements analysis and add in anything you think might be missing.
- Get together as a team and try to guess what the last responsible moment might be for each form of analysis.
- Implement your schedule by regularly holding refinement sessions to get each backlog item up to the level of detail required.
- Assess the results regularly during retrospectives. If you think you are analysing something too early or too late, change it!