Scoble linked to me. Thanks dude!
However, I'm not a PM. I'm a Dev Lead. I don't know if everyone knows the break down of different jobs at Microsoft, but, in the technical areas, there are three main jobs: Program Management, Development, and Test.
The breakdown goes like this: PMs talk to customers, develop requirements and write specs, Devs implement the code to those specs and Test validates that the Devs did their job.
Of course, things never work out that cleanly. For example, the Test team are some of the people first using the product so they may have more and better feedback than just if the program works. And in a techinical area, like what I'm working on (graphics and APIs), a lot of the design work can be done by devs.
Microsoft is trying to develop higher level individual contributer developers to help lead the architecture of the product. I'm heading down that track right now. ChrisAn is another example of this. Part of this is that just because you are good at writing code doesn't mean that you are good at managing people. Beyond that, it is really hard to find PMs that can operate at the technical level necessary for some groups -- such as designing windows APIs. As a result of this, higher level individual contributer devs and technical PMs do many of the same jobs. This is why I've spent that last year or so writing specs!