Are you considering the idea of advancing your software engineering career, but don't know "what's next"?
This article is for you.
I'll lay down the software engineering career pathway.
Junior Software Engineer
A software engineer starts their career as a junior software engineer, also known as an "associate" software engineer. Some companies prefer to use the word "associate", which is simply a different way to define an engineer with little to no real-world experience.
A graduate software engineer is also a junior software engineer.
A junior software engineer usually has 0 to 2/2.5 (someone would even say up to 3) years of experience.
Notice that being a junior software engineer has nothing to do with the age itself, but more about the experience.
A junior software engineer is an engineer who has never worked on a real-world project, and someone who is figuring out what is software engineering as a whole.
An associate software engineer needs close supervision from someone more experienced, and they're more likely to spend time pair-programming.
Mid-Level Software Engineer
A mid-level software engineer is a software engineer who has between 3 to 5 years of experience.
A mid-level software engineer needs less (but not zero) supervision from more experienced software engineers.
They have a good understanding of the codebase and are also more likely to take on more responsibilities.
Senior Software Engineer
A senior software engineer is an engineer that has 5+ years of experience.
Senior software engineers are leaders.
They have the responsibility to train and mentor junior and mid-level software engineers.
They have excellent problem-solving skills, deriving from the years of experience accumulated.
From what I've understood, a principal engineer is an engineer who has the same (or more) experience as a senior software engineer but has expertise in some areas.
A principal engineer is more concerned with software architecture.
A truly valuable principal engineer makes their whole team better by advocating for best practices, gently reminding people of why the processes we have exist, and helping the less experienced engineers find ways to ‘level up’. [...]For an engineer to get to the principal level, there needs to be cross-organizational, collaborative signals, and there needs to be a clear understanding of architecture and design decisions that go far beyond the immediate technical area of expertise.
(Silvia Botros, "The reality of being a Principal Engineer")
A technical lead is a highly-technical engineer with 5+ years of experience.
Technical leads are also leaders.
A technical lead has stellar system design skills. They have strong code reviewing skills. They are responsible for settings the standards for the team.
An engineering manager is (usually) a previous software engineer who now wants to be responsible for managing people.
However, I've met engineering managers who have never written a line of code but can still understand the tradeoffs of software engineering because they work closely with software engineers.
Engineering managers are also leaders.
They are responsible for unblocking engineers and ensuring they reach their full potential.
Engineering managers have strong project management skills.
I came across this insightful [article](17 reasons why becoming an engineering manager is not what you thought it will be), claiming that engineering management is not career progression but rather a career pivot.
A software engineer’s natural career progression is to become a senior, then a staff, then a principal, and so on. Becoming an engineering manager is a change of career track. It’s more closely related to going from an engineering role to a product manager role. You’ll need to develop a bunch of new skills you didn’t know it even existed.
To me, an engineering manager works for the team. Not the way around.
Other considerations to make:
There are even more advanced positions than being a Principal or Technical Lead that I've seen so far in my career.
These positions are, for example:
Head of Engineering: they are responsible for the entire engineering department, and their main focus is to deliver the best possible customer experience.
Technology Director: they are responsible for the company's information, strategy, and business.
A software engineer can start with one stack (for example backend) and specialize in another stack.
A software engineer can decide to take a completely different path. It's less common, but some software engineers decide to become a Scrum Master or an Agile Coach, instead of continuing with core, hands-on engineering. Or even switching to a completely different field, such as data science, data engineering or cyber security.
I've also seen software engineers switching to DevOps engineering and Quality Assurance engineers switching to core software engineering.
And this is the beauty of being a software engineer: knowing how to program and understanding how to create software are skills you can transfer to other fields.
In this article, you've learned about the software engineering career path way.
Software engineering is broad and a career that can open many doors.
Do you agree with the framework above? Let me know in the comments below.
Until next time! 🙋🏾♀️