Junior vs. Senior vs. Staff Engineer
By: Bobi Pu
Tags: Facebook, Silicon Valley, Career Development

Career progression is an evergreen topic for software engineers because it directly impacts income. In this note, I am going to share my personal perspective on the differences between Junior(E3–4), Senior(E5), and Staff(E6) engineers.

Junior Engineer

At this level, engineers focus mostly on demonstrating the coding capability and get familiar with engineering practices.

On the technical side, this level’s engineer should be able to:

Understand codebase and drive assigned request to improve it, such as migrating it to modern frameworks and adding missing tests

Design well-organized code

Independently complete medium to large features

On the “People Skill” side, there are not many requirements. The most important thing to demonstrate the capability of accomplishing tasks with other disciplines(design, PM, analyst).

Img from levels.fyi

Senior Engineer

The senior engineer also called SDEIII at Amazon and L5 at Google. At this level, the engineer should establish him/herself as “an owner of a feature or system” with an expert end-to-end understanding of it.

On the technical side, a senior engineer should:

Be able to design, breakdown, and complete a project of a large scope with high-level productivity

Proactively find problems of existing system/product without guidance and offer solutions

Be able to lead a project with a small group of people, such as hosting weekly meetings, communicate with other partners in written forms

On the “People Skill” side,

Make contributions to improve the engineering team. For example, activities like interviewing, or mentoring

Be able to give on-point and actionable feedback to peers

Be able to build X-teams and XFN relationships which will facilitate ongoing projects

Staff Engineer

Usually, each engineering team will have 1–2 staff-level engineers, they are considered as the “Tech Lead”. He/she co-owns the success of the team with its engineering manager.

On the technical side, the biggest difference is a staff engineer is able to identify and solve a technical problem that few others can. Specifically:

Be able to implement the hardest part of a system/product

Be able to ship high-quality work with best practices, like proper testing, well-planned rollout, and monitoring

Be able to lead the effort of setting the direction for the team, like new season roadmapping

Be able to spot the biggest pain point of the system/product/org and propose solutions. A solution with a clear deliverable and milestones and could take multiple years to implement.

Most importantly, in addition to demonstrate the capability of leverage XFN’s colleagues(DS/design/PM/etc..). Staff Engineer also should be able to assess & validate their outputs.

On the “People Skill” side, a staff engineer should:

Be a strong communicator, in both oral and written form

Be able to leverage resources that are not assigned to the team

Be able to recruit and onboarding new team member, both junior and senior

Be able to influence org’s engineering culture, like adopt latest/best coding practice

In Short

Companies use levels because it provides structure. Although companies’ leveling systems could be slightly different, the basic idea will remain the same. You can develop your best strategy to advance your career by understanding it.

Next read: What does a Principal Engineer do?