Rating: 8.3/10.
The Staff Engineer’s Path: A Guide for Individual Contributors Navigating Growth and Change by Tanya Reilly
Book about the staff engineer role, a position in many tech companies that is separate from software engineering manager and a parallel track. A staff engineer oversees the technical direction for a project, without directly managing reports. As a staff engineer, your responsibility is about seeing the big picture and working on what’s most important for your organization, without getting distracted by “side quests” or spend time in implementation work that a midlevel engineer can handle, as your time is finite. The job requires resolving ambiguity and when things are messy, when it’s unclear whose responsibility it is to fix something, it is often you. This is also a leadership role, where you manage projects and mentor people, while keeping your technical skills sharp.
Get into the habit of gathering knowledge about your organization’s goals, other teams’ roadmaps, etc, like building a map. When you know about your organization’s direction, then you can steer your team toward the right priorities, and one of your highest leverage tasks is build bridges between groups that wouldn’t otherwise talk to each other. Resolve enough ambiguities so that mid-level engineers can take over, then you can step aside and hand over responsibility.
Problems arise when the organization can’t agree about the best way to fix an issue, even if everyone agrees that something should be done, there can be multiple initiatives that conflict with each other. Rather than make your own plan and add to your chaos, you should put aside your ego and embrace an existing plan, get feedback from other engineers who have worked on the problem, and get buy-in from leadership. Gather people’s opinions, but don’t aim for total agreement or you will get deadlocked. Make an official document and practice selling it to executives so that you will get the resources you need to execute, and once the project is underway, keep checking in to make sure it is still aligned with the company’s goals.
As a rule, you will always have more projects than you have time for, so you need to prioritize based on your own energy levels (which will depend on the type of work and your own personality) and how impactful is it relative to what the company needs. Social capital is another important factor: you earn it by delivering on important projects, but you can just as easily squander it by wasting resources on unimportant things, so be mindful of this. Delegate work to more junior engineers, who might not do as good of a job as you, but are capable of doing it to a sufficiently high standard under your mentorship; this will help them grow while also extending your own impact.
The start of a project is when there is the most ambiguity: it is the job of the staff engineer to clarify its goals, constraints, and who is responsible for which parts. Don’t start implementation right away, but take some time to explore, write out some design docs and RFCs until the task becomes more clear. There are many reasons that project might become stuck partway through:
- Project may get blocked by another team with different priorities, should empathize with their needs and make it as easy as possible for them to do the work you need. Be clear about what exactly they need to do, and don’t make them accountable if your project goes badly.
- May be blocked by the requirements being vague or being unclear about how to do it. In this case, seek to clarify the situation, but at some point, make a decision and go with it – it is better to be wrong than being vague.
- Some people might consider it to be done before it’s actually done, this could be avoided by clarifying what the end state should be (like users actually using the feature).
As a staff engineer, you will be a role model for less experienced engineers, which means you should be responsible and act deliberately. Continue learning and improving yourself, clear up ambiguities and own up to any mistakes. You will also exert influence on an individual, team level, as well as across an organization. At an individual level, you can mentor people, pair with them, and give feedback. At a higher level, establish processes to do things the right way, and set up good guardrails to keep projects from going in the wrong direction. As you progress up your career, there are many directions you might go with different trade-offs, including choosing between staying at your current company and leaving for a different one, higher title and salary is not necessarily better.