This article is intended for tech leads and engineering managers :-) For junior engineers, this article will be helpful in understanding how engineering promotion and progression works. This article is best read in the context of a startup that has raised between $1M USD to $50M USD. As a company grows in size towards maturity, and the culture of doing something the way it is starts to kick in, the ability to affect changes as an individual becomes harder.
Why a career progression chart is not enough
I like to joke with my engineering managers at Xfers that any attempt to solve an engineering progression level and giving every software engineer a career progression checklist is akin to a P versus NP problem.
This is because,
- We can write out what we are looking for at each engineering level
- We can easily verify the level of a software engineer with enough quantifiable and qualitative data
- But we can’t help a software engineer to figure out what he needs to do to reach a particular level.
It's generally easy to define the progression level for a junior (SE1) to a mid-level (SE2) software engineer. There are many websites dedicated to that, including a great one listed over here by Gitlab.
For an SE1 engineer, we can easily quantify the engineer’s success and progression with observable data and metrics, as the tasks assigned to an SE1 engineer is often unambiguous and simple.
For example, suppose a company cares about technical competency, they can prescribe the following writeup to guide junior engineers on what to look out for in order to progress to an SE2 competency level:
For an SE1 level, it’s quite easy to quantify writing error-free code and not pushing bugs to production.
Evaluation of the competencies of an SE2 engineer is significantly more ambiguous than that of an SE1: what is an “expert user of a programming language?” What constitutes “coding best practices”?
We quickly realize that it is becoming impossible to prescribe a comprehensive checklist for engineers to “work on” or “check off” to qualify them for the next level in their career.
However, identifying whether someone is is an “expert user of a programming language” is fairly straightforward. We can check if the engineer is using python best practices like list comprehension in the context of the overall code structure where applicable.
Nonetheless, there are many engineers who would come to us to talk about how they can progress to the next level and we try our best to help.
Start by understanding what the company needs
To progress in a company, you will need to understand what the company needs to achieve and hence align yourself with the company’s goals.
You will manifest this alignment by understanding what projects to prioritize, what kind of metrics and impact that your team should be measuring and striving for and how to influence everyone on the correct course of action.
As an engineer, although your technical domain is in building products, having a strong understanding of what the company is trying to do will inadvertently lead you to suggest things that are outside of your scope.
For example: If there’s a certain product launch that needs to be completed in 3 months times, and you are aware that there is inadequate headcount or infrastructure support from other teams to fulfill this, you should be anxiously speaking to team leads, product and project managers and escalate your concerns until a resolution is found.
Put on a hustling mentality and go beyond what you would do to solve problems.
As a corollary to this, if you do not believe in what the company is trying to achieve or if you feel that engineers should not need to understand what your team’s business goals are, then you will find yourself often at the mercy of complaining about problems but not being able to be part of the solution.
Of course, there will be times when the company and team’s PnL are badly hit due to unforeseen circumstances such as COVID 19, and hence no matter what you do, the career progression and salary increment which you are looking for would have to be placed on hold.
This brings us to the next point,
Understanding the role of management.
By understanding the role of management, you can be part of the solution that affect changes and have a meaningful conversation on your career progression.
Apart from figuring out how to grow the company’s revenue, the main responsibilities of management are to identify and groom your company’s role model. Who you promote, retain and let go of will ultimately define the company’s culture.
Your role is therefore to identify key personnel who is willing to invest in the success of the company. Naturally people who has actively worked to contribute to the success of the company through thick and thin should and will be rewarded.
It’s the responsibility for managers and tech leads to create a great company to the ethos of all employees leaving the company should end up to be a better version of themselves.
Sure, as a startup your company might not have the means to compete with the likes of FANG companies in compensation, but your employees needs to acknowledge that your company is a great company and the only reason why they are leaving is due to financial circumstances.
Do not be selfish — Making self irreplaceable and then replaceable
If you were to understand the above two points, great!
Else a simple rule of thumb that you can take away is: Don’t be selfish, pull everyone up around you. Do something that’s not just the best for the team but for other teams interacting with your team.
Too often do people fall into the trap of making themselves irreplaceable and preventing the team around them from growing. This severely limits the impact that an individual can produce and the company is also at risk of having someone with too much knowledge in a single person.
The person who holds on to too much knowledge will also find themselves unable to understand the bigger picture of what the company needs and thereby become less effective as a leader.
By having a correct team structure of adequate junior, mid-level and senior engineers, proper succession planning can take place and everyone benefits from this arrangement.
Supposed you have a team of 3 x SE1, 2 x SE2, and 1 x SE3 as the tech lead. If the tech lead is unable to train the SE2s to get promoted to SE3, he or she will always be the bottleneck of the team.
The tech lead will also not be able to find time to lead the team effectively and be a multiplier for his team as he will have to bury his heads down in fixing and working on technical matters.
Very soon the tech lead will feel that he is spending hours working tirelessly but yet his impact is not proportional to what the company expects him to deliver as an SE4 when he is asking for a promotion.
When this happens, the company suffers from having the tech lead leaving because both parties have very different expectations on work vs actual impact achieved. The tech lead also suffers, because he can never understand what it means to deliver what the company needs, going through hard times and learning how to scale his team effectively.
As mentioned above, trying to teach someone how to progress from a SE2 to SE4 is like a P versus NP hard problem.
Perhaps some engineering koans to express an insight of what it means to progress to a SE4 can be as follows. If you understand the below koans, it is likely that you understand what it takes to be a SE4
- Make yourself irreplaceable and then replaceable
- The act of telling you what to do will disqualify you. The act of asking what to do will disqualify you.
- Do not aim to be a SE4. It will come.
SE1 means software engineer level 1, fresh out of college
SE2 means software engineer level 2, 2 to 3 years of experience
SE3 means software engineer level 3, with at least 2 to 3 years of experience. Often referred to as tech lead of senior software engineer.
SE4 means software engineer level 4. Often referred to as Staff engineers. For most startups below a series C level, 4 engineering levels are adequate.