or
Thinking like a business sponsor
I think it's a fairly well established fact that engineering types in general, and software developers in particular, don't make very good project managers (with the notable exception of many of my
Finetix coworkers). This especially holds true for the types of projects that they excel in from an engineering perspective- complex problems involving lots of variables and esoteric mathematical requirements.
I am going to go out on a limb here and suggest that the biggest mistake that techies make is that they tend to operate solely at the machine level. Project management requires you to forget about the immediate technical hurdle,
turn off your computer, get up out of your chair, walk around, and talk to the people who use your software. It works better if you bring them a picture of how you currently envision the software's architecture/user interface/whatever (thanks John).
Solving software problems is different than solving people problems. Software problems are nice tidy little things, with elegant solutions that you can squeeze into a 64K ROM chip. Human solutions are never that simple- especially in software, when you are very likely eliminating someone's job by making it automatic, or making it so easy that a high school intern can do it. Also, in project management you sometimes have to cut corners and get the easy wins, even if your engineer's instinct for elegance cringes.
Earlier, I make a special distinction for software developers. The reason for this is that software is so easy to change- you don't have a physical product whose shape, or electrical requirements, or weight you have to take into consideration. Its the rare software these days that cant run on basically every desktop machine out there, so if you want to use that fancy new framework that takes up 20 MB of RAM on top of your application, go ahead. This flexibility tends to make software developers (the better ones, anyway) perfectionists about their code, but that same instinct will kill you when you need to ship a product. Unless you work for NASA, where your code literally has lives at stake, it will benefit your users more to have a product that works 90% of the time than a product that works 100% of the time 6 months or a year later.
After all, that how Windows came to be ;-)