A few months ago at Agile Boston, Mike Cottmeyer said that when he looks at teams who want to scale agile, he looks at their ability to create working teams. If they can create teams, they can scale. If they can’t, they have little hope of scaling agile. (Mike, if I’m misquoting you, I’ll correct it.)
He’s right. I’d not thought of it in those stark terms, but he’s absolutely right. You can’t do project portfolio management without a management team looking at the projects across the organization. You can’t create a program to release a complex product without a wide variety of teams who can somehow join forces: management team to decide on committing to the program, technical teams to implement features, a program team to manage the risks across the program, possibly an architecture team to advance the business value of the architecture, maybe a product owner team to manage the program backlog and have people available to the technical teams for questions about the features, and maybe a deployment team.
My focus here is program team, the cross-functional team that takes the work across the organization so the program can release a product. If you have some functional managers on the team who are trying to spread people across a variety of projects and programs, you cannot succeed.
A program needs everyone on the program devoted to the success of that program. Trying to manage people as if they were pegs in holes means that you optimize for the utilization of the people, not the program output. (See this article, Measure Throughput, Not Utilization, for how to detect when you are optimizing for people utilization.)
If you are trying to use agile for large efforts, consider how you want to organize. Leave the functional managers out of the program-level decisions. Have the functional managers manage the project portfolio, making sure everyone is assigned to just one project or program at a time. Once you have a program team, that team can manage the risks and decisions at the program level. And, the project teams manage the risks and issues at the team level.