In Making Software: What Really Works and Why We Believe It, Steve McConnell contributes a chapter called "What Does 10x Mean? Measuring Variations in Programmer Productivity".

One of the most replicated results in software engineering research is the 10-fold difference in productivity and quality between different programmers with the same levels of experience. Researchers have also found that this difference applies at the team level, even to different teams working within the same industries.

I had thought that the "Myth of the 10x Programmer" was something relatively new. Now I know that the first studies looking at this phenomenon go back to the 1960's. In 1968 Sackman, Erickson, and Grant published their study on individual programmer productivity.

They studied professional programmers with an average of 7 years’ experience and found that the ratio of initial coding time between the best and worst programmers was about 20 to 1; the ratio of debugging times over 25 to 1; of program size 5 to 1; and of program execution speed about 10 to 1. They found no relationship between a programmer’s amount of experience and code quality or productivity.

Detailed examination of Sackman, Erickson, and Grant’s findings shows some flaws in their methodology (including combining results from programmers working in low-level programming languages with those working in high-level programming languages). However, even after accounting for the flaws, their data still shows more than a 10-fold difference between the best programmers and the worst.

Numerous studies have been published trying to prove/disprove the idea of the "High Productivity Programmer." My experience is that there are certainly people in this world who have a unique insight into their field (programming or otherwise), or a different way of solving a given problem. Knuth talks about the "ability to jump across levels of abstraction."

There is a great breakdown of people of this nature on the venerable c2 wiki. Developers with High Productivity 10x 100x 1000x, specifically mentioning Bill Joy of Sun Microsystems and Java fame:

  • very high intelligence (this may seem obvious, but it often is not mentioned, apparently because it's not P.C. to notice that not all programmers are geniuses),
  • ability to touch type (there are exceptions, but they are unusually fast with the two fingers they do use),
  • a deep consuming passion for software, such they think about it and dream about it 24 hours a day 7 days a week, not just 9 to 5. This often leads to programming nights and weekends, but that's a side-effect, not a cause.
  • a burning desire to learn the best of what everyone else in the field is doing (i.e. they keep learning beyond what may be required for the job/degree, and they find others' work of interest, so they don't have so extreme an NIH attitude as to be uninterested in finding out what others are doing),
  • enough self-confidence, probably even arrogance, so as to be unafraid to experiment and make mistakes, and to try things that no one has ever done, even if it contradicts established wisdom,
  • a flexible attitude/personal philosophy, allowing them to pursue what pragmatically works beyond the boundaries of rigid ideology (people at the other extreme will spend years finding ways to instead work within those boundaries, which may yield a bigger eventual payoff, but hinders average productivity dramatically over both the short and long term)

The two parts that stuck out the most to me were "a burning desire to learn the best of what everyone else in the field is doing" and "a flexible attitude/personal philosophy." These seem to align with the ideas reflected in having a Growth Mindset.

The power of 10x programmer can be pretty amazing, but what about a 10x (100x? 1000x?!) Team? I think enabling 10x teams will have an even greater impact on our culture. I'll dive deeper into the 10x Team in a future post.

Join the discussion on Facebook in Programming Philosophy