In Organizing an Agile Program: Part 1, Introduction, I discussed the difference between hierarchies and networks. I used Scrum of Scrums as an example. It could be any organizing hierarchy. Remember, I like Scrum as a way to organize a project team's work. I also like lean. I like XP. I like unbranded agile. I like anything that helps a team deliver features quickly and get feedback. I'm not religious about what any project team in the program uses.
What works for small programs is going to be different from what works for medium programs. It is going to be different from what works for large programs. Why? It's the scaling problem and the communication path problem. Larger programs are not linear scales of smaller programs. That's why I asked you how large your program was at the beginning.
Using a Network in a Medium Size Program
When you look at the small world network image here, you can see how the teams are connected. This might even be ideal for a five-team program. But what happens with a nine-team program? According to me, that's still a medium size program. And I claim that not all the teams have to be fully connected. In fact, I claim that they can't be. No one can have that develop and maintain that many “intimate” connections with other people at work.
Note: I realize Dunbar's Number is about 150, maybe more, maybe less. Dunbar's Number is the number of people you can maintain social relationships with. On a medium-size program, you have a shot of maintaining relationships with many of the people on the program. Maybe not all of them, but many of them. That helps you accomplish the work.
Can you really track all the people on your program and know what the heck is going on with each of them? No, not when it comes to their code or tests or features. Never mind when it comes to their human-ness. I'm suggesting you not even try. You track enough of the other people do to be able to finish your work. Some people are well-connected with others. Some are not. This is why communities of practice help. (This is why lunch rooms help even more.)
What you are able to do, however, is ask a question of your network and get the answer. Fast. You cooperate to produce the shippable product.
You work with the people on your team and maintain relationships with a few other people. That's what small world networks do. That's why communities of practice work. That's why the rumor mill works so well in organizations. We have some well-connected people, and a bunch of people who are not so well-connected. And, that's okay.
Here's the key point: you don't have to go up and down a hierarchy to accomplish work. You either know who to ask to accomplish work, or they know who to ask. Nobody needs to ask permission. There is no chief. There is no master. There is no hierarchy. There is cooperation.
What are the Risks in Programs?
Let's back up a minute and ask what's important to programs. Why are there standups in a team? The standups in a team are about micro-commitments to each other. They are also a way to show the status in a visible way. They help us see our risks. We can coordinate our features and see if we have too much work in progress. We ask about impediments.
That's why the Scrum of Scrums got started. All excellent reasons.
If you think about what's risky in programs, every program starts with these areas of risk:
- Coordinating the features, the backlog among and between the teams.
- Nurturing the architecture, so it evolves at the “correct” pace. Not too early so we haven't wasted time and energy on it, and not so late that we have technical architecture debt and frameworks that don't work for us.
- How to describe the status in a way that says, “Here is where we are and here is how we know when we will be done.”
- How to describe our interdependent risks. Risks can be independent of features.
Your program will have other risks that are singular to your program. But the risks of managing features among teams; coordinating architecture; explaining status; and managing risk—those big four are the big issues in program management.
So, how do we manage those risks if I claim that Scrum of Scrums is a hierarchy and doesn't work so well? Let's start with how we manage the issue of features in programs.
Programs Need Roadmaps
Programs need roadmaps so that the teams can see where they are headed. I am not saying the teams should implement ahead of this iteration's backlog. If the teams have a roadmap, they can see where they are going with the features. This helps in multiple ways:
- They can see how this feature might interconnect with another team's feature
- They can see how this feature might affect the architecture
- They can create product backlog burnup charts based on feature accomplishment
In programs, teams need to be able to look ahead. They don't need to implement ahead. That would be waste. No, we don't want that. But looking ahead is quite useful. If the teams are able to look ahead, they can talk with their product owners and help the product owners see if it makes sense to implement some features together or not. Or, if it makes sense to change the order of some features.
When I get to large programs, where several teams might work off the same backlog, I'll come back to this point. I realize that several teams working off the same backlog is not restricted to large teams, but I have a backlog for writing too, and I'm not addressing this yet.
A roadmap is a changing document. It is our best guess, based on the most recent demo. We expect it to change. We ask the program product owner to create and maintain the business value of the roadmap. We ask the product owner community to create user stories from the phrases and words on the roadmap. The teams can see which release the features might occur in, and they can see which features they're supposed to get done in this release, and most importantly now, across the program.
Some of the words are not anything like stories. Some might be close to stories. The items on the roadmap close to us in time might be closer to stories. I would expect the ones farther away to be a lot less close. I would expect them to be epic in size. It's the entire product owner community job to continually evaluate those phrases and ask, “Do we want these? If so, we need to define what they mean and create stories that represent what they mean.”
I don't care what approach the product owners use to create stories from the roadmap. But the roadmap is the 50,000 foot idea. Only the quarter that we are in has anything that might resemble stories.
Oh, and that big black line? That's what the teams need to complete this quarter. Anything below that would be great. As the teams complete the stories, the product owner community reassesses the remaining stories on the roadmap. Yes, they do. It's a ton of work.
Once you have a roadmap, the product owners can create user stories that make sense for their teams. The program product owner works with the teams, as needed.
Since the teams are feature teams, not architecture-based teams, they can create product backlog burnup charts. Now, you can tell your status by seeing where you are in the roadmap. Note that you do not need a Gantt chart. You have finished some number of features, ranked by business value. You have some number features remaining. You can finish the program at any time, because you are working by business value.
Oh, and you don't need ROI. You never try to predict anything. You can't predict anything for a team, and you certainly can't predict anything for a program.
Programs Need Architecture Nurturing
I am a huge fan of evolving the architecture in any agile program. Why? Because for all but the smallest of projects, the architecture has always changed. Now, that does not mean I don't think we should not think about the architecture as we proceed. What I like is when the project teams implement several features before they settle on a specific framework. This works especially well in small and medium-size programs.
Just-in-time architecture and evolving it is a tough thing. It's tough on the project teams. It's tough on the architects. It's so much easier to think about a framework (or frameworks) first and pick it, and attempt to bend the product to make it work. But, that's how we get a pile of technical debt, especially in a complex product, which is where you need a program.
So, as much as I would like to pick an architecture early and stick with it, even I force myself to postpone the architecture decisions as late as we can, and keep evolving the architecture as much as possible.
What is the Most Responsible Date for Architecture?
Now, sometimes “as late as we can” is the second or third iteration. But in a medium size program, the most responsible date is often later than that. And, sometimes the architects need to work in a community, wayfinding along with the feature teams. Did you see in the roadmap in Q1, where we needed a platform before we could do any “real” features? If you have a hardware product, sometimes you need to do that. You just do. But, for SaaS, you almost never do.
This means I ask for architects to be embedded into the project teams. I also ask for architects to produce an updated picture of the architecture as an output of each iteration.
Can you do this on your agile program? If you have tests to support your work, you can. Remember, agile is the most disciplined approach to product development. If you're hacking and calling it agile, well, you can call it anything you want, but it's not agile.
Explaining Status: The Standup, By Itself is Not Sufficient
When you have a small program, and you have Scrum of Scrums, the daily standup is supposed to manage all four of these issues: how the features work with the teams, how the architecture retains its integrity, what the status, and what the risks are. In a medium program, that daily standup is supposed to do the same.
Here is my question: Is your daily standup, for your Scrum of Scrums working for you? Does it have everyone you need? If so, fine. You don't need me.
But for those of you who are struggling with the hierarchy that a Scrum of Scrums brings, or, if you think your program is proceeding too slowly, you have other options. Or, if you need to know when your program will be done, you need agile program management.
One of the problems when you have a medium program is that at some point, the number of people who participate in a Scrum of Scrums of teams starts to overwhelm any one standup meeting. The issues you have cannot be resolved in a standup. The standup is not adequate for the problems you encounter.
(Remember, what was Scrum designed for? 5-7 people. What happens when you have more than 7 teams? You start to outgrow Scrum. Can you make it work? Of course you can. You can make anything work. You are a smart person, working with smart people. You can. Should you? That's another question.)
Asking “what did you complete,” or even the old “what did you do since our last standup” is the wrong question. The question is irrelevant. As your program grows, the data overwhelms the ability of the people to take the data in. Especially if the data is not useful. Are you doing continuous integration in your program? If so, you don't need to ask that question in your program.
Once you get past five teams, what you did or what you completed is not the question. You need to know what the obstacles are. You need to know what the interdependencies are. You need to know if deliverables are going to be late. That's program management.
We'll carry on with Organizing an Agile Program, Part 3, Large Programs Demand Servant Leadership. This is long enough.