“In software, the difference between the average software developer and the best is 50:1; Maybe even 100:1.” Steve Jobs
The Best v.s The Average
If you’re a software engineer, you would probably agree with what Steve Jobs said. The gap between the best and the average software engineers is incredibly large, much larger than most industries’.
However, there are still some industries that have similar talent distributions as software engineering does. The most familiar example is professional sports where the top 1% have much better performance than the average. And this talent gap is also reflected in atheletes’ salaries, which makes total sense. For example, one of the top MLB pitchers, Stephen Strasburg, received $38M in 2019, while the average salary in MLB was $4.3M.
But if salaries are a reflection of athletes’ contributions, why isn’t the distribution of software developers’ salaries look like athletes’?
Why Is It So Hard To Evaluate A Software Engineer?
In my opinion, the reason is that companies are not able to evaluate software engineers like how sports clubs evaluate their players. As most professional sports have very complete and objective statistics of players, managers can evaluate players quite accurately. Thus, clubs pay much higher for those who are excellent because everyone knows they’re good.
If one club doesn’t want to pay that much, other clubs will want to. Although there could be some differences between a player’s value and price sometimes, the gap between them will never be too big. This is just how the market works when information is very transparent.
On the other hand, the software development market is like a totally different world. You can’t really know if someone is a good software engineer unless you ever work with them closely for an extended period of time.
If you’re a programmer, you probably ever have a teammate that can produce things 10X, 50X compared the average productivity. And now think of if you’re boss’s boss will know he/she is a 10X engineer? Will your CTO and CEO know they are such a brilliant engineer and be willing to pay them 10X more than average to retain them?
Most likely no.
In reality, those 10X super engineers get a 10% pay raise and that’s it. The root cause is people don’t know how good they are except there direct coworkers.
Can We Use Programming Interview Results As A Proxy?
In fact, you can see how hard it is to evaluate a software engineer from the process of big tech companies. The most common technical interview process for programmers is to ask them to solve very challenging programming questions.
A lot of those questions are extremely hard to solve if an interviewee has never seen them before. That’s why many people choose to practice (or a bit of memorizing) a set of likely interview questions very intensively (also known as leetcoding).
Also, the ability to solve a very hard algorithmic problem in a short time does not highly correlate to one’s performance at work. What a software engineer is actually doing at work is just so different than solving those very-well defined programming problems. It’s not a desirable way software engineer’s capability.
Many problems one needs to be solved at work are very ambiguous. Knowing how to break down an ambiguous problem into a few well-defined programming subproblems and how to frame a business problem as a well-study research problem is far more crucial for being an effective engineer.
Even when many companies have already realized this recruiting process issue, they still prefer it. Why? It’s simply because there are no better ways to evaluate a software developer’s ability. Maybe this conventional interview process can only measure 20% of a software engineer’s work-related ability, it’s better than nothing. So you know how hard it is.
Difficult Evaluation Makes Salaries Distribution More Evenly
The reason I bring up the interview example above is to elaborate that it’s almost impossible to evaluate a software engineer in a scalable way. Now, I want to do a thought experiment to further elaborate it.
Let’s assume it’s as easy to measure a programmer’s ability as a professional athlete. If that assumption is true, your engineer coworkers should be fine with some people get $2M a year and some get $100K a year. Even if they all know each other’s salaries and how extreme the distribution is, they should still feel fair. Because they know those who get paid 20X are just 20X better than others. They deserve it.
But imagine if a company really makes its salary distribution like that, people will not feel unfair or even angry? I think they definitely will except those top performers’ close coworkers (those who work with them every day). That’s the point I want to make. It’s just too hard to evaluate it.
Because it’s virtually impossible to measure software engineers at scale and objectively. Companies prefer a safer way to distribute software engineers’ rewards, which might not reflect their productivity accordingly.