What is a staff engineer?
Most levels of the career ladder for engineers at Stripe are private, but when you cross a certain threshold, there is a public thing that happens internally: you get “Staff Engineer” added to a label beside your name in the company directory. Having recently crossed that threshold, I’ve been spending some time trying to understand what it means. What is a staff engineer? How is that different from non-staff roles? How does it contrast with being a manager?
There is not a ton of existing literature on this topic, although I think that’s starting to change. En lieu of existing resources, I grasped for analogs from other organizations. For better or worse, the primary templates I’m aware for most large human organizations come from military history, and in that analogy the staff engineer would be most like the non-commissioned officer (NCO); this is a person who has risen through the fighting ranks and is expected to embody institutional knowledge and tactical experience, acting as a role model for the enlisted corps and a liason between those members and the commissioned officers (COs).
The NCO analogy is not perfect. For one thing, there is no class of person in a competent engineering organization who has not “risen through the fighting ranks” so-to-speak. If we view engineering managers (EMs) as analogous to COs we would overlook the fact that competent engineering managers must always have first been competent individual contributors (ICs). Nevertheless, there’s something to the analogy: COs cannot usually “lead from the front” in a literal sense because they have different responsibilities, and EMs are in the same boat. Similarly (consequently, in fact), there is a limit to the amount of institutional knowledge and tactical experience that EMs can be expected to hold. Therefore, perhaps we can say that, similar to the NCO, staff engineers are expected to demonstrate leadership through action, embody knowledge and experience, act as a role model, and liaise between ICs and EMs.
Looking at the career ladder for my company, and comparable ladders that other companies have published openly, the above seems like a reasonable starting point. When comparing staff levels to senior IC levels, staff engineers are expected to:
- Be more comfortable with ambiguous, long-term problems (and able to drive them to practical solutions).
- Drive impact through a combination of leading others and contributing directly.
- Take ownership over team-level results and contribute to higher-level strategic conversations.
- Mentor other engineers and identify or create opportunities for them.
- Drive communication with stakeholders outside their team.
- Exhibit functional and domain expertise.
Surprisingly, one of the more interesting resources I found to prepare myself for the staff engineer role was a book written for managers: Andy Grove’s High Output Management. In the book, he refers to staff-level ICs as “know-how managers” and suggests that many of their roles and responsibilities will be comparable to those of people managers. In practice, I have found this to be true: the roles are comparable, even if there are key differences. Those differences are as-follows:
- As referenced above, staff-level ICs should be leading “from the ground” so-to-speak. They should be writing more code and making more technical decisions than EMs.
- While both staff engineers and EMs are required to establish reputational authority and influence, staff engineers do not generally hold positional authority while EMs do.
- Staff engineers are expected to mentor other engineers, but they are not responsible for the career development of a specific set of engineers (i.e. to a large degree, they can choose who they want to mentor, whereas EMs are specifically responsible for the development of their reports).
- Staff engineers do not make personnel decisions.
- EMs are responsible for communicating with the wider management structure of the org. Staff engineers might assist with this, but again they are not directly responsible.
I’m sure I’ve missed things, because I’m still learning all of this! I’ll try to update this post in the future as I learn more.