People Create Great Software
The key to creating great software lies more in people and process than in technology and engineering.
Production programming is as demanding, difficult, and creative as engineering, but its primary goal is producing a shippable product, not solving its technical problems. Shippable programs are mostly protective code that rarely—if ever—executes.
Hundreds of thousands of lines of code are dedicated to supporting obscure edge cases, platform idiosyncrasies, and error conditions. The code must then be tested vigorously and thoroughly.
These demands multiply many times the cost in both time and money of any backtracking or last-minute changes to release code. As Frank Lloyd Wright said, "You can use an eraser on the drafting table or a sledgehammer on the construction site."
Software development is considered one of the most complex endeavors ever attempted by humans, so it is always prudent to employ plenty of thought and wisdom in the execution of any software development project.“If you think hiring professionals is expensive, try hiring amateurs”
The importance of top-notch employees is old news in IT. Way back in 1975, Frederick Brooks' The Mythical Man Month described research showing how much more productive great programmers are than average ones. Depending on the metric the answer turned out to be roughly a factor of ten.
Since compensation is based on market value and not delivered value, it's unlikely any CIO pays top performers ten times more than average ones. Even three times more is a stretch, making top talent an excellent investment. Let's see: Invest two more dollars a year to get ten back -- sounds good to me.
Companies complain because they can’t produce quality software as cheaply, as reliably, and as quickly as they would like. They correctly see a shortage of good developers as a part of the problem. What they generally don’t see is that inserting a good developer into a culture designed to constrain semi-skilled programmers from doing harm is pointless because the rules/culture will constrain the new developer from doing anything significantly new and better. People, team chemistry and customer collaboration are the most important predictors of success. The software development team must invest mindshare and acquire domain knowledge very quickly and thoroughly. Success is highly dependent on talent, team dynamics and personal relationships.
Generalists are more valuable than specialists. A generalist programmer/analysts might not be quite as good as business analysts are at talking to business users; as application architects are at software engineering; or as developers are at coding -- but are good enough at all three to get the job done without the overhead required for communication and coordination. In an agile environment each programmer/analyst is, in effect, an entire self-contained, self-managed development team, so if need be you can shed capacity one at a time.
Software developers are not commodities and are not easily replaced. Research has shown that great developers are more productive than the worst developers by a factor of 10x or more (see Fred Brooks’ The Mythical Man-Month and Demarco & Lister’s Peopleware). Setting very high standards for hiring developers keeps teams small and powerful (see Google).