Search This Blog

Loading...

Friday, May 16, 2008

Why Good Developers Are Not Getting 10 times the Pay?

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.

Why?

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.

Then why?

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.

33 comments:

Fred Yang said...

I can't agree more, thanks for you thoughts and the pictures of the beautiful girl.

Soon Hui said...

Thanks fred, for your comment my post and that girl. :)

Anonymous said...

I don't think this is completely true though. Just as there are pro-sports and semi-pro sports there are pro development houses and semi-pro development houses. Pay is highly dependent upon where you work rather than your individual contribution level. But your individual contribution level effects where you can get a job. A incompetent programmer can find a job making 40K a year. An excellent programmer if he can prove himself can find a job making 200K or more. The really good ones create and sell their own work and make even more than this.

Anonymous said...

Of course it is possible to compare the developer efficiency. Not after one or two projects, but after ten, twenty, thirty it should be quite clear, if someone is more or less efficient than others. Because every decently managed large project is devided into smaller pieces, that amount of comparison data shouldn't be a problem.

And bug count of a developer really doesn't matter that much. Only the work time used for the project matters, and that time includes testing. If some one makes twice as buggy program five times as fast, even after testing, he has most likely used less of the company's resources than the slower guy.

Guy Kolbis said...

Realy enjoyed reading it.

geedee77 said...

Good article, and I don't want to be picky, but English football (soccer) players such as Lampard and Gerrard actually earn about 100 thousand pounds a month. Also, music artists are not employees of the record company but seperate entities who are contracted to the company (like a contractor in IT) so their earnings aren't set by the record company.

Mike said...

WoW! Great post,research and analysis.
Thanks so much
www.youtechno.info

James said...

Interesting thoughts, but I don't necessarily agree that it simply isn't possible for a developer to earn what he is truely worth:

Here is a related essay by Paul Graham, a VC who shares his views on the issue:

How to Make Wealth

Anonymous said...

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

2x, yes, at the same company. If two people at different companies can count as "colleagues", then I've seen 4-5x differences in programmer pay.

Anonymous said...

er, it's more like £100,000 a WEEK for those players...check it out.

John Wang said...

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

So true. I completely agree as developers are usually associated with back-end programming and not front-end design. And even if you showed them your code, there's nothing to say that the manager necessarily knows the difference between good and bad code.

Great write-up!

Anonymous said...

The answer to your question is even simpler: good developers don't get more because they also work if they don't get the money. It is just not important to them and they don't get what they don't ask for.

Wilhelm said...

If you factor in things like startup equity, I think that good developers *can* earn 10x the pay. In my experience, true rock star developers don't last long in the the corporate world and almost inevitably end up at a startup - their own or someone else's.

Of course, joining a startup (or founding your own) also involves an element of risk, so it's hard to say how much of the upside is for talent vs. risk-taking.

Paul said...

"we all know good developers exist, but it's just that we don't know who"

You may not know during an interview but after working with someone you find out within a few weeks if they are good or not.

Ray said...

Lampard is c*nt :)

Adam Conrad said...

I have to agree with the 3rd commenter. The best programmers work at the best companies and make the most money. That's why the best flock to Microsoft, Google, Amazon...you have to be the best to get in and get paid that well.

Even then, the Michael Jordans of software engineering are making the same if not more than Jordan because they RUN Google, Microsoft, Amazon...you think Ray Ozzie or Larry Page aren't making bank as the head architects of their companies?

Developers get paid more for being better because they work at better companies and have more responsibility in that company.

David said...

Intriguing post, but I think you're way oversimplifying things.

There are a variety of other reasons that top-notch programmers are not making disproportionately high salaries compared to their less-effective co-workers in the same company.

You brought up the example of sports celebrities. They have two things going for them that developers typically don't - exposure and unions. My company has an internal development team which I used to work in. I left it about three years ago, and today I don't know who the best developers in that group are because their involvement in the code isn't publicized.

And nobody at the company that I work in is a member of a union or other kind of collective bargaining organization.

Anonymous said...

It's so true. I've posted something similar but not discussing salaries. Software development is seen as a black box to many people. Once development starts no on knows what's going on.

http://developerant.blogspot.com/2008/11/why-is-it-so-hard-to-find-proper.html

Randall said...

If you are a good programmer, start your own company. Make lives better. Improve the world and you'll make way more than 10 times what your poorly programming coworkers will ever make.

Gregory Mostizky said...

