What are the differences between a program manager and a software architect?
Program Manager = project manager in a better suit. Software Architect = Software Engineer in a cleaner T-shirt.
Program Manager: non-programmer with the respect of programmers
Software Architect: programmer without the respect of programmers
Program Manager: Has understanding of customer/market requirements and drives the specifications. He is aware of the dev environment (language, tools etc) and writes the product spec in such a way that is understood by developers. If dev/test teams need clarity on requirements they go to Program Manager.
Architect: Given a problem, designs a software solution. This includes program control flow, where components are located, how they interact and class design etc.
While the Architect position is quite un-ambiguous, different companies have different meaning for Program Managers.
Program Manager knows the business requirements and the view of the product from the customer's perspective. Thus, this is like a project manager if one takes a product to be like a project.
Software Architect knows the technical requirements and the view of the product from the developer's perspective. Thus, this is like a developer being the lead and determining the overall structure of things.
At least that is how I differentiate them.
A program manager oversees the health and progress of a deliverable (e.g., a product). This includes managing people and their time, projecting and eliminating cost overruns, ensuring that individual project milestones coincide, answering to the stakeholders on the state of the deliverable, defining standards and infrastructure, and so on.
"Software architect" is a somewhat nebulous term that describes someone whose output is the design (and possibly the construction) of software. This can be anything from one part of a project to the entire product. The software architect works with the program manager to ensure that the software's design matches the intent and goals of the product, adheres to the standards, follows the processes mandated in a governance model, meets the financial requirements, and so on.
In 'The mythical man-month' Frederick P.Brooks compares the Program Manager to a producer, and the Software architect to a movie editor.
In the current fashion of 'Portfolio based project management' the Program Manager is a lead position in the Project Management Office responsible for several Project Managers and multiple projects in progress. The Program Manager typically exist in midsized and larger enterprises and they own the project artifacts and understand the business. They report to executive level management and live and die by the budget and timeline. The title is not typically used in relation to software programs but the general meaning of program. In the portfolio model a business has a portfolio of projects organized into programs with each program breaking down into projects.
A Software Architect in an enterprise is a technical individual responsible for the integration of multiple systems and applications within the business. The person becomes architect by understanding the business processes and enabling technology that runs the business on a day to basis. In enterprises the architect career track has become a way for technology minded individuals to advance without resorting to the Dark Side (ie management).
I've come across two quite different uses of the term Program Manager in software development.
One is what I think of as the Microsoft version, which is analagous to a product manager in other companies. They are outward facing, so they look at what 'stakeholders' (customers, the business, etc.) want from the product, and communicate this to the development team. I believe Microsoft typically pairs the program manager with a technical lead of some sort, who actually leads the development team. I don't have any direct experience of this type of program manager (at least under that name), most of what I know I've learned by reading Spolsky articles.
The other use of the term is what I think of as the British OGC Programme Manager usage. Since I've worked in the UK for the past 11 years, I don't know how widely the term is used in the US or elsewhere. This type of Programme Manager oversees multiple project managers. A 'programme' in this sense is a large effort which requires coordinating multiple projects, often across multiple disciplines. An IT programme may have one or more software development projects, along with a project to design and build the hosting infrastructure, create a support organisation, as well as non-technical projects such as planning a marketing campaign.
"Software architect" is also used in different ways, but generally speaking, they all tend to mean someone much more technical than a program manager of any stripe. It is typically a technical leadership role.
If the software doesn't sell you can talk to the Progam Manager (and sales/marketing), if the software doesn't work you can talk to the Software Architect. Program Manager has a greater concentration on the commercial side of things.