Salaries of middle-class professionals have been stagnating in real term since the 1980s. This statement has been reiterated all over the media, usually with various graphs to support it.
Software developer is a profession that’s usually included in these figures. Programmers have been paid handsomely in the past, but these days, the average software developer salary is not that impressive—although it’s still higher than what people in other professions earn. Arguably, it hasn't only stagnated, but has actually gone down.
The field of software development has traditionally attracted people with enthusiasm for technology and good problem-solving skills, precisely because it was considered to be a career choice where people were able to earn a good living while practicing what they love.
However, because of the salary stagnation, many developers either became pessimistic in their career outlook or are now considering doing something else, which is usually something that they have much less enthusiasm for.
Those who are worried about salary stagnation should not despair, though. As strange as it sounds, the key reason why the average figure has stagnated is actually something that people should be happy to hear.
You can still make tons of money writing software, and that’s not going away any time soon. If you want to know how, read on. This is exactly what we’ll cover.
What is the Main Reason for Salary Stagnation?
The most fundamental reason why the average salary of a software developer has gone down is as follows:
There are now many more entry-level programming jobs than there ever were.
I told you that you would be happy to hear this. Isn't that awesome news? Indeed, since the profession of software developer was invented, the barrier to enter it has gone down quite substantially.
A number of decades ago, you, as a developer, needed an encyclopedic knowledge of computer systems. There was neither Google nor Stack Overflow to give you an instant answer. Neither were many developers out there whom you could get in touch with and ask for help. You had to know how a given system worked, and if something was not right, you had to be able to figure it out yourself.
Having a specialist degree was a must. There was virtually nowhere else to learn software-building skills other than the computer science department of a university. With a volume of knowledge pretty much equivalent to what a medical doctor needed to know, your salary would have been comparable to their’s.
These days, however, the situation is very different. Becoming a software developer is easier than it has ever been. Many developers don't have a degree related to programming, and some don't even have a degree. For example, almost 50 percent of developers who have participated in Developer Survey, organized by Stack Overflow in 2015, said they never received a degree specifically related to programming. Roughly 42 percent of all participants identified themselves as self-taught.
With the help of the web and some amount of discipline, you can learn how to write software from the comfort of your home. Just completing one or two coding tutorials can, in theory, be sufficient for getting into a junior developer role.
You will inevitably encounter things that none of these tutorials addresses. However, the answer for most of these problems is just a Google search away.
Although as a junior developer you will never earn as much as someone who has a wealth of specialist skills that took years to develop, you will still do fairly well compared to many other jobs in the economy.
It is easier than ever to get into an entry-level programming position, but the demand for software engineers remains strong. This is what keeps the salaries of junior programmers from sinking any lower than what they currently are. As software plays a more important part in our lives than ever, it is unlikely for this trend to change anytime soon.
How Does the Free Market Affect Salaries?
As a rule of thumb, in free-market economy, there are three factors that determine how much you earn: the need for what you do, your ability to do it, and how difficult it is to replace you. When the profession of software developer was in its infancy, pretty much everyone in the industry scored high on all three of these.
The need for developers was there, and as they were required to complete an extensive amount of education and had to be able to do many things by relying on their memory, being good at what they did was just a prerequisite to enter into the field in the first place, while replacing any of them was next to impossible.
Today, the situation is different. Demand for software developers is as high as ever as more and more organizations, both in public and private sectors, produce software—whether it’s to sell or purely for internal use. Despite the barriers to entry being lowered, being a software developer still requires specialist skills that take time and effort to acquire. Because of this, programmers are still difficult to replace. Certainly it’s not as hard as it was in the past, but it’s still hard nonetheless. This is what keeps their salary relatively high.
Indeed, in many companies the tasks of a junior developer resemble assembly line work. To do these tasks, you don't need to have in-depth knowledge of the technologies that you use, and you don't even get to write any software from scratch. This is what keeps the average salary down.
Often, junior developers only modify the code that somebody else has written to fix bugs and add some relatively small features. The only time junior developers are challenged to learn new technology is if it has been introduced into the software they work on by someone more senior.
So this is indeed good news for anyone who aspires to become a software developer but is intimidated about having to obtain deep technical knowledge.
But what about those programmers who are genuinely talented in their craft and don't mind dealing with painfully difficult technical problems? The good news is that neither the jobs for true technical wizards, nor the high salaries associated with those, have gone anywhere.
Why Do Certain Developers Get Paid Different Salaries?
The reason why software developers are paid differently is because of a discrepancy in skill level required in different roles, which is sometimes very large.
I'll give you a good example. Try going through the official C# tutorial. If you’re familiar with any other programming languages, you’ll probably find it easy. If you’re completely new to programming, you’ll likely find it moderately hard but still doable. The skills taught in the tutorial are the skills that a junior developer specializing in C# would require.
So, after you've done the tutorial, try going through Autofac documentation. This is a widely used dependency injection container in the .NET ecosystem. If you aren't familiar with it already, you’ll probably find a great part of the documentation next to impossible to understand.
Before you can even start reading the documentation, you need to have a good grasp of inversion of control and Factory design patterns, which themselves are not very easy to learn. Even if you know these design patterns, you will still probably have to read some chapters multiple times and actually use the library in your code in order to fully understand it.
Therefore, here is why different developers get paid different salaries. For a junior developer at the lowest end of the salary spectrum, knowing basic C# is enough. Those developers with experience, however, who know the most widely used design patterns and have a good grasp of libraries such as Autofac, will probably receive double or even triple of what most junior developers do. However, this is still very far from the level of skill equivalent to highly qualified developers of the past.
There are positions out there where deep technical knowledge is absolutely required, and those positions pay really well. However, unlike it was back in the day, those are not strictly related to working with low-level computer architecture.
How Do You Find High-Paying Developer Jobs?
Or you can just stay an average software developer, where you will still be paid reasonably well but far less than you could be. Honestly, there is nothing wrong with this. The choice is truly yours.
There is a catch, though. The vast majority of available software development jobs don't require any advanced skills. There are many software companies out there, but very few of them do anything significantly different from building a website, a mobile app, or a content management system (CMS).
Of course, none of these companies would be willing to pay much more than an average salary for any of such positions, because this is how much the skills needed in such jobs are worth. You may have some advanced knowledge of machine learning, but who cares if all you have to do in your current role is build a back-end for a website? You only get paid for your knowledge if it's actually applied, and in this case, it isn't.
If your current employer doesn’t do anything related to machine learning (or any other advanced technology that you know), the only way you can utilize your knowledge and get an appropriate financial compensation for it is to find another employer. The good news is that if you’re already employed as a software developer in any capacity, your paycheck—even if it’s as big as it could be—would be sufficient to cover all of your expenses while you are on the lookout for another opportunity. Another bit of good news is that there are more of these opportunities than there ever were.
There may be some obstacles in your way. For example, what if you live in a relatively small town and have some advanced knowledge, but none of the software jobs available locally require any of it? Well, you can look at it from a positive angle.
When software development was in its infancy, a town of similar size to yours probably didn't have any programming jobs. Not a single one. So yes, it might be frustrating if you have to relocate to fulfill your full potential, but this is what people in your situation have always done anyway.
Remember that you are in a position where you can earn a reasonable living before you relocate. These days, even small towns are likely to have software-related jobs.
Relocation, however, is not the only option. With the almost-universal availability of high-speed internet, you can now work remotely from pretty much anywhere. Usually, you will only be obliged to turn up at the office once in a while. Even if it is a three-hour commute, you can live with it if you don't have to do it too often.
This is not for everyone, though, as some people struggle to put themselves into working mode while they are at home. But this is one option to consider.
Advanced Technical Skills Are Not the Only Way to Higher Pay
So far, we have covered how you can raise your salary purely based on your technical skills. However, there are also other ways of raising your pay that don’t require spending hours studying some advanced technology that only relatively few people would able to master.
Of course, everyone in the profession knows that you can increase your salary by moving into a less hands-on role such as team leader, technical architect, or project manager. As many developers genuinely enjoy coding, it’s not the path that many of them would want to take. This is why we're only mentioning it.
One thing that will help keep your salary at the top of the market range is more of a character trait than a specific technical skill: assertiveness. The good news is that this character trait is a learnable skill and will develop with regular practice. More good news is that once you possess it, it will help you in areas other than your salary.
You have probably seen job postings where salary is advertised as a range. Usually it says “depends on experience” next to these numbers. The truth is that this isn’t always the case.
If the discrepancy between the advertised salaries is large—for example, if the higher number is twice as big as the lower number—then it probably does depend on experience. The company that put the posting up doesn’t mind taking a developer on board at any level and is prepared to pay accordingly. The story can be different, though, if the salary range is not that high but is still significant.
If you are looking at a posting for a senior software developer and both the lowest and the highest numbers in the advertised salary are appropriate for this type of position, which salary you will ultimately end up getting is likely to have nothing to do with your experience. These numbers have probably been put there because the hiring manager expects candidates to negotiate.
If you are in this situation, your task is to be as assertive as possible, backing it up with persuasive points of why it would be mutually beneficial to pay you more. If you are usually reserved and shy, you may be uncomfortable with the whole idea. However, getting out of your comfort zone in this situation will help you in many areas of your life. If you have already decided to stay in a hands-on programming position but don’t want to study a specialist advanced technology, this is pretty much the only way for you to be paid more.
The same principle applies to salary negotiations. If you’re pretty certain that your current salary is well below what you could earn elsewhere, that’s probably because you haven’t been assertive enough in the past.
If you haven’t been able to say “no” to your bosses in the past, it will be difficult to change your behavior toward them now, and your newly found assertiveness may not be perceived very well. This is why it is always easier to negotiate your salary when you are about to start a new job than change things in the existing one.
The easiest way to achieve a raise in an existing job is to volunteer to take more responsibility upon yourself. There is a risk, though. Instead of giving you a pay raise, your bosses may just take advantage of your newfound enthusiasm. Despite this, it would still pay in the long-term. You can put the new responsibilities on your resume for other potential employers to see.
In a nutshell, although the average salary of a software developer has stagnated or even decreased, this didn’t happen due to devaluation of the profession itself. On the contrary, this happened purely because of a huge explosion of jobs that don't require anything above basic programming skills.
If you are willing to put an effort into learning complex and hot technologies in-depth, you can still earn very well. Likewise, you can increase your salary by being persuasive and assertive.
Although those well-paying jobs that require complex skills are relatively rare, there are actually more of them out there than ever. If there aren't any where you live, you'll have to either relocate or work remotely—but you will almost certainly be able to find a basic programming job to pay your bills before you find a truly good one.
Remember, there’s nothing wrong with staying at this level. If you’re fully satisfied with where you are, it’s probably not the right time to make any major changes.
However, if you’re ready to put in an insane amount of effort, you will eventually reap your reward. If you do what others won't today, you will do what others can't tomorrow.