At Shuttl, we have two sets of roles and so two possible paths that an engineer can take as they build their career here. The first set of roles are about managing people and the work they do and the second set of roles are about managing systems and services that we build.
Many organizations will have dozens of designations at the Software Engineer levels — I feel that gives a false sense of growth when there is no real difference in the job. Also, its not unusual to see only one level to flatten out all aspects of management and leadership. This in my experience is because of a lack of appreciation of the difference between management and leadership roles.
Here is an illustration depicting the career ladder that I use followed by short notes on each level. Its intentionally simplified for this blog post and so it excludes quality assurance, data warehousing and analytics, and site reliability engineering/devops — I will discuss them in a separate post.
Notes on the various roles and levels
Software Engineer, typically upto 3 years of experience. The job expectation is to build quality software in a timely fashion using the prescribed engineering process.
Competence and skill on the following subjects — programming languages, operating systems, networks, databases, algorithms and data structures, browsers and the internet, basic code design, productivity and soft skills
Senior Software Engineer, typically 3 to 6 years of experience. The job expectation is to build software and coach other software engineers.
Additional skills— basic architecture, advanced code design, coaching, training, basic project management.
Tech Lead, typically 6 to 9 years of experience. This is a people and projects role. The job expectation is to develop product expertise, technical mastery and build a team.
Additional skills — advanced architecture and system design, basic product understanding, people management, project management.
Engineering Manager, 9 to 13 years. This is a people and projects role. The job expectation is to build processes for teams, champions product thinking and provides technical leadership.
Additional skills— advanced people management , product design, project management and basic business orientation.
Staff Engineer, 7 to 9 years. This is a systems and services role.The job expectation is to own architecture and solve larger technical challenges.
Additional skills — advanced architecture and system design.
Senior Staff Engineer, 9 to 12 years. This is a systems and services role. The job expectation is to evolve technical maturity and ability of the organisation by applying new technology and practices.
Additional skills — building an engineering culture.
Principal Engineer, 13 years or more. This is a systems and services role. The job expectation is to provide comprehensive technical leadership and direction. Solve technically hard problems.
Additional skills — technical research, business sense, leadership.
Director/VP of Engineering, 13 to 16 years. This is a leadership role. The job expectation is to compete in the market by building an organisation that synergises people, product, and engineering. Execute a technical vision. Prepare for the future.
Additional skills — business sense, organisational design, strategy, marketing, culture, leadership.
CTO/Head of Engineering, 16+ years. This is a leadership role and it differs only in scale from a Director/VP of engineering role. Typically 3 to 6 Directors/VPs may report to a CTO.
For each of these skills I have some significant, although not exhaustive, recommended reading.