Everyone does program management. Some just do it poorly.
I've used that line for a laugh at the beginning of talks, but it's true. Program management is, at its core, the act of coordinating the interfaces between teams to produce something of value. In open source projects, the "something of value" is generally the software that the community produces. Most open source communities create software, and almost none of them have a formal program manager. So why have a program manager?
The difference lies in managing the software development with intent instead of by accident. The smaller the community, the easier it is to self-coordinate. The need for intentional coordination increases as the community grows or the software becomes more complex.
In The Mythical Man Month, Fred Brooks noted that the number of communication channels goes up dramatically faster than the number of people working on a project. A program manager can help simplify the communication overhead by serving as a centralized channel for information. By lurking on mailing lists and chat channels, the program manager sees what's going on in the project and communicates that broadly to the community and the public. This way, anyone who needs to know the high-level details can look at the program manager's summary instead of paying attention to every channel themselves.
A good program manager also acts as a guide in process development and improvement. Think of processes like trails. They develop organically over time as people find the best route from one place to another. A well-worn trail makes for a faster, more predictable trip. But if everyone has their own variations on the route, the trail won't be well-worn. The program manager's job isn't to blaze a trail and say, "This is the way everyone must go!" Instead, the program manager looks for the places where the individual paths are similar and helps the community find an optimal path to share. So a program manager doesn't say, "This is the process we must follow to develop our software." That wouldn't work well in an open source project. Instead, the program manager helps define a repeatable and predictable process based on what the community is already doing.
Many activities touch program management, even if they're handled mainly by other functions in the community. Examples include schedule development, feature planning, bug triage, release decisions, and more. With such a wide range of skills, you might be hard-pressed to find one person who can be great at all of those. And even if you found such a person, they might not have enough time to devote to doing everything. It's okay to split the work among several contributors so long as everyone clearly understands their responsibilities.
Ultimately, the program manager's job is to help the community avoid surprises. They do this by communicating status across teams and ensuring everyone knows what is needed—and when—to produce another great release. By necessity, you're doing this already, so you might as well do it on purpose.
This article is based on the author's book, Program Management for Open Source Projects.
Comments are closed.