Developer salaries are greatly mispriced
TLDR: A great developer is 5–25x cheaper per unit of productivity than an mediocore developer.
After years of working with many types of developers at all skill levels it has become obvious that a great developer is about 10–50x more productive than a mediocre developer.
A 50x multiple might seem like an exaggeration but for architectural work it is really accurate. I have seen many cases where a mid-level developer is given an architectural task. In these cases the developer builds something, realizes it won’t work, rebuilds it, fails again, changes some other parts of the project, builds again and then realizes that he messed up the other part of the project. Finally he comes up with a solution that is kludged together but works. A month goes by and the requirements change, unfortunately the new requirements totally break his architectural and he is forced to start again.
A good developer on the other hand will often choose a good architecture that will work the first time and be flexible in dealing with requirement changes.
Besides for the direct costs of the developer’s salary there are many additional indirect costs of mediocre developers which can amount to much more than just their salary.
- Additional Sr. Developer time spent on code reviews and communication
- Additional Quality Assurance time
- More servers (as code is not as performant)
- Risk of loss current and future customers due to buggy code, slow issue resolution time and a lower quality product.
Quantitative Cost differences
A mediocre developer costs between $70k–$125k per year, a great developer costs $100k–$250k per year. Let’s approximate this and say a great developer costs about ~2x more per unit time. Since a great developer is 10–50x more productive we conclude that; A great developer is 5–25x cheaper per unit of productivity than an mediocore developer.
In most cases it makes sense to hire only great developers. Companies like Google and Planatir seem to have figured this out.
The only scenarios where a mediocre developer should be preferred is for menial development tasks where a great developer would get bored with and eventually quit.