Do elite software developers exist?
People have been debating for decades about the notion of a software developer who is "elite". Sometimes this person is described as a "rockstar developer" or a "10X" developer.
Not everyone agrees about this issue. A little over a year ago, Scott Hanselman wrote a blog entry entitled The Myth of the Rockstar Programmer, which makes some very good points and mostly argues against the notion of a developer who is dramatically more talented than average.
More recently Paul Graham wrote an essay entitled Let the Other 95% of Great Programmers In, which asserts that some programmers are exceptional and proceeds from that notion to an argument for change in immigration policy.
I want to shine a light on this question by comparing the software development profession to a couple of others.
In the world of sports, some people are simply a LOT more talented than others.
I know of basketball player who was amazing in high school. He was the most valuable player at his school, and he led his team to many victories.
But when he tried to make the team at a junior college, he just wasn't good enough.
And most juco players probably would have no chance at making the roster of a mid-major school like Bradley.
And most of the players on Bradley's roster probably wouldn't make it at a major conference school like Nebraska.
And in any given year, the players at Nebraska probably wouldn't be good enough to start at an elite school like Kentucky.
And most of the players on Kentucky rosters just aren't good enough to play in the NBA.
And lots of guys make the NBA but just aren't good enough to be a starter.
And the average starter in the NBA is far less talented than Michael Jordan or LeBron James.
I could cite lots of other examples from golf, tennis, American football, and so on. All sports have very large distances between good and elite. And in general, that distance is composed mostly of talent, not preparation. A mid-level PGA tour golfer can get better by practice and training, but such disciplines will never help him reach the level of Tiger Woods or Jack Nicklaus.
In sports, the existence of elite participants is widely understood and accepted. In part, this is because sports have good ways of keeping score. They have commonly accepted ways to measure things. At the bare minimum, for each contest, we need a way to know who won and who lost.
It is generally understood that a single contest is not always won by the most talented player or team. If the stronger player has a bad day and the weaker player has a good day, you can get an "upset". But if your overall record after some number of contests is sufficiently strong, you will be considered more talented, because no other explanation fits the data.
If your record against Roger Federer is 1-0, nobody is sure what to think about you. You might be more talented than Roger. More than likely, you are not. But it's really hard to claim you have more talent than Roger Federer if your record against him is 1-20. The scoring system is what enables us to wonder if Roger Federer might be the greatest tennis player of all time.
Suppose I woke up tomorrow morning with the ability to always hit a golf ball into the cup from 150 yards out. This feat is obviously possible, since I did it once. Now let's pretend that I could do it every time.
Because of the scoring system, that's all I would need. I don't need luck. I don't need to know "the right people". I simply have to play the US open qualifying rounds, (which anybody can do) and I win them all. Then I win the US open. That gets me invited to the other tournaments. And I win them all.
Because of talent and a scoring system, Sports Illustrated would be forced to run a cover photo of the best golfer in the world, an overweight middle-aged guy with bad hair.
So, in summary, the sports world has:
- People who are vastly more talented than others
- Common understanding that a "good" player cannot become an "elite" player through training
- A scoring system which identifies elite people
Certainly I think we can say that in every profession, some people are better than others. No matter what the job, the excellent people stand out.
The question here is one of degree. How large is the gap between "excellent" and "average"?
I think there are lots of professions where the talent differential is much smaller than it is in sports. For this blog entry, I'm going to use accounting as an example.
(I might be on thin ice here. I need an example of a profession which does not have the same kind of enormous talent differentials that we see in sports. I could choose something like lawn mowing, but the comparison to software will work better with a field that typically requires college education. I mean no offense to accountants or bookkeepers. And if there actually is a Peyton Manning in the world of "assets=liabilities+capital", I'll be happy to stand corrected.)
Accounting is a serious profession. Most accountants have a four-year college degree or equivalent. Admission to top accounting schools is competitive. The CPA exam is hard.
But as far as I can tell, being a good accountant is mostly a function of good training. I don't hear people described as a "born accountant". I don't see people arguing about whether one accountant is 10X more productive than the average.
Talent in accounting does not appear to distinguish the elite. Rather, it distinguishes the competent. Some folks simply were not born with the ability to complete the degree. Some folks simply lack the ability to do accounting work without making frequent mistakes. Those people, in the world of accounting, are not competent.
But it is roughly true that all competent accountants have the same level of talent. And when I say "roughly true", what I mean is that the best competent accountant is much, much closer to the worst competent accountant than Phil Mickelson is to the golf coach at your local high school.
There is a reasonable expectation that anyone who has completed the proper education and licensing will be employable as an accountant. In other words, if you can get the degree and pass the exam, you can "go pro" in accounting.
In fact, there is a common understanding that those with more training are likely to hold more senior positions. A masters degree in accounting usually brings better job opportunities and higher compensation than a bachelor's degree.
So in summary, the world of accounting has:
- Not much variation in talent among its competent practitioners
- Tendency to correlate rewards with education and experience
- Professional licensing requirements
Some people believe in the rockstar programmer. To a certain extent, I do. Why? Because my experiences cannot be explained any other way.
I have seen talent differentials that seem very large. I know programmers with ability that seems to be vastly greater than that of the average programmer.
Does that mean I believe that an elite programmers can do 10X the volume of work as an average programmer? No. As Hanselman said, that's just nonsense.
The term "10X developer" is maybe the worst way of describing an elite programmer, because it is quantitative. It invites disagreement. Numbers are always easier to quibble with.
Also, when people see "10X", they immediately assume it must refer to work volume. But measuring the work of a programmer is notoriously hard (read: impossible). Some of my best days as a programmer were days when all I did was delete code.
We should consider the possibility that someone could have 10X talent (whatever that means) without necessarily generating 10X output volume. Maybe the 10X shows up in quality instead of quantity. Maybe this is why elite developers are not paid 10X the average developer.
Anyway, I doubt the talent differentials in software are as extreme as they are in sports, but I'm pretty sure that some developers are a LOT more talented than others.
And I've seen no indication at all that education can be used to turn a good programmer into and great one. In this sense, I believe that software is more like sports than accounting. Experience and training matter, but they won't make anyone elite. Some people were born with a talent for programming that cannot be obtained in any other way. In fact, some of the best programmers I know have no college degree.
Nonetheless, when I am hiring a developer, I do place some value on whether they have a computer science degree from a good school or not. In part, this is because I believe experience and training do matter. Beyond that, I see a positive statistical correlation even though I don't always see cause and effect.
But I readily acknowledge that I can't prove any of this, because, unlike sports, we have no scoring system.
For this reason, some folks want to treat software development like any other white collar profession. My opinion is that looking at software through the lens of accounting doesn't work well, especially if you are doing so while trying to employ software developers.
I also readily acknowledge that these opinions can trigger strong emotions.
In sports, it is safe to speak easily of talent differentials. Everyone understands that most people don't make the big leagues. Everyone agrees that elite players exist.
In software development, whenever we mention the possibility of elite programmers, we can trigger strong negative emotions. We can't prove huge talent differentials exist. We have no good way of measuring them.
To say that there are elite programmers is to suggest that I might not be one of them, even thought I was trained for my job, I have a degree, and I make a living doing it. You are talking about my livelihood and my identity. These are probably core issues for me. There's a good chance you are triggering some strong emotions. There's a good chance I will overreact to those emotions.
In short, any discussion of the notion of elite programmers is almost perfectly designed to trigger emotions that threaten the quality of the discussion. This blog entry is going to make some people mad at me. I regret that.
But the fact that this issue is controversial makes it interesting. And I like talking about interesting topics, as long as the discussion doesn't turn ugly. (For my defintion of "ugly", as well as my guidance on how to discuss tough topics productively, see my recent blog entry entitled How to make the Internet a nicer place to live.)
Postscript: Amateurs and Professionals
While I was writing this, I found it interesting to think about the issue of amateurs in sports, accounting, and software.
(I do not use the word amateur as a pejorative. The root word of amateur means to love. Some people play golf for the love of the game.)
As far as I can tell, there are no amateur accountants. Some people love being accountants, but nobody does accounting as a hobby. People who do accounting are either doing it for money or as volunteer work for a cause.
Sports are different. In most every sport, there is a very large pool of amateurs and a very small pool of professionals. The vast majority of all tennis players on the planet are not getting paid to play tennis.
Broadly speaking, the difference between amateur and pro in sports is talent. Not everybody makes it to the big leagues.
In software development, just like in sports, we have a large collection of amateurs. Some people write code because they love doing it. This has brought us a great deal of open source software.
And we have a bunch of pros doing software as well. In fact, we have far more professionals in software than in sports.
But we cannot generalize that those who write code out of love are less talented than those who write code for money. In fact, it is easy to find examples of Possibly-Rockstar developers who are working on open source projects for fun.
Anyway, I find myself wondering if software development might be unique in terms of the attributes discussed here in this blog entry. Does any other profession have the following profile?
- Anecdotal evidence of huge talent differentials, which some dispute, and which cannot be proven
- Lots of professionals, lots of amateurs, no general difference in talent level
- Unclear or disputed correlations between education and ability