This post on Program manager by Joel Spolsky describes what a program manager does, how to become a better one and what the role distinctions are. The main idea is that a program manager provides the specifications, communicates the design and serves as customer advocate.
This definition is quite similar to the task of a system engineer: (from INCOSE)
Systems Engineering is an interdisciplinary approach and means to enable the realization of successful systems. It focuses on defining customer needs and required functionality early in the development cycle, documenting requirements, then proceeding with design synthesis and system validation while considering the complete problem.
What is comparable?
- Defining customer needs – same as being customer advocate.
- Required functionality – specifications.
- Documenting the requirements – communicate.
To me is seems that the roles are very similar especially considering the following list:
- the tasks are similar
- the competence required for the job is similar
- the role is a peer to the developer
- the role should generate a positive conflict with the developer
- the role should gain respect from the programmer
So why do we have two definitions?
System engineering profession came into existence for systems that required large cooperative effort in Bell Labs.
Program manager was described in the mythical man month as the “chief programmer” with enough experience to detail the functional and performance specifications.
In my opinion these two definitions of roles come to life because of people working in different worlds using different vocabulary and still facing the same problems of complexity and distribution of work. System engineering handles complex multi disciplinary projects and designs, where program manager handles the same, but in a software only world.
Since most system are becoming more software intensive, replacing tasks done previously in hardware with software solutions, the system engineer becomes more involved in software design, in a way performing the same tasks as a program manager for software projects. The evolution of the system engineer only confirms that the distinction is only artificial only due to the nature of separation of worlds.
Back to the original post, Joel’s suggestions are valid for system engineers, especially the part of earning peers respect’s while keeping your head open and learning.
If you read this far, you should follow me on twitter here.