It definitely varies from company to company, job to job, contract to contract.
My experience with program managers is good. Generally they have you in their interest and want to help for the project's cause. Good program managers make it fun and share responsibility with the rest of the team.
In my experience a good program manager:
- Fights for the team's interest.
- Shows up for work and actually does work.
- Has had a background in programming, not just read about it.
- Understands the business rules and business aspects of the program.
- Defines naming conventions, style, preferences and timelines.
- Does not wear Banana Republic Chinos, but wears flip flops, shorts and hawaiian shirts when not interfacing with customers.
In my experience a bad program manager:
- Has never written a line of code or could even understand how to email attachments. (yes they do exist!)
- Fights for the accountant's interest and does not care about the development team.
- Tries to adhere to impossible timelines, even when developers share concerns about failing.
- Has free reign to make bad business decisions, in their own personal interest and not in the company's interest.
- Wears a business suit every day, and wants everyone else to join them.
- Has schizophrenia and drives his truck into gas stations when his girlfriend talks to the guy behind the counter. (true story)
A good program manager can make life alot easier for a development team. I've had some great ones in the past who are organized, efficient, reliable, friendly and fun. It is not a requirement to have a program manager on a project, but it sure can be a huge benefit.