Developer compensation has skyrocketed since the demise of the Google et al. wage-suppressing no-hire agreement, to the point where compensation rivals and maybe even exceeds compensation in traditionally remunerative fields like law, consulting, etc.
Those fields have sharply bimodal income distributions. Are programmers in for the same fate? Let’s see what data we can find. First, let’s look at data from the National Association for Law Placement, which shows when legal salaries become bimodal.
Median salary is $40k, with the numbers slowly trickling off until about $90k. According to the BLS $90k in 1991 is worth $160k in 2016 dollars. That’s a pretty generous starting salary.
By 2000, the distribution had become bimodal. The lower peak is about the same in nominal (non-inflation-adjusted) terms, putting it substantially lower in real (inflation-adjusted) terms, and there’s an upper peak at around $125k, with almost everyone coming in under $130k. $130k in 2000 is $180k in 2016 dollars. The peak on the left has moved from roughly $30k in 1991 dollars to roughly $40k in 2000 dollars; both of those translate to roughly $55k in 2016 dollars. People in the right mode are doing better, while people in the left mode are doing about the same.
I won’t belabor the point with more graphs, but if you look at more recent data, the middle area between the two modes has hollowed out, increasing the level of inequality within the field. As a profession, lawyers have gotten hit hard by automation, and in real terms, 95%-ile offers today aren’t really better than they were in 2000. But 50%-ile and even 75%-ile offers are worse off due to the bimodal distribution.
Enough about lawyers! What about programmers? Unfortunately, it’s hard to get good data on this. Anecdotally, it sure seems to me like we’re going down the same road. Unfortunately, almost all of the public data sources that are available, like H1B data, have salary numbers and not total compensation numbers. Since compensation at the the upper end is disproportionately bonus and stock, most data sets I can find don’t capture what’s going on.
One notable exception is the new grad compensation data recorded by Dan Zhang and Jesse Collins:
There’s certainly a wide range here, and while it’s technically bimodal, there isn’t a huge gulf in the middle like you see in law and business. Note that this data is mostly bachelors grads with a few master’s grads. PhD numbers, which sometimes go much higher, aren’t included.
Do you know of a better (larger) source of data? This is from about 100 data points, members of the “Hackathon Hackers” Facebook group, in 2015. Dan and Jesse also have data from 2014, but it would be nice to get data over a wider timeframe and just plain more data. Also, this data is pretty clearly biased towards the high end – if you look at national averages for programmers at all levels of experience, the average comes in much lower than the average for new grads in this data set. The data here match the numbers I hear when we compete for people, but the population of “people negotiating offers at Microsoft” also isn’t representative.
If we had more representative data it’s possible that we’d see a lot more data points in the $40k to $60k range along with the data we have here, which would make the data look bimodal. It’s also possible that we’d see a lot more points in the $40k to $60k range, many more in the $70k to $80k range, some more in the $90k+ range, etc., and we’d see a smooth drop-off instead of two distinct modes.
Stepping back from the meager data we have and looking at the circumstances, “should” programmer compensation be bimodal? Most other fields that have bimodal compensation have a very different compensation structure than we see in programming. For example, top law and consulting firms have an up-or-out structure, which is effectively a tournament, which distorts compensation and certainly makes it seem more likely that compensation is likely to end up being bimodal. Additionally, competitive firms pay the same rate to all 1st year employees, which they determine by matching whoever appears to be paying the most. For example, this year, Cravath announced that it would pay first-year associates $180k, and many other firms followed suit. Like most high-end firms, Cravath has a salary schedule that’s entirely based on experience:
In software, compensation tends to be on a case-by-case basis, which makes it much less likely that we’ll see a sharp peak the way we do in law. If I had to guess, I’d say that while the dispersion in programmer compensation is increasing, it’s not bimodal, but I don’t really have the right data set to conclusively say anything. Please point me to any data you have that’s better.
Since we have both programmer and lawyer compensation handy, let’s examine that. Programming pays so well that it seems a bit absurd. If you look at other careers with similar compensation, there are multiple factors that act as barriers or disincentives to entry.
If you look at law, you have to win the prestige lottery and get into a top school, which will cost hundreds of thousands of dollars. Then you have to win the grades lottery and get good enough grades to get into a top firm. And then you have to continue winning tournaments to avoid getting kicked out, which requires sacrificing any semblance of a personal life. Consulting, investment banking, etc., are similar. Compensation appears to be proportional to the level of sacrifice (e.g., investment bankers are paid better, but work even longer hours than lawyers).
Medicine seems to be a bit better from the sacrifice standpoint because there’s a cartel which limits entry into the field, but the combination of medical school and residency is still incredibly brutal compared to most jobs at places like Facebook and Google.
Programming also doesn’t have a licensing body limiting the number of programmers, nor is there the same prestige filter where you have to go to a top school to get a well paying job. Sure, there are a lot of startups who basically only hire from MIT, Stanford, CMU, and a few other prestigious schools, and I see job ads like the following whenever I look at startups:
Our team of 14 includes 6 MIT alumni, 3 ex-Googlers, 1 Wharton MBA, 1 MIT Master in CS, 1 CMU CS alum, and 1 “20 under 20” Thiel fellow. Candidates often remark we’re the strongest team they’ve ever seen.
We’re not for everyone. We’re an enterprise SaaS company your mom will probably never hear of. We work really hard 6 days a week because we believe in the future of mobile and we want to win.
That happens. But, in programming, measuring people by markers of prestige seems to be a Silicon Valley startup thing and not a top-paying companies thing. Big companies, which pay a lot better than startups, don’t filter people out by prestige nearly as often. Not only do you not need the right degree from the right school, you also don’t need to have the right kind of degree, or any degree at all. Although it’s getting rarer to not have a degree, I still meet new hires with no experience and either no degree or a degree in an unrelated field (like sociology or philosophy).
How is it possible that programmers are paid so well without these other barriers to entry that similarly remunerative fields have? One possibility is that we have a shortage of programmers. If that’s the case, you’d expect more programmers to enter the field, bringing down compensation. CS enrollments have been at record levels recently, so this may already be happening. Another possibility is that programming is uniquely hard in some way, but that seems implausible to me. Programming doesn’t seem inherently harder than electrical engineering or chemical engineering and it certainly hasn’t gotten much harder over the past decade, but during that timeframe, programming has gone from having similar compensation to most engineering fields to paying much better. The last time I was negotiating with a EE company about offers, they remarked to me that their VPs don’t make as much as I do, and I work at a software company that pays relatively poorly compared to its peers. There’s no reason to believe that we won’t see a flow of people from engineering fields into programming until compensation is balanced.
Another possibility is that U.S. immigration laws act as a protectionist barrier to prop up programmer compensation. It seems impossible for this to last (why shouldn’t there by really valuable non-U.S. companies), but it does appear to be somewhat true for now. When I was at Google, one thing that was remarkable to me was that they’d pay you approximately the same thing in a small Midwestern town as in Silicon Valley, but they’d pay you much less in London. Whenever one of these discussions comes up, people always bring up the “fact” that SV salaries aren’t really as good as they sound because the cost of living is so high, but companies will not only match SV offers in Seattle, they’ll match them in places like Madison, Wisconsin. My best guess for why this happens is that someone in the Midwest can credibly threaten to move to SV and take a job at any company there, whereas someone in London can’t2. While we seem unlikely to loosen current immigration restrictions, our immigration restrictions have caused and continue to cause people who would otherwise have founded companies in the U.S. to found companies elsewhere. Given that the U.S. doesn’t have a monopoly on people who found startups and that we do our best to keep people who want to found startups here out, it seems inevitable that there will eventually be Facebooks and Googles founded outside of the U.S. who compete for programmers the same way companies compete inside the U.S.
Another theory that I’ve heard a lot lately is that programmers at large companies get paid a lot because of the phenomenon described in Kremer’s O-ring model. This model assumes that productivity is multiplicative. If your co-workers are better, you’re more productive and produce more value. If that’s the case, you expect a kind of assortive matching where you end up with high-skill firms that pay better, and low-skill firms that pay worse. This model has a kind of intuitive appeal to it, but it can’t explain why programming compensation has higher dispersion than (for example) electrical engineering compensation. With the prevalence of open source, it’s much easier to utilize the work of productive people outside your firm than in most fields. This model should be less true of programming than in most engineering fields, but the dispersion in compensation is higher.
I don’t understand this at all and would love to hear a compelling theory for why programming “should” pay more than other similar fields, or why it should pay as much as fields that have much higher barriers to entry.