As others said above me, some "rock star" developers do get paid a lot (John Carmack for example, I guess there are a lot more). In the corporate world however, I agree with you. The thing is, in my opinion, pay is related to amount of impact the person has on the bottom line. In case of big corporations - developers just don't have much impact - at all. Think about it - just how much difference to the bottom line a single coder can make, if he works for big company like Microsoft, Sun or even Google. So, and I agree with previous comments, if you want big bucks - find work that actually impacts bottom line - such as startup, freelancing or something else.

dotnetchris said...

As much as I agree with your article I disagree with your conclusion that great developers shouldn't be getting paid 10x more than regular developers or even worse, bad developers.

This is something we need to overcome because it is truly deserved. Pay should be based on talent and accomplishment not some sliding scale to arbitrarily pay every developer in a company/team the relative same salary.

John said...

What fantasy world do you live in? Of course people know who good and bad developers are, and good developers do get paid significantly more.

This is the dumbest article I've seen in a while, and I'm astounded that anyone would agree with you.

xì trum ngủ nướng said...

Well, you have an interesting think about developer salary. Anyway, I think at least, a good dev could get better money from normal ones and they may be picked as key member in a project, and that's an opportunity for promotion.

Anonymous said...

the reason atheletes get paid a lot more if their good is because they sell more tickets because of them. A company doesn't decide to buy a product because of the developer. They are sold by the salesmen, who do differ wildly in pay.

Jon Kruger said...

This may sound obvious but I think that the reason that good devs don't make 10x is that managers don't see that value.

Let's say that the bad developer write some piece of software, and after 4 years that software gets rewritten because it was all spaghetti code and was causing all kinds of problems. The manager says, "Well, rewriting software is just part of the business, everyone does it," and ignores the fact that the software that the good developer wrote is still working fine.

In reality, most apps are done by many people, so the good work that the good dev did got watered down with the work of the bad devs, so they all look equally mediocre (but just enough to be good enough).

Buu Nguyen said...

I don't know about where you work, but I do see 5x difference in payment in my workplace. Usually good developers have already been promoted many times (some of them are called "architects").

Productivity can definitely be measured (bugs per KLOC, function points / month, story points / iteration etc.), although one can debate about what the best method is and whether there is one existing. Regardless, bosses do pay differently when they see the value. And I did see bosses who recognized the difference in contribution & competence.

DevTopics said...

It’s not just that some programmers work faster; some programmers can do things that few other programmers can do. These are your visionaries and trailblazers. I call this sometimes-10X/sometimes-infinite advantage: The “Tenfinity Factor.”

This wide productivity gap results in five major classes of computer programmers...

The Tenfinity Factor

Anonymous said...

"The bottom line is there is no way to tell a good developer from a bad one"

Why? I don't see how that could be so difficult

"Giving you too high the pay will tilt the salary structure unbalanced and will demoralize your colleagues"

True, but that can be said about any other job in a team, not just developers

Anonymous said...

Call a Plumber, $150 an hour, hire a .NET consulting $40 - $50 an hour, need I say more. We are a commodity, there is no real skill in computer programming, we are the factory workers of the future folks, get used to it. Our salaries will only drop in the future.

AaronZ said...

This is precisely why I contract/consult. For me it's been the only way to approach a 'fair market value' for my contribution. I do not under appreciate the contributions of my peers. But I know my contributions are lopsided.

Alexander said...

This was the same when I started working on mainframes 40 years ago and remains the same. We usually joked about the quality of our work as compared to the quality of the work of the imbeciles that caused all kind of production problems. They always got more money through overtime to fix the messes they created. The perception from management was always that somehow they had saved the day. Our work was so clean, efficient, and reliable that never caused a problem. And our designs always evolved and migrated gracefully into newer technologies. It was well architected from the ground up. Yet we got nothing for it. Some things never change. Of course this kind of frustration was self imposed... I could have gone consulting and get what I truly deserved. I moved from mainframes to modern distributed systems and everything in between. No matter what, the quality of the work of truly good developers has never been factored in by metrics. It's almost too sublime to be measured.

Anonymous said...

You have to understand that it's the programmer that decide how much he want to earn. It's not the manager that decide. The programmer has the power of its own destiny, and therefore is able to set what he things he can earn.

I had team with people doing the same work with salaries ratios up to 5:1. The difference between the guy that earned 5 times more ? He actually asked to earn 5 times more and his employers did know he was 5 times more productive.

Don't complaint. Ask. And you will get.

Soon Hui said...

Anonymous,

your case here is extremely unlikely. I mean, why should managers pay someone 5 times more than the lowest he can get? It simply doesn't make economical sense.