Uncertainty and Agile Requirements
The key value of Agile methods is to help you to manage uncertainty. By being incremental and iterative, you manage risks by not investing a lot of effort in specifying things that may “wrong.” At the start of each iteration you can look at what you have and decide that it’s the right thing, in which case you can build on it, or the wrong thing, in which case you can try something else. Since you’ve only invested a small amount of effort relative to the specification you do in a waterfall process, you’ve wasted less effort and, in the end, money if you are wrong.
This approach of small stories with only some details works really well in many cases. An agile team runs into trouble when the project team confuses “uncertainty” with “vagueness.” To be successful, an agile team needs to work off of a backlog that has stories that are precise enough that the team can iterate effectively with the stakeholders at the end of each iteration, and can develop with a high velocity. It’s important to add precision even if you have uncertainties. While it’s important to be as accurate as possible, don’t use your lack of certainty about a requirement as an excuse to accept a lack of precision. When you have a good target to aim for (and you hit it) you can iterate quickly and judge if you are hitting the right targets.
How do you tell that you have enough precision? This varies from team to team. For a team that has been together for a time and has a clear shared vision, a very brief statement of goals might well be enough. For a project where the vision is less clear, a longer conversation may be necessary. Three concrete tests are:
-
Can the team estimate a story? (See Agile Estimating and Planning for more about estimating.) If the answer is “there is not enough information to estimate” then the story is too vague, and the team and the product owner need to meet to make sure that they understand the options. If the team estimates a story that the Product Owner thought was simple at 3 weeks, you have a raised a flag that you need more conversation to understand what the PO really wants.
-
Can you provide three options for how to implement the the story, or 3 variation of what the user experience will be? If you find yourself developing many more that seem plausable, the story is too vague, and if you can only develop one or two, then the there is not enough information for you to think through the story.
-
Can you test the story? If you can’t come up with a a reasonable high-level test plan, then the story is too vague. (Mike Cohn has written an excellent article about the value of planning with the larger team.)
While being able to do all 3 for a story is nice, being able to feel like you can estimate with confidence is the one thing that you should do to feel confident that the stories are well developed. If you can’t estimate based on what you know about the story, the good news is that the very act of trying to come up with an estimate, options, or a test plan will help you refine the story.
One might say that this is too much planning for an agile process, and that this level of detail sounds kind of like a “waterfall.” And at a high level it seems related to the Cone Of Uncertainty, which is a model for waterfall development. The difference is that we still don’t need or want to have fully defined specifications at the start of the project; as we approach a development iteration, we want enough detail to have a development target that a stakeholder can evaluate.
At the end of an iteration when something isn’t quite right, you want your stakeholders to say “that’s not what I want” rather than argue over what they meant. The latter will still happen, and it’s OK when it does. By being precise about what you think you want to build, you will identify the high risk areas of a project early on, so that you can take full advantage of the risk management benefits of agile.