The productivity gap between the good developers and the bad ones are well known, thanks to Fred Books who publicized this fact in his now classic book The Mythical Man Month. For the benefits of those who haven't read the book, let's just recap the words here:
Programming managers have long recognized wide productivity variations between good programmers and poor ones. But the actual measured magnitudes have astounded all of us. In one of their studies, Sackman, Erickson, and Grant were measuring performance of a group of experienced programmers. Within just this group the ratios between the best and worst performances averaged about 10:1 on productivity measurements and an amazing 5:1 on program speed and space measurements!
So, 10 times the difference. Which begs the question: have you seen any developers getting 10 times the salary as his colleagues?
The answer, I suspect, is a big no. Not even 2 times.
Which begs another question, why?
In this "fair" world, the amount you get is always proportional to your contribution. Soccer stars earn ludicrous contracts because they are important to the teams. The difference between the top scale players and the not-so-good ones are tremendous. Let's take English Premier League as an example, Top players such as Frank Lampard, Steven Gerrard are getting 10 thousand pounds per week, whereas the players of lesser capabilities are earning significantly less than them. No one complains about the glaring inequality here. Because everyone understands that the money are paid for a good reason. If a player can draw that much in earning, it's because he can earn a proportionally more for his employer.
The same goes for artists, even though the artists are only technically employees, they can earn more than the board of directors if their records sell.
Unfortunately, good developers don't command as much salaries as good sport players or artists. The gap between a very good developer and and bad one differ only by a relatively small margin. When was last time you heard of a developer who earn seven figures? The only way for a developer to be reasonably well off is to start a company or join a startup, in those cases they become rich by holding valuable stock options, not through salary. They are rewarded because of the risks they have taken, not because of their ability. Getting the pay that is proportional to their level of competence is simply not possible.
It is not that the managers don't know that good developers are 10 times more productive than a bad one. Managers do know; some of them are developers or former developers.
It's not that the company can't afford to pay them well. You can get a super developer and pay him 5 times the average salary and still you can save the money to pay another 4 mediocre developers. The super developer would still be very happy then.
I think it has to do with the nature of software development. It's not that good developers can churn out 10 times as many features as the bad ones. It's rather that good developers write code that have less bugs, more extensible and more maintainable. These are the things that you can't measure by statistics or figures. But those who are able to command a high salary premium are those who can positively prove their worth, not those whose work can save the boss trouble later.
The productivity of good developers come from less rework, less debugging and less bugs. Unfortunately, that's not something that you can put on your resume to brag about. In fact, easily readable, easily extensible, easily testable architecture and code is not something visible; users are not going to see it, your boss is not going to concern over it and practically, no one cares. What they care, is whether you can deliver the projects on time.
Even so, the ability to deliver projects on time doesn't tell us anything about a programmer's productivity. Someone the one who delivers his portion on time may not be a good developer; it may be that the project is too easy, or maybe that initial estimation is too pessimistic. Likewise, a project that takes a long time to complete may not be because the developers are incompetent or lazy; it may be that the project is very hard, or maybe that the planning itself is unrealistic.
The bottom line is there is no way to tell a good developer from a bad one. It's hard to compare the developers based on project basis because it's hard to know how hard a project is unless you have done it. But there is no two software projects that are alike.
Even if you can absolutely prove that you are a superior developer, so what? Giving you too high the pay will tilt the salary structure unbalanced and will demoralize your colleagues (This is the reason why employers don't want their employees to talk about their salaries). However good the superstar developer is, a project needs everyone to contribute and offending the other developers of lesser mind isn't exactly the recipe for success.
This is the paradox in software development: we all know good developers exist, but it's just that we don't know who. Even if we do, we can't give that much.
No wonder no one is getting 10 times the pay.