What technical qualities do you find are lacking in Project Managers or alternatively what technical aspects of software development do you think your Project Managers should know better (I.E., Understanding of threading, understand the components to IIS/Apache, What a database index is, etc)?
It's always useful to have a project manager who has done even a little software development in his or her past. Software and the development lifecycle are hard for people to understand completely, especially if they have no real sense of how to develop complex, distributed, etc. systems.
As most of my development is web-based, I would expect any good project manager to understand the basic principles of:
- HTTP (e.g. how each call is stateless)
- Cookies
- The difference between client-side and server-side code
- The differences between a web-server, an application server, and a database
- Basic HTML
- Browser sandbox security
- Why securing your web app might be important
- What sort of things can and can't be done in a browser based app
- Cross-browser compatibility issues
- Basic usability and accessibility principles
You'd expect this would be the sort of stuff you would pick up over the course of managing a few web-based projects. Sadly, I think that probably applies to fewer than half the project managers I have known.
There are some issues with project managers that have absolutely no clue about software development. It's like an architect that has never build a single building is supposed to rebuild the twin towers.
From my point of view it's sufficient, when they have a feeling for complexity and what is possible in software and what not. (Or at least what's possible and what is freaking hard to do)
Additional knowledge about the area of software that the project is located in is beneficial too. As DanSingerman wrote, basic knowledge about the limitations of web based solutions, or for example the limitations of software that has to comply to the accessibility guidelines.
A PM does not necessarily need to know how to code or the internal stuff of databases. That's not his job.
Project managers come in many sizes, shapes and colors.
I'm a project manager myself with a programmer background. I see that as a definitive benefit. Even if I don't have the time to learn all technologies and details involved in a project, I have at least a high-level understanding of what's going on. I can detect technical bullshit if vendors or project members are trying to put it on me.
The danger there is micro management. Because I can contribute to all levels of the project does not mean that I should. Even if I know some issue better, I try to resist the urge to mess with it if the developer is doing it well enough already.
I manage my projects so that there's time for me to do some programming as well. Technical skills get rusty over time, and writing excel macros for metrics and reports is often not challenging enough to keep my saw sharp.
However, I have also worked with project managers who have had no technical background whatsoever while being successful. Their success is more based on people skills: leading, motivating, networking, negotiating etc. And they have understood they are weak in technicalities so they don't go there. Instead they have had some person in an architect/tech-lead role.
From a programmer perspective a good project manager should mainly be able to lead the team and keep them in a good mood by motivating them appropriately and by facilitating the communication among the members. Of course technical skills are always a plus but you cannot demand it. As Iaalto pointed out correctly, there should be some architect/tech-lead which takes that role in the team (and supports the project manager in technical decisions).
Software quality management skills wouldn't be bad too, meaning that it is capable of analyzing the product in terms of according (code) metrics, to establish development frequency in terms of iterations, releases..
I'm a strong believer that a project manager should have some prior hands on experience in the area that they are managing. If it's development, Sys Admin, DB, etc. - they should have had at least an entry level (1-2 years) experience so they can relate to the people they are working with. PM's main role is reducing risk throughout the project, both from a technical side and business side and in order to do that they need to understand those areas and be able to relate to the people working in those areas. A PM managing a ATM install without experience with bank personnel, ATM developers, users (most people should be by now), etc. will have a difficult time relating to those people leading to a lack of ability in identifying potential risk areas. SO - short answer is entry level background in the area they are working.