As was mentioned in a previous post, a poorly chosen user story will make it tough for the team to deliver, wasting time and potentially effort with poor control over the investment. On the other hand, a well chosen user story will support the early delivery of valuable results.
The creation of good user stories depends on a technique called "Slicing", i.e. preparing user stories in a fashion that they become immediately useful once completed.
Horizontal slicing is badA poor approach to slicing is cutting a huge story into horizontal slices. Let us use our "World Hunger" example to explain this approach:
We may want to resolve World Hunger in the following manner:
- Obtain enough food to feed the entire world
- Gather enough volunteers to distribute this food in the entire world
- Establish the logistics to accomplish the distribution process
- Obtain political support (permission, visa, military/police protection) for the distribution
Delivering with vertical slices
As previously discussed, a vertical slice is intended to deliver fast, with limited scope.
"Feed one person for one day" is a limited task, it produces visible, measurable results and permits scaling.
The result from "feed 1 person for one day" is visible and can be subjected to Continous Improvement. Each day, each person contributes to success and regardless of how far we get, the feeling of accomplishment stays with us.
Once 1 person has been supplied, we can enlarge the process to feed 2, then 5, then 10.
All of a sudden, we will see that we are more efficient by centralizing the supply process, so we set up a user story like "As food distributor, I would like a central place where I can always pick up the food baskets so that I save time in getting food to the Needy."
Once we reach 100 people fed, we may get into stories like "As charity, we need media coverage, so that we can obtain funding to feed another 1000 people"
These stories are again, limited in scope, provide a good measure of success and can be completed in a limited amount of time.
Maybe we need to rework our former approach (by Refactoring) but maybe we can just continue doing things as before.