I am in the middle of reviewing salaries for my team of 30 or so developers and couldn't resist a chuckle upon reading some recent posts on the subject. Soon Hui's post questions why great developers aren't paid 10 times more then their lesser colleagues. While Carlos Oliveira ponders a further question: if soccer players can earn so much why can't the mighty developer?
Neither of these posts, nor the comments within them, came anywhere near explaining this phenomenon.
Let me start by clearing up why it is that soccer players can earn so much - soccer players don't get paid the amounts they do purely because of the skills they possess.
Let's face it, at the level they play they're all pretty damn slick. They do so because of the money they can earn for their clubs - this is driven by soccer fans who pay to see their teams play. If you can increase your team's fan base by recruiting a superstar player then this is worth paying for (just like rock stars making all their money from touring).
Kragen Javier Sitaker spectacularly missed the point by commenting that,
The second richest man in the world, much richer than any soccer player, is a programmer.
I'm assuming he means Mr Gates who is no more a programmer now than my mother (OK he's way more of a programmer than my mum but you'll see my point). He made his money by having a vision, great ideas, taking risks, good timing, great perseverance... and ultimately by being a great businessman; not by being a coding ninja.
So, let's get this straight. It's cold, heartless economics.
Developers get paid according to the VALUE their employer derives from their work
While a soccer player's value can scale wonderfully by their ability to attract more paying fans, a developers ability to increase their value is somewhat more limited. In fact, a developer (in a service company) who simply codes his heart out without sharing their knowledge and experience or interacting with clients, will not continue to earn more money regardless of the quality of their code. There is a (almost) deterministic ceiling based on the rate they are charged out, and their company's overheads (which for anything but the smallest company are way higher than you might think). There's a limit to what an employer can afford to pay a developer.
A developer in a product based company (like Microsoft or Google) may be able to fare better since the company's profits (earned by more than just the development team) may allow them to reward employees more generously.
So often determining someone's salary is a case of looking at the range of salaries from graduate to most senior and ranking people according to their individual value between these extremes.
It's also important to note that great developers know more than writing great code. In fact, their value is often increased more by the things they do outside of writing code (which as many people have commented on is notoriously difficult to measure). For example,
- Calmness under pressure
- Communication skills
- Ability (and perseverance) to see a project through to the end without getting bored and asking to move to something more interesting
- Ability to deliver what was asked for on time within budget
- Ability to instil confidence in their company, team and clients
- Ability to be able to make tough (sometimes technical) decisions decisively
- Knowledge to apply the appropriate coding techniques/practices to a problem given the (sometimes frustrating) constraints of time, scope, requirements, budget...
- Ability to share their knowledge and experience to other team members
Even if you were 10 times better at coding than someone else (which you'll never be able to prove) the amount you are remunerated is only partially influenced by this fact.
So be aware of how to increase your value (and hence salary) but don't expect to be paid like Beckham - you may be disappointed.