People Create Great Software




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).

Software, LeadershipDave Bernard