The LeBron James of Programmers
blog.zeusprod.com
blog.zeusprod.com
For many years I have wondered why so many people think that supply versus demand ought to be a linear function.
Even in the most simple economics 101 scenario you do not end up with a demand curve which is a straight line. It's always a curve, which is usually very steep at one end and very shallow at the other.
If the supply of oil dropped by 50% overnight, what do you think would happen? Those people who absolutely have to have oil, and can afford it, will pay for it, through the nose!
The price will go up (and up and up!) until we are at a new equilibrium in which only 50% as much oil is consumed by those buyers that are still able and willing to pay for it at the new price.
If the supply dropped by 50%, the price will probably go up by a factor of 100 or more, not just 2.
Similarly, in the same article he mentions that some NBA players are paid 1000x as much as some others. But are those players actually 1000x better? No of course not!
The right way to think of this is "supply vs demand for someone with that particular skill set".
The only thing you could reasonably expect is for a more productive/smarter/better person to be paid more than someone else. But how much more is going to depend on supply vs demand for someone with that skill set.
Many curves are linear if you zoom in on a tiny enough piece of them. If there are a million 1x programmers in the world, and you increase the supply by a single 1x programmer, the price for a programmer drops, in theory, but only by a miniscule amount. Moving one part in a million along the curve is not enough for the non-linear terms to be significant compared to the linear term. Likewise, adding a single 10x programmer is still almost completely linear -- you are adding 10 more units of programming capacity to the million units that already exist. We aren't talking about a 50% change in supply here, we are talking about a 0.0001% change.
Now, if you are a tiny company that needs maybe two 1x programmers, you aren't going to pay 10x for a 10x programmer that will be idle for 80% of the time, but why wouldn't a large company that needs hundreds of programmers be willing to pay 10x for a 10x programmer instead of paying for ten 1x programmers when the cost is the same to achieve the same amount of work?
One final analogy: You walk into a store and find that a single roll of toilet paper costs $0.50. Would you expect a 20-pack to cost vastly less than $10 (say $1.00 or $2.00) due to supply and demand? There are practical reasons for there to be some discount for the larger package (less packaging per roll, less human labor to deliver to store shelves, etc.), but a discount beyond that?
By the way, the whole NBA analogy is terrible. The goal is to win the game, so being a little better (in terms of points scored) than the average player can have a big impact on the binary win/lose outcome. You don't need to score 1000x as many points to be worth 1000x as much money. In sharp contrast, much of software development is not so binary (perhaps just a few highly technical areas where an average programmer may never create an algorithm that is good enough to work).
And in fact my oil analogy isn't so great because that is talking the about supply of a largely fungible commodity whereas with programmers the whole point is that different programmers have different skill sets.
So it's lots of different markets that aren't really competing against each other (the market for quantitative programmers who know Haskell and financial mathematics vs the market for programmers who know lots about Java, Spring, Hibernate and SCRUM) rather than a single market.
And that's a better explanation for why there are 10x differences in pay: the supply and demand in each "niche" is often very different (by an order of magnitude).
If you're a programmer working in exactly the same niche as another programmer and you can prove that you're ten times as productive, then yes I suppose you could get 10x the pay... The trick is the first part though (proving that you're actually 10 times as productive).
Interestingly, an economist recently estimated LeBron James' fair market value at 50 million dollars a year, which is far above his 20m current salary (which is largely driven by the CBA to keep player salaries low).
Also, when you sign an NBA contract, most of it is guaranteed both ways. That is to say, a four year contract means you get paid for four years even if you get injured or your performance is lacking. The converse being, you can't simply sign with another team for higher salary if you feel you're being underpaid, underutilized, or under appreciated. There are exceptions, player and team options, but those are typically in the final year of a multi-year contract.
I don't have strong thoughts on the general point of the article, but I thought I'd clarify some of the basketball background info, because I feel it's somewhat misleadingly presented. And I'm not sure the NBA really serves as a great analogy with the author's points.
I don't find the moral argument for pay per productivity very convincing. Being smart is like winning a lottery; you are lucky enough already to be born that way. I think (useful) effort is what should be rewarded, not productivity.
How can we reliably measure effort?
If we are to reward by effort, how can we encourage people to go into fields where they will be even somewhat productive? If I could choose any job, it would be stand-up comedian. I may not make anyone laugh. Should my reward be the same as that of Louis CK or Chris Rock?
Anyway, I argued from a moral perspective, not a practical one. It's a complicated problem, and everybody has a different perspective (and they should have).
To answer your question - what should be discouraging is your incompetence in the field. In other words, you either shouldn't get that job or become frustrated with it enough to try something else. And on the other hand, if you are good at something, you are probably already plenty motivated to do it. Think about it - if all the jobs would be payed equally for the same effort, why would you want to waste your life on something that you cannot do well?
The difference is that I see usefulness as a binary thing. To me, if there is enough good people doing the stuff already, therefore we don't need you even if you like the job, and you shouldn't get it (your work in that field is not useful). Instead of, having market system to depress the wages for all the people in that field, just because everybody is capable of doing that job. Or because there are differences in productivity between jobs.
Also, I agree that other people have to decide somehow whether or not your work is useful for society, it cannot be just your decision. But I don't agree the weight of this decision to be tied with productivity (I think it should be decided democratically, in fact), because that's prone to positive feedback loops.
How can we determine whether there are enough people doing the stuff already? Going back to my comedian example, should I get to be a comedian just because I started doing it at some minimum acceptable quality, before there were 'enough' comedians, whilst the next Louis CK has to do something else?
I think you're missing:
- we don't need to measure productivity in aggregate (and I agree GDP has problems in doing this) but for each individual, and probably only in a relative sense
- competence in a field and motivation to do it are not necessarily correlated, as evidenced by the popularity of career-change guides
- A democratic process for deciding whether your work is useful for society would require a lot of information on each person's work. I don't see how you could summarise that information without coming up with a metric which means something like 'productivity'
Anyway, we've veered far off topic and I don't think we'll convince each other. Have a great weekend!
As far as the salary scale for superstars vs average programmers, it's typical that the best people are compensated better, whether it be via salary, RSUs/options, bonus or fringe benefits, but it is not typical to compensate them higher by multiples of base salary. And why should it be? As stated by others, almost none of what is required of programmers by most organizations is anything that couldn't be done by a thousand other candidates. Most of you guys may not find it pertinent to take a global view, since large enterprise representation is dwarfed on HN by the startup & 1099 constituency, but when you get to the high levels of management (C-level) it is a real thing in most companies that the folks at the top don't understand the difference between what you get when spending x amount in y places. The problem is that the technical hiring manager or product owner aren't always allowed, in those situations, to hire in the place that makes the most sense, causing further stress and inefficiency in the organization. This, then, leads to conversations like the ones that resulted in the mass outsourcing of the late 90s and early 00s. I've long held that we'd all be better off if corporations took the position that most programming skills should be roughly equally compensated for no matter where in the world the individual sits, but until this scales from <10 (startup) to >1000 (enterprise), don't expect much. I employ -- against my will -- ~50 technical folks in South India at a total salary of <$600k US.
I recall Phil Jackson talking about the Chicago Bulls with Denis Rodman. Denis Rodman was sometimes late to practices, always in trouble, and etc. And Phil Jackson was connivent with him. When asked if this permissivines with one rebellious player wouldn't have a bad influence on others, specially when you have two other more important stars (Pippen and Jordan), he answered that they knew it better. They knew one team can have only one Denis Rodman on the team. And despite being more important than him to the team, they didn't try to play the "I'M the star here, so I should have the privilegies". They knew Denis Rodman needed this kind of freedom to perform, and they needed his performance.
So, just as you need more down to earth programmers to support a superstar, you also need to everyone know they role in the team and why they need each other. A superstar that doesn't recognize the importance of those with less talent than him isn't a good one to have on your team.
A similar thing happened in football (soccer), when the Real Madrid of the early 2000s decided to let go Claude Makélélé, a defensive midfielder who was in charge of all the "grunt work". For the following 3 years Real didn't win anything, even though they had Zidane, Ronaldo, Figo and Beckham among others.
Lebron James puts people in seats, and those people buy jerseys and beer. Even after his skills start to dwindle, he still may command a much higher salary than equally productive players due to his ability to draw crowds.
Another element lost in the analogy is how much someone like Lebron makes the others on his team more productive. Because of his presence, other players on his team (and on the floor with him) benefit from his abilities and their production is improved. He's some form of catalyst or multiplier.
Of course measuring individual productivity and any individual's impact on team productivity is much more difficult in a business setting where statistics are not easily measured and external forces can impact the team's behaviors.
A basketball court is a rather fixed and controlled environment - team size, rules, and even temperature are standard. A free throw line is always the same distance from the rim, and the rim is always the same height. Business and development environments have multiple factors that could make one person more or less productive than they would be at another shop.
Specifically this: "Here are some things you can point out to your employer to help make your case that you are worth 2x or 3x what they are paying other programmers, but you'll be lucky to be paid 25% more. If you are 10x as productive as other programmers, you'll probably be paid no more than 2x their salary."
seems incorrect when compared against my data.
Obviously if you look at total compensation there is more than a 10X difference between groups of programmers in many cases, but even just considering salary I have seen a pretty large dynamic range. For example, many large software companies (that I compete with when hiring engineers) pay their experienced engineers 3-4X+ salary compared to someone they might hire straight out of university.
The best methods of measuring productivity or value of an engineer are certainly worth debating, but the idea that the range of salary is something like 2X doesn't hold up for me.
Bench players are valuable assets. Your starters practice against them even if they don't play, and there are some guys who are talented but not up to the task of playing 30+ minutes a game for various reasons.
I guess the difference is that the numbers of players on the court is capped. Even if a good player is only (say) 50% more likely to score a goal, having the best player makes the difference between winning and losing, so it's worth paying a lot. And the only way to get a good concert is to spend a huge amount of resources training one particular pianist.
With programming there is no cap. Rather than paying a particularly good programmer 10x as much, you can just hire 10 mediocre programmers, and they will probably get more done. So smallish differences in competence never translate into very large differences in pay or training.
That doesn't sound accurate to me. How can 10 mediocre programmers do the work of 1 spectacular programmer? I'm guessing this only applies when we're talking about mundane stuff. Smallish differences in competence translates into large differences in pay/training at the very top of the food chain.
To quote pg:
"This is why so many of the best programmers are libertarians. In our world, you sink or swim, and there are no excuses. When those far removed from the creation of wealth-- undergraduates, reporters, politicians-- hear that the richest 5% of the people have half the total wealth, they tend to think injustice! An experienced programmer would be more likely to think is that all? The top 5% of programmers probably write 99% of the good software." - http://paulgraham.com/wealth.html
"In our world, you sink or swim, and there are no excuses."
"The top 5% of programmers probably write 99% of the good software."
So 95% of programmers make 1% of the good software, but somehow they aren't "sinking"? By comparison what do think happens to the far far majority of players that doesn't get drafted to the NBA?
90% of the software that gets developed worldwide is mundane stuff. There's a gazillion mediocre programmer bashing away at a useless app That Revolutionizes How You Connect With Your Friends for every good programmer that hacks at next-gen filesystem driver or a tinier phone.
Rather than paying a particularly good programmer 10x
as much, you can just hire 10 mediocre programmers,
and they will probably get more done.
Not in finance; let me tell you from my experience poorly building a bitcoin trading bot over a few weekends, I lost money (play money) from silly off by one mistakes and not having a proper grasp of the statistics I was using. In this type of situation, only a real quant is likely to make money, and the 10 other guys will lose everything in fairly short order. Likewise in crypto: how many average programmers would you have to put in a room to write a secure storage system like Tarsnap?But, I will agree with you in the general case: CRUD apps. There are lots of features and no one person can quickly crank them out no matter how "x" they are, so in these types of jobs, you really can get much more done with 10 average programmers.
1) A team of mediocre performers will never give you anything more than mediocre results.
2) Nine women can't make a baby in one month.
Programming definitely has a cap on both quality and productivity.
And the only way to the maximize the results is with better people. Not more.
The problem is that until about the last two decades, most programming was done in non-competitive fields (internal enterprise IT), so nobody gave much of a fuck about quality or productivity.
Nowadays, most of us work in a context where software is crucial to a company's competitive edge. However, the monetary rewards and social standing of programmers is still very much based on the era of corporate IT (especially outside the SV bubble), and we are only slowly catching up.
Meanwhile the industry is desperately trying to put the genie back into the bottle, first through outsourcing (most of which failed miserably, because good programmers do way more than just code shit), later through wage-theft conspiracies and attempting to lower the barriers for importing cheap foreign programmers.
Just as a start, nobody will pay the average basketball player, but the average programmer can earn a nice living. Then move down the line to the owners' monopoly vs players' union, 5 players on the floor, etc.
A better analysis could start with why a 10x more skilled programmer isn't able to produce 10x more value, or, if she is, why she isn't the one capturing it.
There sure are domains where 10 hard working just-competent programmers can outproduce a single genius. Ideally the genius has a few near-peers and a grunt-programming support team, and everyone feels good about that.
I have never heard of a professional athlete that came at the top because he was a lick-ass ;-)
Also, could a team of Lebron James level players win a championship?