Thu 16 July 2015 | -- (permalink)
The market for web developers is split between two main camps:
- Backend developers, where there are a lot of different languages in play (Java, C++, Python, Ruby, Go, etc.). Most backend teams will be focused on one of these languages.
- Frontend developers, where the only programming language in play is Javascript (with HTML and CSS thrown in for UI structure and style).
Some people (like myself!) consider themselves full stack developers. But they usually emphasize one side more than the other. I'll assume for the rest of this post that there are only frontenders and backenders.
Job listings are full of postings for frontend developers. Since the frontend technology stack is relatively consistent for every web company out there, you'd think there would be more competition for these frontenders. This should bid prices (salaries) up.
But that's not what you see. My impression is that posted salaries for frontend positions are 10-20% lower than for backend positions.
For a while I chalked this up to prejudice. I think a lot of backend programmers consider Javascript to be not "real" programming. It doesn't help that the original design goal of Javascript was described as "make the monkey dance." With the complexity of Javascript UIs these days, backend snobbery is no longer justified, if it ever was. It persists to some degree though.
But in addition to that, I heard another indirect explanation for the lower salaries for frontend devs the other day. It was from a manager who was lamenting the quality of the developers applying for his frontend position. He said something like "The hard thing about hiring frontend developers isn't finding applicants, it's sifting through the pile to find the real engineers and discard the majority who can't really program."
I can see how this problem would be more prevalent among frontend devs than backend. On the frontend you find people who can make a page in HTML and CSS, and maybe throw in a little jQuery here and there, but haven't ever built something with complex logic. Backend devs, on the other hand, are faced with that complexity from day one.
Explaining how this reduces salaries will take a detour into the world of used cars. Imagine that there are a bunch of people who want to sell their cars, and a separate bunch of people interested in buying used cars. Also imagine that some percentage of those cars are "lemons". Because of serious defects at the factory, these cars have problem after problem.
With that background in place, an interesting dynamic emerges:
- Only the current owners know if their cars are lemons or not. Prospective buyers can't tell.
- When a prospective buyer considers buying a car, it's rational for her to discount the price she'd be willing to pay by the probability that the car is a lemon. So if she'd be willing to pay $10,000 for a good car, but there's a 10% chance that the car she buys will be a lemon (for which she'd be willing to pay $0), then that uncertainty should reduce her bid to $9,000.
- Owners of good cars then see the prices they're being offered, and think "I know my car is good. It's worth $10,000. If I'm only going to be offered $9,000, I'm not going to sell." The good car owners who aren't willing to go down to $9,000 then exit the market.
- The cycle repeats. Since some portion of good cars have now left the market, the ratio of bad cars to good cars has changed. Maybe now it's 15% of all used cars being lemons. So our rational buyer is now only willing to pay $8,500 for a car that would be worth $10,000 if she was sure it was good. This new lower price drives even more good cars from the market. And so on.
The economic term for this is The Market for Lemons, and three economists won a Nobel prize for their work on it and other instances of market failure driven by asymmetric information.
So I'm wondering, could there be a "market for lemons" effect in the hiring of frontend developers?
- Only the applicants really know how technically skilled they are. Hiring processes try to sort the skilled from the unskilled, but I don't get the impression that they're very good at it.
- When a prospective employer considers hiring a frontend dev, it's rational for her to discount the price she'd be willing to pay by the probability that the frontend dev doesn't really know how to program.
- Talented frontend programmers see the salaries they're being offered and think "I know I'm a good developer. I'm worth $100,000. If they're only going to offer me $90,000, I'm going to exit the market." (Perhaps by becoming a backend or full-stack developer.)
- The cycle repeats. Since some portion of the good frontend devs have now left the market, the ratio of unskilled ones to skilled ones has changed. So rational potential employers ratchet their salary offers down antoher notch.
If this is true, then it implies these recommendations:
- If you're hiring a frontend dev, then the discount you put on a frontend dev salary is a measure of your confidence in your hiring process. If you were perfectly confident in your ability to tell a good frontend dev from a bad one, you wouldn't pay them any less than a backend dev.
- If you're a manager with a frontend developer on your team, and they've been on the team long enough for you to tell that they're truly good, it would be smart to raise the frontend dev's salary more quickly than other positions until they're caught up with the other developers at a similar level of experience. This will act as protection against the frontend dev wanting to leave the market.
- If you're a frontend dev who really knows how to program, you're likely to increase your salary by moving into backend or full-stack programming.