Originally written by Jann Thomas at the LeadingAgile blog.
First, I would like to credit Eric Ries in his 2010 Web 2.0 speech for giving me the idea for these awesome graphics. If you have never seen the speech then I highly recommend the version found on YouTube. I have always admired people with creative slides who can capture ideas with elegant simplicity. Since my artistic ability peaked in the first grade, the images in this post demonstrate my foray into abstract expressionism and hopefully convey the point of why we in software need iterative planning.
Unknown Problem | Unknown Solution
Most software changes start life in the state of an unknown problem with an unknown solution. Now the product mangers reading this may beg to differ but, most of the time a vague idea on having the software do something is not a known problem space. Say for instance I want to allow uninsured people to buy insurance as a government subsidized rate. Most of us can imagine that this is a huge problem space and truly we would have no idea how to make this happen. In this case the problem space and the solution space is unknown. In order to plan a software delivery that will solve the want above, I need to clearly understand the problem that needs to be solved. To do this in agile software delivery we create something called a roadmap. The roadmap is a way of breaking this big unknown problem into smaller chucks that we can estimate (“guess wrong”) as to how long it will take to implement them. It is usually at this stage that these chunks of work are funded.
Known Problem | Unknown Solution
Now a software release is ready to be planned with some chunk of the roadmap. In order to do that, the problem should be fairly well known and can be broken it into pieces. These pieces can be estimated (“guessed wrong”) and slotted into delivery iterations. Lets say we want to allow people to log into a website and sign up for insurance. This is a relatively well-known problem space, there are security concerns, 3rd party integrations, databases, platforms and deployments. Maybe this will not all fit in one release, but with more elaboration and planning a reasonable release plan with a list of risks will emerge. It is usually at this stage that the guess of the size of the thing in the roadmap is known to be wrong and changes must be made to the roadmap.
Known Problem | Known Solution
Finally we are ready to plan an iteration. So take a chunk of the release plan and break it into pieces and as a team there needs to be some certainty that these pieces of work can be completed in the sprint. If there are still things that don’t have a clear solution then don’t take those in the sprint and take a spike or research item instead. It is now that the wrongness of the guess during release planning is known and adjustments can be made both to the release plan and the roadmap.
Planning and elaboration go hand in hand as items move from unknown problem -unknown solution to known problem-unknown solution to known problem – known solution.