I think others have touched upon it here, but communication is the most important thing. The good PMs I've worked with have been able to communicate the project outcomes, the timeline, and specs very clearly. Beyond this they stick to their specs unless a very good reason comes up. I really appreciate this as a dev. One of the things I hate is redoing things unnecessarily. This happens if the PM hasn't been clear enough on the specs and they come up with things midway through the project (aka scope creep).
Another great aspect of a PM is being able to work cross functionally. The ones I've seen have been able to get resources to their devs if needed. Or have been able to unblock devs by connecting them with other teams. For them to be able to do this they need to have a pulse on the team. I don't mean micromanage, but they should know what's going on with work progress and any potential blockers. I've had a few PMs who have just stayed high level trying to develop business goals and continually working on specs. While this is great for planning, this forces me as a dev to step up and start prioritizing work. Which is not going to end well, especially since I don't always know the business priorities.
Finally, a great PM trusts their team and lets them work without pushing them to a deadline. I absolutely hate it when a PM tries to get me to commit to a hard date. A great PM will take information from the team to figure out a deadline to set. And be able to push back against business if someone from above is pushing a deadline on them.
Great question Stephanie, I hope all these answers help!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.