When I teach agile, I explain I like small and short stories. I want to see value in the product every day.
Many developers can't do that. That's because they have interdependencies with other teams—not developers on their team, but other teams.
They can't implement in the way the picture next to this shows: small, coherent slices through the architecture.
Instead, they implement in curlicues.
When you implement by curlicues, you often have to wait for other teams. You might have component teams. You might have performance teams. But you can't implement in nice “straight” features. Your features are complex and don't take a straight line through the architecture.
When I work with people who have curlicues instead of straight lines through the architecture, I often discover that the different teams can complete parts of features in one iteration. (It doesn't matter how long the iteration is.) But completing an entire feature? Because that takes the efforts of several teams, the team members believe they have interdependencies and the full feature often takes longer than one iteration.
The teams are correct. They have interdependencies. Sometimes, those interdependencies are quite difficult to see when you start. You only know that they exist when you get stuck partway in the feature.
Implementing by curlicue creates delays. The iteration is not the two weeks, three weeks, four weeks. No, the iteration can be as long as eight, nine, or ten weeks. That's because each piece of the curlicue has to get to the top of each team's backlog. The teams might have different product owners who don't realize each arc of the curlicue is actually related to each other, that you need all of them to become one finished story.
In the meantime, each team has work in progress (WIP) and might not realize it. Or they do realize it, but they can't get “credit” for their work.
What can you do if you are in this pickle?
- Consider asking the component teams to self-organize into feature teams.
- Ask the teams and product owners to collaborate on backlog ranking for each team according to total feature. This will allow the teams to work together, as if they are in a program.
- Ask one team to do the entire feature. Stop asking component teams to specialize in one component. That would allow the teams to see what the smallest value is, and implement that. (Repeat until you get the entire feature.)
- Make the stories smaller to see the value build. When I see this, I often see very large stories. Too often, the teams work across the architecture, doing platform work, database work, GUI work, rather than see the simplest possible feature that would allow everyone to see the value.
I bet you have other alternatives you might consider. If you see other alternatives, please comment. I would like to help more teams see how to manage their interdependencies or remove them altogether.
The first post was How Long Are Your Iterations, Part 1.