Wednesday, April 18, 2007

One Story Flow

One of the practices in Lean is this idea of One Piece Flow. What does this mean exactly? It focuses on getting more components completed more quickly by focusing on the completion of each one instead of having too much work in process. The thinking is that if your team can produce one component quickly with quality, you will have peak efficiency for future components.

So, where does this fit into Agile? In iteration planning, the team is working with a set of Stories. Here's where you can go in two different directions and has been a constant challenge in our organization. Where you go from here can potentially have two very different results.

First, you could ask the team who wants to work on each Story. Each individual responsible for the Story can then go off and determine the Tasks and Tests necessary to complete the Story. So, if you have a team of five developers, you will have five Stories being worked on (at a minimum, they may take on more Stories if they believe they have time in the Iteration and the Stories are small enough).

Or, you could have the entire team in Iteration Planning determine both the Tests and Tasks necessary for the first two or three Stories (more if you have a smooth process ). Then, have the team implement the first Story together (or as many team members as possible). If there isn't enough work for everyone, some go and start implementing the second Story. If the team members responsible for the first Story need help, others working on the second Story join the effort. The goal here is for the team to get each Story implemented as quickly as possible before they go on to the next Story. This is what I will coin "One Story Flow".

As I mention, we are still really struggling with this because it has been the nature of developers to have each person work on their individual piece and to bring the pieces together during some time of integration. However, this way of thinking starts to produce mini-Waterfalls within each iteration. Also, I have seen more unfinished Stories as a result. I would rather have more Stories that have been carried over to the next iteration at 0% than at 50%. I would also want more Stories that have been completed by the team at 100%.

If you are struggling with the team's performance and completion of Stories, try the "One Story Flow" approach. You will have more flexibility as a team and the team will be more in sync on how each Story has been implemented and how it contributes to the big picture of the product. More discussions up front will resolve conflicts and turn assumptions into facts. Finding ways to implement one Story after another will address issues such as specialization of skills, knowledge, and bottlenecks in the development process. These are painful but good things to discover. Because if the team can find ways to implement one Story better, they will be able to implement all Stories better!


Ilja Preuss said...

Very thoughtprovoking, thanks!

What would be your advice to a team of seven developers, with story sizes of 4 to 24 person hours, that is interested in giving it a try?

Skip Angel said...


We actually have a team smaller than this and are making it work. As long as you don't assign stories to developers ahead of time, and make sure that the team is determining the tasks for each story you should be in good shape. If those things happen, then developers can "sign up" for the tasks for the highest priority story if they believe they can fulfill the work. Sometimes this will be challenging because the particular developer may not have the right skills.

Because of this, developers tend to try and specialize in particular technical areas and become the "go-to" people. This is a BAD thing because it creates dependencies that will not allow you to be successful in "One Story Flow". The team should always work towards sharing knowledge and gaining skills so that each developer can understand any part of the system to be able to grab tasks/stories based solely on customer value, This is the ultimate goal that you want to obtain.