Update 2009-09-14: There are interesting discussions of this post on hackernews. Thanks!
To only a fraction of the human race does God give the privilege of earning one’s bread doing what one would have gladly pursued free, for passion. I am very thankful.
Architects, designers, and developers of corporate systems usually have little or no voice in what gets built, or how, or why. They don't sign on, they get assigned. I know that individual developers do care passionately about their work, but usually have no way to really make a difference
I consider myself an alpha-geek. I think I have met quite some other alpha-geeks.
I tend to think that there is hardly any other group of professionals that care so much for their profession like alpha-geeks.
Regarding passion, dedication and motivation alpha-geeks are very similar to artists or master craftsmen.
Alpha-geeks usually don't (want to) make a difference between their job and their hobby:
"Tenet of professionalism: Work 40 hours for your employer and another 20 hours improving yourself." (tweet by unclebobmartin)
... at least that would be the case in an ideal world ...
In reality I have almost never met a passionate developer, that is really happy with his job.
In reality it's more likely that the alpha-geek is working the additional 20 hours, because he is frustrated with the 40 hours he had to spend for his employer... because he could not realize his ideas of real development, because he was bogged down with fabricated complexity, because he lost his way in a maze of legacy code and because he had to spend so much time and energy for bureaucratic overhead ...
This is a schizophrenic situation, and I wonder why it is so common?
Probably a lot can be credited to the Office Space clichés that can be found in corporate environments. And to the fact, that in a lot of those environments it's impossible to deliver software that matters.
But I think it's too easy to lay all the blame on corporate environments.
I think a part of this schizophrenic situation can be credited to a blame-the-others-syndrome. If things are hard and if there is friction, it's always easier to blame the others. It's only self-protection to assume the stance "If I only could do things my way, everything would be good!"
I also think software development is especially susceptible to this schizophrenia, because nowadays it almost exclusively deals with intellectual constructs. It is very easy to create a clean, wonderful notion of a perfect software system and to imagine an ideal software development process. That's because we can let our imagination run wild, since there are no real constraints in theory. At least in theory there always exists a perfect solution. That's a major difference to other (real) engineering disciplines.
It's very convenient to think that we could realize the perfect solution, if only we could do things our way...
...only in our perfect solutions we did not consider those accidental constraints like people, time, economic factors ...
A third aspect is that there are hardly any measurable characteristics in software development. Therefore personal taste, preferences and gut feelings become important. And since these are very individual, it's a logical consequence that we always have to deal with compromises when we are working with other people.
I believe that leveraging the passion and motivation of developers is a key factor for forming highly productive teams. This has been shown with different studies.
But to a certain degree this is a blade with two edges. Highly passionate developers are much more susceptible to the schizophrenia mentioned above. I think the key is to accept, that real-world software development is never perfect. Our job is it to pragmatically live with this imperfection.