I started my software engineering career more than 14 years ago.
Back then I was doing some SEO script automation using PHP.
Slowly, I integrated better into the company and started to work on more core features of the product, and eventually even leading my own product.
I worked 6 years in that company.
While working there, the company grew by approximately 3 people.
This is far from your average hyper growth startup.
We had no titles, no promotions, no performance reviews.
I was happy because I was doing software engineering and calling myself a software engineer.
It’s only when I needed to revamp my CV for a new job search, I had to look back at these 6 years and try to put the “correct” titles to each period of time:
Web developer at the beginning
Senior software engineer afterward
Tech lead when I was leading my own product and a tiny team
And only when I joined Autodesk, an American corporate, I was exposed to titles, career ladder and promotions.
And I learned that many companies, both small and big, have titles and career ladders.
What’s up with the titles?
There are multiple reasons why companies are obsessed with titles.
Firstly, titles help normalize pay range.
You don’t want an engineer with 2 years of experience to be paid the same as one with 6 years of experience.
So you create titles.
The first one will be Junior, and the second one will be Senior.
The pay range for junior is X and for senior is Y.
Often times, companies will have multiple internal titles behind one external title.
For example a Senior Software Engineer as an external title, could be translated to either Sr.SW1 or Sr.SW2 based on different factors.
This allows for further fragmentation of the senior scale.
Instead of putting everyone who has between 5 and 10 years of experience into one big bucket named “Senior”, you would split it between Sr.SW1 who has 5 to, say, 7 years of experience; and Sr.SW2 who has between 7 and 10.
On the outside, both of them would call themselves Senior Software Engineer.
Second reason companies have titles is to allow for progression and evaluation.
Titles are usually attached to a set of roles and responsibilities.
A junior engineer might be someone who requires assistance and closer supervision.
The assistance and supervision is usually provided by a senior engineer, thus becoming senior requires that you mentor someone less experienced than you.
Other functions might include things like reach and scope.
A junior engineers work output will impact only his assigned task.
Senior engineer, on the other hand, might improve something in system as he/she works on the assigned task.
A staff engineer is someone who improves something that affects not only his team, but other teams as well.
Examples could be things like introducing a new monitoring tool that is adopted by multiple teams; improving some workflow; etc.
When the time comes to conduct performance review, your manager will look at your impact inside the team and organization, and based on that will decide whether to promote you to the next level.
With promotion also comes the raise in pay, since levels are tied to pay ranges.
And when you are interviewing for a company, even though they interview you to an external title like “Senior Software Engineer”, internally they will assign you the company level title based on things like: your compensation, years of experience, how good you passed the interview, etc.
There is a website called levels.fyi that allows you to look into different career ladders in different companies, and how they compare.
The promotion dilemma
Often times, failure to get promoted will lead to either you being put on a performance improvement process, or getting fired.
If you look at a career of engineers who stayed for long time in one company, you will see progress.
It could be junior to senior to tech lead.
Or it could be senior to staff to engineering manager.
It all depends on the route in which the engineer want to grow.
What you won’t see is someone who is stuck in one position for a very long time, usually more than 2–3 years.
Instead, these people would move to a different company which sometimes come with a title improvement.
And because title is tied to salary, this also means salary improvement.
This is why they say that it’s better to go to a different company if you want a pay raise and/or title improvement.
Some companies are either slow, or fail to promote you, while other companies would be happy to do so, based on your years of experience and how well you pass the interview.
But not everyone is a job hopper, and some people do get stuck in the same company and same title due to laziness, comfort, or other reasons.
These people, unfortunately, are prone to a curse that I call “The Curse of the Senior Software Engineer”.
The Curse of the Senior Software Engineer
Before I continue to talk about the curse, and how to avoid it, I want to clarify why it applies mainly to senior engineers.
And seniority, in this case, is referring to reach and scope based on company’s career ladder rather than years of service.
If we look at an engineer’s career, we can split it in two (at least from my experience): Individual Contribution (known as IC) and Leadership.
Everything up to, and including Senior level, falls under IC definition.
ICs are people who are doing their own work.
They close tasks, fix bugs, carry team duties like on-call schedules.
They might improve the product or the code base, bring their ideas, mentor less experienced engineers, voice concerns and propose resolutions.
But their scope is, mainly, limited to the individual/team level.
They do not have any cross team or organization level impact.
The moment you cross the boundaries of your own team, you are moving to a Leadership position.
In a healthy organization, Leadership positions are broken into two: Technological Leadership and People Leadership.
Technological leadership includes titles like Staff Engineer, Tech Lead, Principal Engineer, Architect, etc.
People leadership includes titles like Team Lead, Engineering Manager, Group Lead, etc.
You need to reach Senior title in order to be promoted to leadership position.
If you see someone who was promoted to a leadership position from a junior title, this could indicate either unhealthy organization, or incorrect initial title assignment.
Whether you will be promoted to technical leadership or people leadership, is determined by your desire and the career path you have built with your manager.
But what happens if you reach a Senior level and get stuck there?
There are many reasons to get stuck in a certain level, but they all boil down to either of the two: you fail, or the company fucks up.
You, failing, could be lack of ambition to fight for promotion; lack of desire to be promoted; being comfortable where you are; etc.
A company fuck up might include things like lack of proper promotion protocols; frequent organizational changes which interrupt promotion cycles; in-ability to properly identify who to promote; etc.
Oh, and there is always a personal factor.
Companies don’t like to discuss it, but we are all humans.
It could be that your manager simply does not like you, and so he/she will try to do their best not to promote you.
This could be a pure humane dislike (they don’t like the way you look, the way you talk, the way you dress, etc.); or it could be due to their own insecurities such as being afraid to become redundant or replaced by you, who is super successful and eager to conquer the world.
And finally, some people are just bad managers.
Companies should have protocols to avoid this from happening, but hey, we are all humans, and sometimes we fuck up.
So you stay Senior for too long, and you get cursed by the Curse of the Senior Software Engineer.
The curse goes like this:
Stay senior for too long, and there is a high chance that you will get this curse.
How do I know?
Because I judge based on my experience.
I’m a Senior engineer with 14+ years of experience, and was never interested in titles, nor practiced any job hopping for the sake of title improvement.
I like what I do, and I think I’m good at what I do.
But I never felt like playing the corporate game and climbing the career ladder.
I spent the first half of my career in a-typical companies, without any corporate BS, and I can attest that I was successful in what I did.
However, as I found myself burnt out, I left the corporate world in pursuit of building a sustainable online business, with the idea to never return to a traditional workplace.
I have failed however, and in the middle of my 6-month sabbatical, I started to look for a job.
After applying to 100+ positions, I got a bunch of generic rejections.
From those who did not reject me, some told me that I’m overqualified for Senior roles, but under qualified for Leadership positions.
I had to make assumptions as to why I’m getting rejections.
I could have blamed the 2023 tech-recession, but I like to blame myself, so I had to do some self-analysis.
And while it could be the 2023 tech-recession, if there is a slight chance that my theory is correct, I would like to spread it and inform other engineers to not make the same mistakes as I did.
How to avoid the curse?
There are two ways: you either play by the rules or you exit the game.
You have to play by the corporate rules and become obsessed with the corporate career ladder.
You need to follow your promotion cycles and make sure you are not stuck at one level for too long.
If you are, you need to stay proactive and consider quitting and moving to a different company.
This move should include a title improvement.
It sounds cruel, I know.
But this is your career.
Companies, in general, won’t care too much about you.
By the time you will naturally grow for promotion to next level, your manager might change, or the entire company might get restructured.
And while other people, who were more pushy and demanding than you, will get promoted—you will stay behind, slowly acquiring the Curse of the Senior Software Engineer.
The other option is to exit the game completely.
Remember, FAANG or MANGA, whatever the acronym right now is—dictate the way the industry operates.
If they have titles and career ladder, other hype driven, VC funded startups will follow.
The only way to exit the game, is to find a company that is not like them.
A company that does not care about titles or have performance review rituals.
It’s harder, but companies like this do exist.
This is what I did.
I just found a local startup company (well, in fact, they found me) that does not care about titles and other corporate rituals.
I don’t have daily standups or monthly retrospectives.
We just pull tickets from the backlog and do them.
Other companies you might consider are big-n-old companies like banks, railway operators, hospitals, etc.
This also includes IT departments in boring standard companies.
Remember, almost every company needs programmers nowadays, but most of them won’t take you to parties in Hawaii, have a hipster office in the coolest building in town with a bearded barista, and attach you the “Full Stack Ninja Squad Leader Engineer” BS title.
This also means they won’t pay you the same money as FAMANGA and Co, and you won’t work with the latest and greatest tech (although exceptions exist).
Another option you might consider, is switching to self-employment either through freelancing or contracting.
Nobody cares what your title is, or how many years of experience you have, as long as you can deliver the work in time at a reasonable price.
There is no better or worse decision.
While I don’t see myself coming back to traditional corporate environment (unless forced to), I can understand why people would want to work in Meta or Google and Co.
And if you do, remember that there are certain rules you need to play by.
It’s not enough to “just write code”.