Michael O. Church wrote an essay awhile back called “Why programmers can’t make any money.” The post is no longer on his website — for some strange reason — but you can have a look at the archived version here.
If you don’t wish to read his post, this quote will give you the summary.
When the market favors it, junior engineers can be well-paid. But the artificial scarcities of closed allocation and employer hypocrisy force us into unreasonable specialization and division, making it difficult for senior engineers to advance. Engineers who add 10 times as much business value as their juniors are lucky to earn 25 percent more; they, as The Business argues, should consider themselves fortunate…!
I empathize with his thoughts, but I have struggled — for years, now — to understand the author’s conclusion.
If we want to fix this, we need to step up and manage our own affairs. We need to call “bullshit” on the hypocrisy of The Business, which demands specialization in hiring but refuses to respect it internally. We need to inflict […] artificial scarcity.
I decided to (finally) publish this response today because I have seen artificial scarcity play out in another industry; my wife is a medical doctor in the US. Are we to believe that programmers should establish artificial scarcity in the same way that doctors have — with political organizations like the American Medical Association and credentialing via something equivalent to medical school and board certification?
Here’s why I ask: though it might seem wise, the results don’t necessarily speak for themselves. Yes, medical doctors are always on US News’ top-10 list of highest-paying professions, typically with salaries ranging from $180k-$300k USD per year. But to achieve that level of salary, doctors need to go through 4 years of medical school (earning no income and accruing $50K+ of debt per year); 4 years of residency (earning stipend salaries of $50-60K/year, and working grueling 80-120 hour work-weeks); and optionally 2-4 years of fellowship (again, stipend salaries with long work hours). In exchange for this 8-12 years of post-undergraduate training, they are rewarded with a salary that is only marginally better than a mid-level programmer’s in Silicon Valley. And, by the way, even practicing medical doctors with their professional organizations and their artificial scarcity are expected to “be a team player” — learning the drudgery of electronic medical record data entry; learning the ‘business of medicine’; holding the 24-hour pager; working 24-hour shifts.
So, artificial scarcity is certainly a strategy — but, it strikes me, in our capitalist system, not one that works particularly well.
Do we think that programmers should form unions and bargain for the value of their labor against employers? That’s certainly an interesting idea. As an employer (admittedly a progressive one), I’d welcome the development. But I doubt my engineer-employees would have much to gain from collective bargaining. They already have interesting work; they already have solid pay (though we always aim to improve in this area); they already own the means of production; and they can leave at any time to work at any other tech company. As an employer of engineers, I am not a feudal lord presiding over serfs; I am closer to the craftsman trying to convince others to join his guild.
But there’s one more thing that bugs me about this post. It truly fails to recognize that, in our economy, people are rarely paid for the value they actually add to society — or even to the business for which they work.
This isn’t a great injustice only to programmers, but instead to all “non-bullshit” contributors to society. But this is a problem with our brand of capitalism, not with software engineering careers.
Let me explain. Ask a teacher, police officer, or firefighter if they are paid proportional to the value they add. Ask a great professor who has educated Nobel laureates whether they are paid even 20% more than their mediocre colleague who can’t even give a lecture to students.
Instead, most people are paid for political reasons or due to closeness to market transactions. For example, stock brokers don’t add much value to society overall, but are very close to market transactions for pricey financial instruments, and so they can skim off them. CEOs of BigCo’s are paid well for the obvious political reason: they sit on the board of a company with the people (board members) who set their salary.
Many pro-market intellectuals try to make arguments that these people are also adding value to society — or they might make the circular argument that whatever value the market sets for their labor, in itself, represents a proper accounting of “value” to society. This is generally a lot of hogwash.
It actually strikes me, as a programmer myself, that coding is one of the rare careers where you are able to a) get paid well, by most standards; and b) work on meaningful/challenging problems — as long as you escape corporate IT, which you should, immediately.
Further, in modern times, programming and computer science skills have been irrevocably linked with the ability to create software businesses, which can allow you to bypass all the normal rules of how corporations are run by starting your own. Or you can join some other programmer’s idea for a growing and hopefully profitable enterprise, and help her create a business that can run on its own. This will be deeply satisfying — at least, until your company becomes “the new boss, same as the old boss”.
The author makes some interesting points, but I guess I’m a little more positive and optimistic than he is about a programmer’s position in all of this. I think rather than programmers being in decline, we are increasingly at a premium. I think the rest of the world is realizing it is “program or be programmed”. I am much more worried about a non-programmer’s future on a 30-year horizon than a competent programmer’s position in all of this.
The future might sound like a market flooded with amateurs, but that is also why for the problems that actually require talent, the demand will always be there for the experienced and competent. Bad programmers can’t make good programs. And novice programmers only get lucky sometimes.
I also think that over the course of a programmer’s career, it’s true that the hurdle for what is considered technical competency continues to rise, which requires a rather ruthless form of auto-didacticism. But I don’t think that’s any different than many other technically sophisticated careers, e.g. aerospace, electrical engineering, surgery.
You don’t think an old surgeon worries about being upstaged by a hotshot young doctor with more modern training, fresher skills, and a willingness to burn the midnight oil in the pursuit of success? Of course she does.
It has been over 7 years since I left the corporate world. Therefore, it has been a long time since The Business told me what to do. But then again, maybe in this author’s mind, I am “The Business” — after all, I run a tech startup with 45+ employees.
On the minor point, I agree. If the world were just, great programmers would be compensated greatly and their compensation would grow steadily with their years of experience — linearly or even exponentially. But I also believe that if the world were just, great doctors would not be paid 50% more than Silicon Valley programmers despite all the extra training, but perhaps 500% more, or even 10,000% more — given the stakes (life & death) and the impact (all the economic activity of recently-cured persons).
With this stark comparison in my mind, I continue to wonder: as programmers, do we live in an unjust world, or merely a real one?
Update: I received a very thoughtful response to this post over on NewsBlur, and with the commenter’s permission, I’m re-posting it here:
There are a few different pieces to unpack in this article:
(1) It is a valid worry that in the programming industry, experience is very under-valued. And it is not just that experienced people get only a small wage increase. It is that older programmers find it harder and harder to get jobs as programmers. I don’t worry that programming as a profession will disappear in twenty or thirty years. But I do worry that an individual programmer who starts in the industry today won’t be able to get a job in twenty or thirty years because of age-ism. If programming is like pro sports where a useful career is only a few years long, then that is a big problem.
(2) The flowering of amateurism does not improve the market for programmers. It reduces the amount that a professional programmer can expect to make. Wherever you are competing with ‘free’, you are being underbid. This isn’t unique to programming (see the rise of blogs and its effect on news prof itability for example). And it isn’t necessarily a bad thing. We are seeing a huge amount of value being generated for the world for free by amateurs. But it is nonsense to say that it has no economic side effects.
(3) The ‘problems’ that the author mentions in the field of medicine are not problems. If you want to make more money in a field, you have to have barriers to entry. Every single one of those barriers that the authors mention is a key contributor to the resulting salary at the end. Typically, for those on the inside the barriers are worth it. If programming had equally large barriers, then successful programmers would make a lot more money and be happier about it. The question is whether the rest of society should go along. For doctors, an argument could be made that these barriers mostly improve public health in addition to the salaries of doctors. But it would be hard to come up with any such line of argument in defense of barriers in programming. So it is wrong to say that we programmers shouldn’t want barriers because they are not worth it. It is more correct to say that if we programmers instituted these barriers, we would be better off by beggaring our neighbors. And that therefore we should not try to institute such barriers.