Also there is always a dearth of people and so they recruit below par people and then the below par people stick around for so long that they eventually get promoted and since they are promoted and expensive the company wants them to work on high risk and responsible stuff like architectures and management. See where I am going with this...?
What happens in the process is that quality suffers. I have literally heard people ridicule writing test cases in code, saying, "Writing code to test my code is a waste of time. If I have that kind of bandwidth I should write more production code instead".
There is this great article that says that smart people hate non intellectual work. It is extremely difficult to get a smart person do a mundane job. And a smart person doing a stupid job actually makes him stupid. Smart people usually like to work with the best tools and technologies and they like to do something that is intellectually challenging.
For once I would like to work with really smart people on a project that is really intellectually challenging.