What is an architect ? There are many definitions around, varying from "an elitist in an ivory tower throwing down incomprehensible documents" to "a developer more equal than others". In a previous post I quite boldly stated that an architect always should be a coder and nearly everybody seemed to agree on that. But an architect is more than just a coder. Constructing a building is not throwing an amount of bricks and timber on a heap, you need an architect who will split and organize the job in building walls, constructing the roof, laying the plumbing, etc. To construct software you also have to split the project into manageable parts. To get a separation and lineup of user interactions, concerns and dependencies you need a person who knows how to do that. And that's imho a good workable definition of an architect: somebody who gives a technical structure to the project. For this structure to be constructible the architect has to speak the same language as the constructors, he has to code.
In comes the program manager (PM). What are usually his roles ?
- Coach and motivate his team members
- Organize the work to be done
- Report to management
The first role is a matter of personality. The PM might be a total jerk but just one guy on the team with radiating passion and humor can boost the morale and productivity to unknown heights. He (she) does not have to be a technical wonder, just making the workplace a pleasant place is the wonder itself. No PM required.
The second role is the hardest. To organize the work you need to be able to split the work to give each developer a well defined part to work on. This is important for a "junior" or somebody new on the project to prevent them from drowning. But this is even more important for somebody I call the "over experienced developer". They have been everywhere and done everything. But on their way they forgot the main mantra of software development "keep learning" and still write software in the old DOS style. Their lines of code own the machine. In making their lines work they will change and adapt code all over the project. This may sound somewhat exaggerated but I have seen people like this singlehanded completely ruining a project. Several times. The role of the PM here is to restrict these people, give them a well isolated piece of work.
My main point is that to clearly separate the work the PM needs knowledge on how to do that in a technical way. In other words he has to be an architect.
So what to do with a PM who can't get along with his team-mates and doesn't understand architecture ? This leaves the third role. All that needs is a couple of Office macro's and a cell phone. Everybody can do that. So a good PM should have a social personality (having an Xbox might be enough) and be an architect (and thus be a coder). Which is a rare combination. Real good PM's are rare.