A lot of developer commentators point out that the best developers can easily be ten times as productive as the average ones. Why is this? I think for two main reasons:
First, unlike many jobs that are limited by physical ability, a developer is limited primarily by their own thought, which has a much broader range of ability. In other words:
- Humans are physically in the same range. An average person may be able to list 200 lbs, a very strong person may be able to list 400 lbs, or about twice as much. Look at every physical record - how fast people run, how precise they throw, how balanced they are, and the range of people's abilities is a relatively narrow spectrum.
- Most jobs are limited by physical ability. This is obvious for manual labor jobs, but even other jobs - a salesperson can only be in one place at a time, or a cook can only work as fast as their hands let them. Sure someone who knows what to do will do it faster and better, but you're limited by how fast you can physically do certain tasks.
- Software engineering is limited by your mental ability. While you need to physically type code in the keyboard (and there are shortcuts for that), most development time is spent thinking, not typing. You can essentially code as fast as you can think. And unlike traditional jobs, you can essentially use more than two hands by automating processes on other machines, using code generation, refactoring your code, making reusable libraries, etc...
- Mental ability varies far more than physical ability. A smart math student could multiple solve an equation ten times faster than an average student - if the average student could even solve the equation in the first place. Practically, your best developers will solve problems that your average developers lack the ability to even describe, and thus potentially would never solve. For example, I sometimes read the CLR blogs at Microsoft, and I don't even have the background or depth to describe the problem domain, let alone solve it in a timely manner.
So, fundamentally, software engineering is not traditional physical jobs where two average guys can build something as fast as one good guy. There's a similar phenomena for all "Thought Work". For example, the best books sell 100 times more copies than the average ones.
Second - in software engineering, because there is such a low entry bar, there is a huge gap between the amateurs and professionals. For example, in order to become a Civil Engineer, you'd first need to go through several years of schooling at a credited University. There is a high bar to meet. But many "programmers" just start playing around with Visual Studio and gradually move from hobbyists to full time developers. So, practically there are a ton of developers out there that have the mental ability, but just lack the training and education such that they're not nearly as productive as star developers.
Living in Chicago and interested in working for a great company? Check out the careers at Paylocity.