I have heard a lot of rants about inflation of terms like "junior", "middle", and "senior". More experienced programmers like to mention that "grass used to be greener back in my days".
If you have never heard about this opinion you can get familiar with it in one of these posts:
So, I have decided to conduct a small and simple case study on these titles for the last 20 years. The main goal of this study is to answer a question: do developer titles lose their value?
Please, note that this is not a scientific paper, it is just an excuse to discuss this topic with the community. And I kindly invite you to express your opinion in the comments.
Let's move back in time into 2000 (yes, it was almost 20 years ago, and no, 1970s were 50 years ago).
Joel Spolsky wrote a legendary post in 2000 called "How do You Compensate Programmers?". There's an awesome table with values and skills for different levels of developers that I am going to quote as a main reference to that point in time.
Years of experience: 0
Technology exposure: Two programming classes and incredible aptitude
Initiative and architectural skills: Can develop code with significant mentoring and review. Intended mainly for summer interns and high school kids.
Years of experience: Recent grad – 1 year
Technology exposure: Coding for one OS like Unix, two or three programming languages, no API experience
Initiative and architectural skills: Can execute on a plan or write code that someone else specified, requires some mentoring
Well, we can agree that apart from technology stack not much have changed.
Junior developers still require mentoring and guidance.
Years of experience: 1 years – 3 years
Technology exposure: 2 platforms (e.g. WinAPI and Unix); RDBMS; two or three other programming platforms (like ASP, JSP, PHP, perl, etc)
Initiative and architectural skills: Can work independently on a feature and can suggest improvements and shortcuts
Years of experience: 3 – 5 years
Technology exposure: Enough different technologies to be able to make excellent choices of architecture
Initiative and architectural skills: Can design and architect a feature independently; given an interesting problem to work on, can architect, lead, and build the whole thing; can mentor less experienced developers
The same is pretty accurate for the middle role as well. Technologies have changed. Principles stayed. We still give independent tasks to middle devs, we still rely on their decisions. And we rely on them more and more as the time goes by.
Years of experience: 5 – 10 years
Technology exposure: All the above, plus, knows enough about other disciplines to be able to lead specialists in those areas (e.g. networking, wireless, hardware, datacenter, telecom, etc)
Initiative and architectural skills: Can conceive, design, architect, and lead a team to implement an entire product or company. CTO-like skills.
Years of experience: 10 years plus
Technology exposure: Significant experience inventing and architecting new technologies which are widely used throughout the industry
Initiative and architectural skills: Invents whole new programming languages like C++; extensively known through books and articles.
And again. We clearly see a picture of a modern-day senior developer. Maybe except for that "new C++" part.
And that is pretty much it about that time. Ok, here's an old programming joke for you if you feel nostalgic.
That's the time when I have started my career. Let's see what job definition we had back then.
Person A: A Junior developer will need near-constant help. Not only will they not know the business domain, but they may also struggle with the fundamentals of the language or the toolset. They don't know what they don't know, so without guidance, they will make frequent mistakes.
Person B: They are assigned the least complex tasks and should be supervised fairly closely. Generally they know about 10% of what they think they know. Usually they have not been through the whole development cycle and so often make some very naive choices if given the opportunity to choose. Sadly many of them don't actually care what the requirement is, they want to build things their way.
No doubt that this definition matches the one that Joel gave 20 years ago.
Person A: A regular Developer has some experience under their belt. They will be independently productive and will be able to tackle most tasks on their own, or understand when they need to reach out for help.
Person B: Middle developers can produce working code with less supervision as long as they are assigned to relatively routine tasks. They are not generally tasked with high-level design or highly complicated tasks that require an in-depth level of knowledge. They may be tasked with the design of a piece of the application though, especially as they are in the zone to become a senior developer.
That's is almost a quote of Joel thoughts. As we can see the principle remains the same for middle developers too.
Person A: A Senior Developer has even more experience and will be able to design solutions as well as completing tasks. However, they may need their proposed designs vetted before they start to implement, as they won't necessarily have an overall architectural vision. They will be able to mentor more junior members of the team.
Person B: Seniors are experts in their chosen technology stacks. They are given the hard tasks (the ones nobody knows how to solve) and often get design responsibilities. They often work independently because they have a proven track record of delivering the goods. They are expected to mentor Junior and intermediate developers.
And again, this is an exact match of both today and 10-year-ago understanding of how "Senior developer" is.
We can clearly see that the definition of developer levels have not changed much. But, the industry have. And changes are massive! Almost all sources that I have found say that it is more challenging to become software developer now than it was 10 or 20 years ago.
So, do developer titles lose their value? No, the brief overview of existing sources shows that they do not lose their value. And instead, we are raising the entry gap for each of them by increasing the number of technologies one needs to know.
And what do you think? Let's discuss!
(open source and trusted by devs everywhere ❤️)