Chapter 1. What Exactly Would You Say You Do Here?

Takeaways 

  • Staff engineering roles are ambiguous by definition. It’s up to you to discover and decide what your role is and what it means for you.

  • You’re probably not a manager, but you’re in a leadership role.

  • You’re also in a role that requires technical judgement and solid technical experience.

  • Be clear about your “scope”, your area of responsibility and influence.

  • Your time is finite. Be deliberate about choosing a “mission” that’s important and that isn’t wasting your skills.

  • Align with your management chain. Set expectations explicitly.

  • Your job will be a weird shape sometimes and that’s ok.

What even is a Staff Engineer?

If you’re an engineer at Senior level and you want to keep growing in your career, you’ll likely find yourself at a fork in the road. Two career paths lie in front of you. If you could look further down the road, you’d see that these paths have more in common than might be immediately apparent. They’ll meet up and overlap, and there will be plenty of places where you can change from one to the other and back again. But, still, they’re different directions and you need to choose one to start out on.

One of the paths is well signposted: you can become an Engineering Manager. The idea of management is fairly well understood and, for a lot of us, management is the default path when we think about career growth. In fact, the words “promotion” or “leadership” are often assumed to mean “becoming someone’s boss”. Most of us have seen managers in action, whether in tech or outside, and airport bookshops are full of advice on how to do the job well. Let’s be clear that the path being well signposted doesn’t mean it will be easy but, if you’re setting off down the management path, you’ll have some idea (if, perhaps, not a complete or very accurate one) of what your day-to-day life will be like.

Then there’s the other path, the less defined one: you can continue to grow as an engineer. In many companies, you can choose not to become a manager, and instead keep progressing along the “technical” or “individual contributor”1 (IC) track. But, despite the many company career ladders that define the role, the path of a senior individual contributor is often poorly understood. Although Staff Engineers2 have more resources than ever before, the various roles above Senior level are still characterised by ambiguity and being willing to blaze your own trail. A Senior engineer considering the Staff Engineer path might have few role models or previous examples to learn from, or might even never have worked directly with a Staff engineer before.

If you’re joining a new company, or even changing teams within a company, you might find that you and your new manager disagree on what your role involves and what success looks like for you. This ambiguity can be a source of stress: if you don’t know what your job is, how do you know whether you’re doing it well? Or doing it at all? This gets even worse when you’re looking for a promotion. If your expectations aren’t aligned with whoever’s making the promotion decisions, it will be hard to advance in your career. Setting a Staff engineer up for success means being thoughtful and deliberate about reporting lines, scope, mission, and access to information. It’s hard to get those right without agreement on what the job even is.

If you’ve taken the Staff engineer path, or you want to know more about it, welcome! In this chapter, we’re going to take some time to introspect about what your job is, and what exactly you’re trying to achieve. We’ll get existential: why would an organisation even want very senior engineers? In a world where we already have managers, why would we need engineers who are leaders? Armed with that understanding, we’ll unpack the role: its technical requirements, its leadership requirements, and what it means to start to work autonomously.

We’ll talk about your scope, your area of responsibility and influence inside the organisation, and how different reporting structures might make your job easier or harder. We’ll frame your mission, the high-level goal you’re currently aiming at, and look at some considerations you might bear in mind as you decide what work is a good use of your time. Finally, since different companies have different ideas of what Staff Engineer means, we’ll discuss how to align your understanding with that of other key people in your organization, so you all have the same hopes and expectations for what you’re going to do.

Let’s start with what this job even is.

Why are you here?

The idea of an IC track is new to a lot of companies. Some organizations’ leaders can describe the skills or attributes they expect from their most senior engineers, but aren’t clear about what they should work on day to day. Others have the roles on their career ladders but don’t know what kinds of skillsets they need to hire to fill those roles.

Over the last few years, I’ve seen many different interpretations of what a Staff Engineer is. I’ve spoken with Staff Engineers across many companies who weren’t sure what was expected of them, as well as Engineering Managers who were struggling with whether to promote someone to that level, who wanted guidance on how much leadership ability and how many individual technical accomplishments they should require. As someone who’s written about the benefits and perils of glue work3, I’ve had managers reach out to talk about senior engineers in their teams who are doing mostly leadership and glue work, who are making their projects and organisation successful, but who aren’t finding time to code any more. Should they become Staff engineers?

To untangle this a little, let’s step back a bit and think about what we’re hoping to achieve by having Staff+ roles in the first place. We talked in the introduction about the three pillars of the technical track: big picture thinking, project execution and positive influence. But why do we need engineers to have those skills? We have Engineering Managers, Product Managers, and Technical Program Managers. Why do we need Staff Engineers at all?

Why do we need engineers who can see the big picture?

Any engineering organization is constantly making decisions. We might be choosing a programming language for a new system, prioritising the needs of one internal customer over another, weighing up the risks of deprecating a component, or choosing which shared platforms to invest in. Some of these decisions have clear owners, and the consequences are easy to predict. Others are the kinds of foundational architectural choices that will affect every other system, and no one person or even one team can claim to know exactly how the changes will play out.

Good decisions need context. For all we might enjoy taking sides in arguments on the internet, experienced engineers know that the answer to most technology choices is, “it depends”. What are you trying to do? How much time, money, and patience do you have? Are there prior art, risk tolerance and scaling considerations? What other problems could you or your team be solving if you didn’t have to spend time on this one? What decisions are other teams making that could change your available options? No matter how thoroughly the pros and cons of a technology or path are documented, you need to know the local details of any situation before deciding whether the “obviously best” choice is actually the right one. That’s the context of the decision.

Gathering context takes time and effort. Individual teams, focused on solving their own problems, will tend to optimise for their own interests, and an engineer on a single team is likely to be laser-focused on achieving that team’s goals. But often decisions need to cross multiple teams, or even multiple organizations. Even decisions that seem to belong to one team can have consequences that extend far beyond their own team boundaries. This is particularly the case when you’re changing or replacing a system component that has tendrils in every other component, or embarking on the kind of architectural restructuring that will let you keep growing your company for another next five years. The local maximum, the best decision for a single group, might not be anything like the best decision when we take a broader view.

Suppose a team is choosing between two pieces of software, A and B. Both have the necessary features, but A is significantly easier to set up: it just works. B is a little harder: it will take a couple of sprints of wrangling to get it working, and nobody’s enthusiastic about waiting that long.

From the team’s point of view, A is a clear winner. Why would they choose anything else? But if they take a broader view they’ll see that other teams would much prefer that they choose B: it turns out that A will make ongoing work for the legal and security teams, and it has some authentication needs that mean the IT and platform team will have to treat it as a special case forever. By choosing A, the team is unknowingly choosing a solution that’s a much bigger time investment for the company overall. B is only slightly worse for the team, but much better overall. Those extra two sprints will pay for themselves within a quarter, but this is only obvious when the team has someone who can look with a wider lens.

  local maximum vs better decision.
Figure 1-1. : local maximum vs better decision.

To avoid local maxima, we need decision-makers (or at least decision-influencers) who can take an outsider view, who can consider the goals of multiple teams at once and choose a path that’s best for the whole organization or the whole business, rather than just one team. Chapter 2 will focus on this ability to zoom out. We’ll look at building the big picture of your organization, and about knowing things, one of the more esoteric skills that a good Staff engineer brings to their job.

Just as important as seeing the big picture of the situation now is being able to think long term and anticipate how your decisions will play out in future. A year from now, what will we regret? Three years from now, what will we wish we’d started doing now? If we want groups going in the same direction, we’ll need some sort of technical strategies, with decisions about which technologies to invest in, which platforms to standardise on, how to balance team autonomy against duplicated solutions, and so on. All of these decisions need business context so that we can understand what problems need to be solved and what opportunities can be opened up, and set the technical direction that will lay the foundations for future decisions.

Big decisions can end up being subtle, and they’re often controversial, so just as important as making the decision is being able to explain it. We need to be able to share context and tell the story of the decision in a way that makes sense to other people. Chapter 3 will be all about making big decisions and writing technical strategy.

So, if we want to make broad, forward-looking decisions, we need a set of people who can see the big picture. But why can’t that be managers? Most engineering organizations already have managers to support and guide teams, and a large proportion of engineering managers used to be engineers. Why can’t they make all of the decisions? And why can’t the CTO just know all of the “business things”, translate them into technical outcomes, and just pass on what matters?

On some teams, they can. On a small team, a manager can often function as the most experienced technologist, and can own major decisions and technical direction. In a small company, a CTO can stay deeply involved in the gory details of every decision. These companies probably don’t need Staff engineers. But managing other humans is itself a full time job, and as the team grows, managers will have less available time to dig into deeply complex decisions, much less to spend days in meetings whiteboarding out the nuances of various strategic directions. Someone who’s investing in being a good people manager will have less time left over to stay up to date with technical developments, and anyone who is managing to stay deeply “in the weeds” will be less able to meet the needs of their reports. Sometimes that’s fine: some teams don’t need a lot of attention to continue on a successful path. But as the number of reports grows, or when there’s tension between the needs of the team and the needs of the technical strategy, a manager has to choose where to focus. Either the team’s members or its technical direction get neglected.

That’s one reason that many organisations add specialization in their roles and separate out technical leadership and people leadership paths. Some teams formalize this further by assigning teams a “technical lead” (TL), as well as an Engineering Manager (EM). As Joe Beda, founder of Heptio and Principal Engineer at VMware, wrote on Twitter: “The TL owns the technical outcome and design. Sets and helps maintain the technical culture on the team. Supports and grows the tech skills of the team. Manager helps drive career growth and coaches team. Split of duties can be somewhat fluid if the TL/EM form good partnership.”

As a company grows, we’ll find that different decisions are best made at different levels in the organizational hierarchy. If you have more than a few engineers, it’s inefficient – not to mention disempowering – if every decision needs to end up on the desk of the CTO or a senior manager. We’ll have better outcomes and designs if experienced engineers have the time to go deep and build the context and the authority to set the right technical direction.

That doesn’t mean engineers set technical direction alone. Managers, as the people responsible for assigning headcount to technical initiatives, need to be part of major technical decisions. We’ll talk about maintaining alignment between engineers and managers later this chapter, and again when we’re talking strategy in Chapter 3.

Why do we need engineers who lead projects that cross multiple teams?

When a project falls neatly inside the purview of a single team, communication and ownership is straightforward: everyone talks to everyone else, and the team’s sprint planning or other work allocation mechanism keeps everyone on a steady course towards the goals. Unfortunately, no matter how carefully your organisation has laid out your team topology, most software projects are likely to cross multiple teams or to have dependencies on other teams’ work. And that’s when it gets difficult.

In an ideal world, the teams in an organization should interlock like jigsaw pieces, covering all aspects of any project that’s underway. In this same ideal world, though, everyone’s working on a beautiful new green-field project, with no prior constraints or legacy systems to work around, and each team is wholly dedicated to that project, or has it as a top priority. Team boundaries are clear and uncontentious: the joins between the jigsaw pieces line up exactly where the project already needed an API or a clear contract. In an even more perfect world, we’re starting out with what the Thoughtworks tech consultants have dubbed an Inverse Conway, a set of teams that correspond exactly with the components of the architecture we’d love to end up with. The difficult parts of this utopian project are difficult only because they’ll involve deep and fascinating research and invention, and their owners are eager for the technical challenge and professional glory of solving them.

I want to work on that project, don’t you? Unfortunately, the reality is somewhat different. It’s almost certain that the teams involved in any cross-team project already existed before the project was conceived and are working on other things, maybe things that they consider more important. They’ll discover unexpected dependencies on other teams mid-way through the project. The boundaries between the various groups are messy: there are overlaps and gaps. Two teams’ responsibilities line up right in the middle of a component of the desired architecture, and the project leads are inclined to create two components instead to make it easier to work side by side, even though that makes no sense when looking at the architecture from a high level. And the murky and difficult parts of the project are not fascinating algorithmic research problems: they’re difficult because they’ll involve spelunking through legacy code, divining the intentions of engineers4 who left years ago, and negotiating with busy teams who rely on the behavior of existing bugs and don’t want to change anything.

A project like this can be so murky that even understanding what needs to change is a complex problem in itself, and not all of the work can be known at the start. If you look closely at the design documentation, you might find that it’s postponing or hand-waving the decisions that need most alignment–but these are the choices that will be core to every other aspect of the project.

That’s a more realistic project description. No matter how carefully we overlay teams onto a huge project, we’ll find that some responsibilities end up not being owned by anyone, and others end up being claimed by two teams. Information fails to flow, or gets mangled in translation and causes conflict. Teams make excellent local maximum decisions, as we discussed in the previous section, decisions that end up being a problem when looked at with a wider lens. And software projects get stuck.

One way to keep the project moving is to have someone who feels ownership for the whole thing rather than any of its individual parts. Even before the project kicks off, that person can scope out the work and build a proposal for what needs to happen and who needs to be involved. Once the project’s underway, they’re likely to be the author or co-author of the high-level system design, and a main point of contact for it. They’re maintaining a high engineering standard, using their experience to anticipate risks and ask hard questions, informally mentoring or coaching – or just setting a good example – for the leads of individual parts of the project. As part two of this book will discuss, they bridge the gaps between the teams, making sure the big decisions get made, resolving conflicts before they fully arise, and noticing when there are aspects of the system that don’t make sense, or that haven’t been accounted for. Outside the project, they’re telling the story of what’s happening and why, selling the vision to the rest of the company, explaining what the work will make possible, perhaps delivering tech talks to educate other engineers and let them understand how the new project affects them.

Why can’t Technical Program Managers (TPMs) do this consensus-building and communication? There is definitely some overlap in responsibilities. TPMs are often allocated to projects to ensure effective delivery5 and to be, as Michael Lopp says, “chaos-destroying machines.” Ultimately though, TPMs are responsible for delivery, not design, and not engineering standards. When a project has a TPM, they’ll usually share the load in scoping and communicating about the work and removing blockers. They’ll notice the gaps between projects and make sure everyone’s sharing information with each other. They make sure the project gets done.

But the most senior engineers on the project make sure it’s done with high engineering standards. They’re responsible for ensuring the resulting systems are robust and operable, and fit well with the technology landscape of the company. They are wary of technical debt, or anything that will be a trap for future maintainers of those systems. It would be unusual for TPMs to write technical designs or set project standards for testing or code review, and we wouldn’t expect them to do a deep dive through the guts of a legacy system to make a call on which teams will need to integrate with it.

That’s why we get so much value from having a very senior engineer attached to a cross-team project. A Staff Engineer as a lead sets a high standard. They can see the big picture clearly enough to make big decisions, bring their experience to the design, and act as a mentor to other engineers across all of the teams, particularly the leads of each team. When a Staff Engineer and TPM work well together on a big project, their partnership can be a dream team.

Why do we need engineers who are a good influence?

Software matters. The software we build is increasingly important. The behaviour of software systems can affect people’s wellbeing and their income. We’ve learned from plane crashes, ambulance system failures, and malfunctioning medical equipment that software bugs and software outages can kill people6. As we increase the use of software in systems that are critical to saving lives, sustaining livelihoods, and maintaining democracy, it would be naive to assume there won’t be more and bigger software-related tragedies coming in our future. There’s a perennial argument online about whether software engineering is really an engineering discipline7. There are reasonable arguments on both sides, but I think this much is true: there are many cases where we need to bring engineering rigor to our work. We need to take software seriously.

Even when the stakes of our projects are lower, we’re still making software for a reason. With a few R&D-ish exceptions, engineering organisations usually don’t exist just for the sake of building more technology. We’re setting out to solve an actual business problem, or to create something that people will want to use. We’d like to achieve that with some acceptable level of quality, efficient use of resources, and a minimum of chaos.

Unfortunately, quality, efficiency and order are far from guaranteed, particularly when there are deadlines involved. When doing it ‘right’ means going slower, teams that are eager to ship may skip testing, cut corners, or rubber-stamp code reviews instead of digging into how well the code works. Without someone who’s worked on huge projects before and has seen what succeeds and what fails, teams are likely to start coding without a plan or without talking to each other. Without a model for resolving technical disagreements, conflicts can result in people entrenching and projects getting deadlocked.

In companies that only emphasize delivering features, that’s going to set the tone for the software: the software may look good, but it’ll be built on a shaky foundation. We need a counter-balance: senior people who will always be pragmatic about doing what’s right for the business, but who take responsibility for producing a high quality product or architecture.

Writing good software isn’t easy. We get better at it the more we do it. We learn a ton every time we successfully complete a project, and we learn even more from our own mistakes, but each of us only has a finite number of our own experiences to reflect on. That means that we need to learn from each other’s mistakes and successes too. Team members who are quite junior might never have seen good software being made, or might see producing code as the only important skill in software engineering. We need more experienced engineers to lead the way.

Staff engineers can set both implicit and explicit standards for their organisations. These standards go beyond technical influence: they’re cultural too. The implicit standards come from acting as a role model. Software teams and organizations are a community, and the actions of the most senior members of the community set the convention for how people treat each other. When senior people vocally celebrate each others’ work, treat each other with respect, and ask clarifying questions, that makes it easier for everyone else to do that too. When you respect someone as the kind of engineer you want to “grow up” to be, that’s a powerful motivator to act like they do. Chapter 7 is all about being a (maybe reluctant) role model, and being aware of the influence you’re having throughout your organization. Chapter 8 will look at more deliberate influence, such as creating guidelines and best practices, leaving thoughtful comments on code and documents, and having a high bar for what gets deployed.

Why can’t managers be a good influence and create these standards? They can! Managers are definitely responsible for setting culture on their teams and are often called upon to act as an agent of the company in enforcing behavior and ensuring standards are met. Managers can insist that the team has higher test coverage, or better incident response discipline; if the manager doesn’t value cooperation or velocity, the team might not be incentivized to value them either. But, engineering norms are set by the behavior of the most respected engineers on the project. No matter what the standards say, if the senior engineers don’t write tests then you’ll never convince the juniors to do it.

Standards and best practices will sometimes be created by managers but, just as with big picture thinking and project delivery, Staff engineers often have more dedicated time and more relevant experience. Code review guidelines, architectural best practices, or the kinds of tooling that make everyone faster are all time-consuming projects. They’re more likely to come from practitioners who have more time for technical specialization.

Why do these need to be Staff engineers?

All of this kind of work can be done, and often is, by Senior-level engineers, or often even by enterprising mid-level engineers. But all of it takes time. While you’re writing strategy, reviewing project designs, or setting standards, you’re not coding, or architecting new systems, or doing a lot of the work a software engineer might be evaluated on. This kind of technical leadership needs to be part of the job description of the person doing it, to encourage them to take the time to do it well, rather than rushing it so they can get back to the work that’s more clearly valued by the organisation. It needs to be clear that this isn’t a distraction from the job: this is the job.

But it’s not just about time. As we’ve seen, this work needs technical depth and technical judgement too. Our strategies have to be sound, our solutions must actually solve the problems, and the technical culture we create needs to make code and designs better. Our decisions and directions need to be informed by deep technical knowledge and experience. When our most experienced engineers lend their knowledge to this kind of work, we’ll have better technical outcomes and a better engineering culture. In fact there’s a high opportunity cost if they don’t: if we have our most senior, most expensive engineers just write code all day, we’ll see the benefit of their skills in the codebase, but we’re missing out on the things that only they can do.

Enough philosophy. What’s my job?

Not all organisations need Staff engineers, but the bigger a group gets, the more value they’ll get from encouraging some of their engineers to step into this kind of role. But what exactly is the role? Since staff engineering has historically not been very strongly defined, it varies a lot across different companies, depending on what specific needs the company had when they added the role to their job ladder. A lot of the day-to-day work will also depend on the personality and work style of the engineer doing it. However, there are some attributes of the job that I think are fairly consistent, and I’ll lay them out here. Here are some things I think are always true of Staff+ roles. The rest of the book will take them as axiomatic.

You’re not a manager, but you are a leader

First things first: staff engineering is a leadership role. If you look at your company’s career ladder, there’ll be some notion of managers and engineers at the same level. A staff engineer often has the same seniority as a line manager. A senior staff engineer might be equivalent to a senior manager. A Principal engineer often has the seniority of a director. As a Staff+ engineer, you’re the counterpart of a manager at the same level, and expected to be as much of a “grownup in the room” as they are. You may even find that you’re more senior and more experienced than some of the managers in your organization, and may find yourself acting as a leader to them too. Whenever there’s a feeling of “someone should do something here”, there’s a reasonable chance that the someone is you.

Do you have to be a leader? I’ve occasionally had mid-level engineers ask me if they really need to get good at “all of that squishy human stuff” to go further. Aren’t technical skills enough? I do empathise with the question! If you’re the sort of person who got into software engineering because you wanted to do technical work and don’t love talking to other humans, it can feel unfair that your vocation runs into this wall. But, unfortunately, if you want to keep growing, being deep in the technology can only take you so far. Accomplishing larger things means working with larger groups of people and that needs a wider set of skills.

When we talk about the impact of an engineer, we’re referring to their ability to get things done and get them done well. As your compensation increases and your time becomes more and more expensive for the company, the work you do is expected to be more valuable. Your impact is expected to be greater. That means that technical judgement will need to include the reality of the business, and an understanding of whether the work is worth doing at all. As you increase in seniority, you’ll take on bigger projects, projects that can’t succeed without collaboration, communication and alignment: your brilliant solutions are just going to cause you frustration if you can’t convince the other people on the team that they’re the right path to take. And whether you want it or not, you’ll be a role model: more junior engineers in the company will look to those with the big job titles to understand how to behave. So usually, by the time an engineer reaches Senior level, they’ll need some ability in big picture thinking, project execution and good influence on others. By Staff level, you can’t avoid being a leader.

Staff engineering leadership manifests in a different way from management. A Staff engineer usually8 doesn’t have direct reports or formal authority over the people on their team or teams. While they’ll be involved and invested in growing the technical skills of the engineers around them, they’re not responsible for anyone else’s career growth, or managing anyone’s performance. They’re definitely not responsible for approving vacation or expenses. They can’t fire anyone, or promote them – though local team managers should value their opinions about other team members’ skills and output. Staff engineers have a huge impact on the technical culture and capabilities of the team or teams they work with, but they are responsible for technical outcomes, not people.

Leadership comes in lots of forms that you might not immediately recognise as being a leader. It can come from designing ‘happy path’ solutions that protect other engineers from common mistakes. It can come from reviewing other engineers’ code and designs in a way that improves their confidence and skills, or highlighting design proposals that don’t meet a genuine business need. All forms of teaching–whether that’s pair programming, writing a document, or creating clear reference implementations other people can learn from–are forms of leadership too. Finally, a reputation as a stellar technologist may inspire followership whether you mean to have it or not: if other people buy in to your plans for architecture or refactoring just because they trust you, then guess what: you’re a leader. I’ve seen excellent staff engineers who would never describe themselves as leaders but who raise everyone’s game as they quietly set the direction for their technical area.

You’re in a “technical” role

Staff engineering is a leadership role but it’s also a deeply specialized one. It needs technical background, and the kinds of skills and instincts that come from engineering experience. To be a good influence, you need to have high standards for what excellent engineering looks like, and model it when you build something. Your reviews of code or designs should be instructive for your colleagues and should make your codebase or architecture better. When you’re making technical decisions, you need to understand the tradeoffs of the various options, and communicate them using mental models that help other people understand them too. You need to be able to dive into the details where necessary, ask the right questions, and understand the answers. When arguing for a particular course of action, or a particular change in technical culture, you need to make sense and you need to be right. So, for all that this role needs leadership, communication and business awareness, you have to have a solid foundation of technical skills.

This doesn’t necessarily mean you’ll write a lot of code though. At this level, your goal is to solve problems efficiently, and coding will be only one of the tools in your toolbox–and maybe not the first one you reach for. When your project has multiple engineers but only one of you, programming will often not be the best use of your time. It may make more sense for you to take on the design or leadership work that only you can do and let others handle the programming. Staff engineers often take on ambiguous, messy, difficult problems and do just enough work on them to make them manageable by someone else. Once the problem is tractible, it becomes a growth opportunity for less experienced engineers (with support from the Staff engineer!).

For some Staff engineers, deep diving through codebases will still remain the most efficient tool to solve many problems. For others, writing documents might get better results, or becoming a master of data analysis, or having a terrifying number of 1:1 meetings. What matters is that the problems get solved, not how. This is why I’m not a fan of giving experienced Staff engineers coding interviews, by the way: if you’ve made it to this level, either you can code well, or you’ve learned to solve technical problems using your other muscles. The outcomes are what matters. We’ll talk more about interviewing in Chapter 9 too.

You aim to be autonomous

When you were a junior or midlevel engineer, your manager probably told you what to work on and how to approach it. At Senior level, maybe your manager advised you on which problems were important to solve, and left it to you to figure out what to do about it. At Staff+ levels, your manager should be bringing you information and sharing context, but you should be telling them what’s important just as much as the other way around. As Sabrina Leandro, Principal Engineer at Intercom said in her StaffPlus Live talk So You’re Staff+, Now What, “So you know you’re supposed to be working on things that are impactful and valuable. But where do you find this magic backlog of high impact work that you should be doing, that you should be working on? You create it!”. Part of your job now is to notice problems and opportunities, to evaluate what needs attention and to make sure you’re working on the right things. With senior roles comes this unfortunate truth: if you do an amazing job on something that wasn’t a good use of your time, you didn’t actually do an amazing job.

As a senior person in the organization, it’s likely that you’ll be pulled in multiple directions, and that there’ll be a lot of available work. It’s up to you to defend and structure your own time. There are a finite number of hours in the week. You get to choose how to spend them. If there’s so much work that you or your team can’t do everything, you’ll be the one responsible for making sure that the least important things are deliberately dropped. If your calendar’s been so fragmented by meetings that there’s no time to do proactive work, it’ll be up to you to cancel some times, move meetings around, or otherwise make time. You are not a small boat being buffeted around by winds outside your control: you need to steer your own ship.

That doesn’t mean you’re alone on the ocean though! You’re still working with other people, and maintaining good relationships, and that means you’ll take other people’s opinions into account when making your decisions. If someone asks you to work on something, you’ll bring your own expertise to the decision. You’ll weigh the priority, the time commitment, and the benefits–including the relationship you want to maintain with the person who asked you for help–and you’ll make your own call. Autonomy only goes so far: if your CEO or other local authority figure tells you they need something done, you’ll give that appropriate weight. But autonomy demands responsibility. If the thing they asked you to work on turns out to be harmful, that’s not just their bad judgement call, it’s yours.

As a leader in the company, you have a responsibility to speak up, even if it’s to the CEO, when you see a decision that’s a risk to the business. Calling out a risk doesn’t mean that the decision will change–the other person might weigh tradeoffs differently than you do, or they could just have more (or different) information–but don’t silently let a disaster unfold.

We’re back to “someone should do something”. If you’re the person who sees a problem that nobody else sees, you should point it out. Of course, if you want to be listened to, you’ll have worked at building up a reputation for being right, and having the gravitas to be trusted.

You set technical direction

As a technical leader, part of your role is to make sure the organisation is making technical decisions and has a good technical direction. What’s technical direction? Underlying the product or service your org provides is a host of technical decisions: your architecture, your internal APIs, the platforms or underlying infrastructure you use, the languages you’re writing in, the tools and frameworks you use, your approach to paying down technical debt, how you build and release code, how you decide which problems to solve, and so on.

Some of these questions need to be answered at a team level. Others need alignment across multiple teams, whole organizations or your entire engineering department. Part of your job is to make sure that these decisions get made, that they get made well, and that they get written down.

That doesn’t mean you’ll be making these decisions on your own, handing down pronouncements from your ivory tower. Having an effective direction is a manager’s responsibility too – you’ll note that by director level, it’s the literal job title. The managers around you will have opinions, and often strong ones, about where your technology should be going. Good ideas will also come from engineers who are more junior than you and from peers whose area of interest overlaps with yours. The job is not to come up with all (or even necessarily any!) of the aspects of the technical direction, but to ensure there is an agreed, well-understood path forward that solves the problems it sets out to solve. This might mean that you’re setting technical direction by enthusiastically throwing your weight behind someone else’s good ideas. I’ll talk more about writing vision and strategy in Chapter 3.

You communicate often and well

Everything we’ve talked about so far has a key skill in common. It all needs communication. The more senior you become, the more you will rely on strong communication skills. Whether you’re aligning with your director on a technical strategy, convincing the teams in your organisation to change to a new system, asking a question on a Slack channel, or pointing out the risks in an architectural design, almost everything you do will involve conveying information from your brain to one or more other people’s brains. The better you are at being understood, the easier your job will be.

Communication covers a multitude of skills, like:

  • framing an idea by taking a bunch of facts and telling a story about them

  • writing or speaking for an audience, building mental models of what they already understand, so you can meet them where they are

  • explaining technical concepts to people who don’t work in tech without their eyes glazing over

  • choosing an appropriate tone, formality, altitude and level of technical detail for an email

  • being brief and balancing your audience’s attention span against including all of the information you want to give them

  • writing with precision, removing points of confusion or ambiguity

  • listening to something someone else tells you, asking whatever questions you need to ask to understand it, and reflecting it back to make sure you got it right

  • getting your point across in a meeting without being ignored, being a jerk, or going on too long

  • supporting someone else’s point in a meeting without taking over

  • being persuasive when persuasion is needed

  • being descriptive when description is needed

  • knowing when you should stop talking

These skills are all learnable! I’ll have advice on communication in Chapter 3, Chapter 4 and, okay, most of the rest of this book. Communication underlies just about everything.

Mapping your own role

Those axioms should help you to start with defining your role, but you’ll notice that they leave out a lot of implementation details! The truth is that the day-to-day work of one Staff engineer might look very different from that of another. Even within a company, different groups of staff engineers can be “deployed” in different ways. The day-to-day realities of your role will depend on the size and needs of your company or organization, and will also be influenced by your own personal work style and preference.

This variation means that it can be hard to compare your own work to staff engineers around you or in other companies. This is one of the reasons that the job can be ambiguous. It can mean missed expectations between you and whoever hired you, and that can be a source of stress. So in this section, we’re going to unpack some of the attributes of the role that can vary, and draw a map of what your role looks like.

We’ll start by talking about who you report to and what your scope is. These might be the same thing, but I think a lot of the power of the IC track is in being able to cross organizational boundaries and think a little bigger.

Then we’ll look at your own personal preference: are you a breadth-first or a depth-first kind of person? What kind of work do you like to do and what kinds of skills do you want to build? How much do you want to code? How’s your delayed gratification? And are you still feeling a pull towards a management role? Let’s be clear that your own preference will never be the only factor in defining your role! Someone hired you to do something, and they’d presumably like you to do it. But knowing who you are and how you like to work will give you a good grounding as you work out what the expectations are.

We’ll wrap up this section by looking at some example “shapes” of staff engineer roles, including some “edge case” kind of roles. And then I’ll talk about how to write down the shape of your own role, to make sure that your expectations match those of whoever hired you.

Let’s start with reporting chains.

Where in the organization do you sit?

Our industry hasn’t standardised on any model for how Staff+ engineers report into the rest of the engineering organisation. Some companies have their most senior engineers report to a Chief Architect or Office of the CTO, others assign them to directors of various orgs, to managers at various levels of the organisation, or to a mix of all of the above. I’ve seen Principal engineers who report to “leaf node” line managers, sometimes far more junior than they are. I’ve also seen Staff engineers who report to the head of engineering. There’s no one right answer here, but there can be a lot of wrong answers, depending on what you’re trying to achieve.

Your work will be influenced by who you report to and where you’re located in the organizational chart. Reporting chains will affect the level of support you receive, the information you’re privy to and, in many cases, how you’re perceived by engineers outside your group.

Figure 1-2. Staff+ engineers reporting in at different levels of the org hierarchy. Even if these engineers are all at the same level of seniority, A will find it much easier to be in director-level conversations than D will.

Reporting “high”

Reporting “high” in the chain, e.g., to a director or VP, will give you a broad perspective on your organization. The information you get will be high level and impactful, and the problems you’re asked to solve will be, by definition, the ones that people at director- or VP-level care about. If you’re reporting to someone who’s been successful in the industry, there’s a good chance that you’ll learn skills by working with them. Watching a very competent senior person make decisions, run meetings, or navigate a crisis can bring the sort of experience that can be hard to pick up otherwise.

That said, you’ll probably get a lot less of your manager’s time than you would if you had a local manager. Your manager might have less visibility into your work and might therefore not be able to advocate for you. They may not have time to help with career development (though we’ll talk in Chapter 9 about how you are responsible for managing your own career). Reporting “high” can make some kinds of work difficult too. An engineer working closely with a single team but reporting to a director may feel disconnected from the rest of the team and the problems they’re trying to solve. They may also pull the director’s attention into local disagreements that should have been solved at the team level, making the team less effective, and perhaps resentful.

If you find that your manager isn’t available, doesn’t have time to understand the work that you do, or is getting pulled into low level technical decisions that aren’t a good use of their time, consider that you might be reporting too high up in the organisation and might be happier with a manager whose focus is more aligned with yours.

Reporting “low”

Reporting to a manager lower in the org chart brings its own set of advantages and disadvantages. Chances are that you’ll get more focused attention from your manager, and you’ll be more likely to have an advocate when one is needed. If you prefer to focus on a single technical area, you might benefit from working with a manager who is close to that area and understands why the problems you’re working on are hard.

But reporting too low can make your job more difficult. An engineer assigned to a single team may find it hard to have as much impact as if they’d been officially attached to the whole org. Like it or not, humans are a little hierarchical, and they notice reporting chains. A Staff engineer trying to lead a whole organisation through a culture change is likely to have much less influence if they’re reporting to a line manager. Information you get is also prone to be more filtered, and will be centered on the problems of that specific team. If your manager doesn’t have access to some piece of information, you almost certainly won’t either.

Reporting to a line manager may also mean that you’re reporting to someone more junior and less experienced than you are. That’s not inherently a problem, but you may have less to learn from your manager, and they may not be helpful for career development: chances are that they won’t know how to help you. All of this may be fine if you’re getting some of your management needs elsewhere10. In particular, if you’re reporting to someone low in the org hierarchy, make sure to have skip level meetings with your manager’s manager, and maybe the manager above that, and build your own pathways to stay connected to your organisation’s goals.

One final thought on reporting chains: you’ll have an easier time if your goals align with your manager’s goals. It’s harder for a technical or prioritization debate to happen on a truly level playing field when one person is responsible for the other’s performance rating and compensation, and if you and your manager have different ideas about how you can be most effective, that can cause tension. You can end up with a case of the “local maximum” issues I mentioned earlier, where your manager wants you to work on the most important concern of the team, when there are far bigger problems inside the organisation that need you more. If you find that these arguments are happening a lot, you might want to advocate to report a level higher.

What’s your scope?

This topic of aligning with your manager brings us on to understanding your scope: the domain, team or teams that you pay close attention to and have some responsibility for. It’s the domain where you’re expected to feel knowledgeable and cast influence every day. You may not hold any formal leadership role in this domain, but this is the group of people and the group of projects that should feel your influence strongly.

Inside that scope, you should have some influence on short term and long term goals. You should be aware of the major decisions being made. You should have opinions about the changes that will affect people in that scope, and should represent more junior people who don’t have the leverage to prevent poor technical decisions that affect them. You should be thinking about how to cultivate and develop the next generation of senior and staff engineers, and should notice and suggest projects and opportunities that would help them grow. As we’ll discuss in Chapter 9, identifying the people who can learn to take over your job is a key step in helping you achieve your own goals.

Your scope will usually be shaped by your reporting chain. In some cases, it will be equivalent to your manager’s scope: your manager might expect that you devote the majority of your skills and energy to solving problems that fall within their team’s domain. In other cases, a team may just be a home base as you spend some portion of your time on fires or opportunities elsewhere in the org. If reporting to a director, there may be an implicit assumption that you operate at a high level and tie together the work of everything that’s happening in the org, or you might be explicitly allocated to some subset of the director’s teams or technology areas. Be clear about which it is.

A startup or small company might only have one very senior engineer, and in that case their scope is probably the entire company; they’ll be involved in every major decision and may influence every other engineer. At a bigger company, a Senior, Staff or Principal engineer might be scoped to a particular team; be part of one team but influence surrounding teams; or be attached to an organisation but not affiliated with any particular team in that org. In companies that are large enough to have really specialised horizontal functions, an engineer’s scope might be all teams and projects that work with a particular technology across the company. For example, their work may affect every software engineer working in some language, or every project that needs to model some kind of data.

A defined scope gives you some bounds on the part of the universe you need to care deeply about. It gives you some pre-computed decisions about where your day-to-day responsibility begins and ends. You should be prepared to ignore your scope when there’s a crisis: when the site is down, for example, there is no such thing as “not my job”. You should also have a level of comfort with stepping outside your day-to-day experience, taking a lead when a lead is needed, learning what you need to learn and fixing what you need to fix. Part of the value of a Staff engineer is that you don’t stay in your lane, and that you’re not constrained by what your job is.

Nonetheless, I do recommend that you have that day-to-day job and that you’re very clear on what it is. I think engineers at all levels should have some sort of scope, even if it’s temporary and subject to change, even if it’s explicitly “everything related to technology for the entire company”. If your scope is too broad (or undefined!), there are a few possible failure modes.

A scope too broad

  1. Lack of impact. If anything can be your problem, then it’s easy for everything to become your problem, particularly if you’re in an organisation with fewer senior people than they need. There will always be another available side quest11 to go on and in fact it’s all too easy to create a role that’s entirely side quests, with no main mission at all. That can be okay (if everyone is on board with it) but beware of how easy it is to spread yourself too thin, show no results and get nothing done. You can end up without a narrative to your work that makes you (and whoever hired you) feel like you achieved something.

  2. Becoming a blocker. When there’s a senior person who is seen to do everything, the convention can become that they need to be in the room for every decision. This means every meeting, every document becomes blocked on their availability. Rather than speeding up your organisation, you end up slowing them down because they can’t manage without you.

  3. Decision fatigue. If you do escape the trap of trying to do everything, you’ll have the constant cost of deciding which things to do. That’s somewhat inevitable in a senior role, but the wider your scope, the harder it gets, because there are just so many potential problems to choose from.

  4. Missing relationships. If you’re flitting around too much, it’s harder to have regular contact with the same set of people, which lets you build the sorts of friendly relationships that make it easier to get things done (and that make work enjoyable!) We’ll talk in Chapter 4 about the power of building a network. More junior engineers also lose out when a senior engineer’s remit is too broad: they don’t get the sort of mentorship, support and role modelling that they’d have if they’d been able to build a relationship with a “local” Staff engineer who was a little more involved in their work.

It’s hard to operate in a workplace where you can do literally anything. Better to choose an area, build influence and have some successes there. Devote your time to solving some problems entirely, rather than spreading yourself too thin to have any real impact. Then, if you’re ready to, move on to a different area.

A scope too narrow

Beware too of scoping yourself too narrowly. A common example is when a Staff Engineer is part of a single team, reporting to a line manager. Managers might really like this – they get a senior engineer who can do a large percentage of the design and technical planning, and perhaps serve as a technical leader or team lead for a project. Some engineers will love this too: it means you get to go really deep on the team’s technologies and problems and understand all of the nuances.

Being a single-team staff engineer can work well, but watch out for the risks of a scope that’s too narrow:

  1. Lack of impact. It’s possible to spend all of your time on something that doesn’t need the specialized expertise and focus of a Staff engineer. If you choose to go really deep on a single team or technology, it should be a core component, a mission critical team, or something else that’s very important to the company. In particular, if you’re interested in promotion, a very narrow scope can reduce your opportunities to demonstrate the impact of your work.

  2. Opportunity cost. Organisations tend to have few Staff engineers, and those engineers tend to have skills that are highly in demand. A Staff assigned to a single team may not be top of mind for solving a problem elsewhere in the org, or their manager may be unwilling to let them go.

  3. Overshadowing other engineers. A narrow scope can mean that there’s not enough work to keep you busy, and that you overshadow more junior people and take learning opportunities away from them. If you always have time to answer all of the questions and take on all of the tricky problems, nobody else gets experience in doing that. You need to be busy enough that you give other people space to grow too.

  4. Overengineering. An engineer who’s not busy can be inclined to make work for themselves. You see this sometimes when a team with a pretty straightforward mission has some vastly overengineered solution to solve it: that’s a Staff engineer who should have been assigned to a harder problem.

There are often good reasons to choose a narrow, deep scope and you can certainly do that. If you only ever work on one thing, though, it should be something that’s very important to the company. Some technical domains and projects are deep enough or growing enough that an engineer can spend their whole careers there and never run out of opportunities. Just be very clear about whether you’re in one of those spaces.

What do you enjoy doing?

While your reporting chain and your scope are likely to be assigned to you, there’s another factor that will influence the shape of your role: you. In most cases, you’ll be able to choose some aspects about how you work. While more junior roles may have more prescriptive expectations about what you do on any given day, by Staff level you’ll usually just be expected to produce results. So long as it’s generally agreed that your work is impactful, you should have a lot of flexibility around how you do it. That includes a certain amount of defining what your own job is.

I’m not going to say what your role should be, but to get you thinking about what you want, here are a few questions to ask yourself:

Are you more depth-first or breadth-first?

A high-level way to start thinking about engineers is whether they’re “breadth-first” or “depth-first”. Do they default to going broad across multiple teams and/or technologies, focusing on a single problem only when it can’t be solved without them? Or do they focus narrowly on a single problem or technology area, only going outside it when that’s the only way to solve problems that affect their own domain? Being depth-first or breadth-first is very much about your own personality and work style. It’s worth understanding how you personally like to work, and trying to make sure it’s compatible with your job.

There’s no wrong answer here, but you’ll have an easier and more enjoyable time if your preference here is lined up with the scope of influence and knowledge your role is intended to have within the organisation. If you’re interested in becoming an industry expert in a particular technical domain, you’ll want to be able to narrow your focus and spend most of your time in that area. If, instead, you’re scoped to a huge organisation, you won’t be happy and neither will your manager or the engineers who expected to get the benefit of your expertise.

Similarly, if you want to influence the technical direction of your org or business, you’ll find yourself gravitating towards opportunities to take a broader view, be in the rooms where the decisions are happening, and tackle the cross-cutting problems that affect many teams. If you’re trying to do that while assigned to a single deep architectural problem, the problem’s just not likely to get solved, and nobody’s going to be happy with you there either.

Which of the “four disciplines” do you gravitate towards?

In his 2021 Staff Plus Live talk, Role and Influence: The IC trajectory beyond Staff, Yonatan Zunger, Distinguished Engineer at Twitter, describes the “four disciplines” that are needed in any job in the world:

  • the core technical skill of the job: coding or litigation or producing content or cooking, or whatever a typical practitioner of the role works on.

  • product management: figuring out what needs to be done and why, and maintaining a narrative about that work.

  • project management: the practicalities of achieving the goal, removing chaos, tracking the tasks, figuring out what’s blocked and making sure it gets unblocked.

  • people management: turning the people into a team, building their skills and careers, mentorship, dealing with people problems

We might think of an engineer as focusing on core technical skills, a project manager on project management, and so on, but Yonatan notes that the higher your level, the less your mix of these skills correspond with your job title. “The more senior you get, the more this becomes true, the more and more there is an expectation that you can shift across each of these four kind of jobs easily and fluidly and function in all rooms.”

Every team and every project needs all four of these skills in evidence. As a Staff engineer, you’ll use all of them. Strategy and shaping direction needs product management skills. Making big projects happen is impossible without some project management skills. Mentoring colleagues needs some people manager skills. Everything you do will have a foundation of the core technical skills. You don’t need to be amazing at all of them though.

We all have different aptitudes, and different kinds of work we enjoy or avoid, and your skills in each discipline will grow at a different rate. Maybe as you’re reading this now, it’s obvious to you which ones you enjoy and which ones you hope to never need. If you’re not sure, Yonatan suggests discussing each one with a friend and having them watch your emotional response and energy while you talk about it. If there’s one that you really hate to do – maybe you love leading a group of people but hate having to decide what goal you’re all aiming at, or maybe the idea of keeping track of the various tasks that need to happen in a project makes you want to hide under a rock – then you’d better make sure you’re working with someone else who’s responsible for that aspect of the work.

You do need more than one of these skills though! Whether you’re breadth-first or depth-first, you’ll find it hard to continue to grow with only the core technical skill. There are a few, rare exceptions where a strong senior engineer in a very business-critical domain can be successful at their role without planning ahead or influencing people around them. Yonatan calls this the “hyperspecialist” role, but notes that, “There’s actually very few jobs at very senior levels that are purely hyperspecialists. It’s not a thing people tend to need.”

How much do you want… or need to code?

For “coding” here, feel free to swap in design or data analysis or hard math or wiring things together, whatever the core “technical work” of your career has been to date. This set of skills probably got you to where you are today, and it can be really uncomfortable to feel that you’re getting rusty or out of date. Your role will be influenced by how much you want or need to stay in the technical weeds.

Some Staff engineers find that they end up reading or reviewing a lot of code, but not writing much at all. Others find excuses to code12, taking on only non-critical projects that will be interesting or educational to work on, but that won’t delay the project if output on them is slow.

For me, I’ve never been able to code in blocks of less than about two hours. Being a restless, breadth-first architect type who prefers an org-level scope and has a tendency to get involved in (too) many things at once, I’ll never have enough free two hour blocks to get really comfortable with any particular codebase. My coding time is now reduced to hack weeks at work, personal projects when I’m on vacation, and Advent of Code.

I’ve got Staff+ friends and colleagues who still code a lot at work though, either by keeping their scope narrow and deep, being deliberate about getting involved in fewer things, or working way too many hours. I don’t recommend that last solution.

If you’re going to feel antsy unless you’re in code every day, make sure you’re not taking on a broad architectural or influence-based role where you just won’t have time. Or at least have a plan for how you’re going to scratch that itch, so that you’ll be able to resist jumping on coding tasks and leaving the bigger problems to fend for themselves.

How’s your delayed gratification?

Coding has comforting and fast feedback cycles: every successful compile or set of tests passing tells you how things are going, and reassures you that you’re making progress. It’s like a tiny performance review every day! It can be disheartening when you leave that and move more towards work that doesn’t have these built-in mechanisms to tell you whether you’re on the right path.

This is something to consider when you’re looking at whether to take on a slow, long-term or cross-organisational project. When working on strategy or culture change, it can be months–or even longer–before you have a strong signal about whether what you’re doing is working. This can require some mental adjustment. If you’re going to be anxious and stressed out on a project with longer feedback cycles, try to get a manager who you trust to give you regular, honest feedback about how things are going. If you don’t have that, you’re going to have to make peace with constant ambiguity–or consider projects that pay off on a shorter timescale.

Are you keeping one foot on the manager track?

Although most Staff+ engineers don’t have direct reports, some do. A “tech lead manager” (TLM) or sometimes “team lead” role is a kind of hybrid role where the staff engineer is the technical leader for a team and also manages that team.

There are a few reasons you might be drawn towards a TLM role. Maybe you love being a manager and don’t want to stop, but feel uncomfortable that you’re losing the “technologist” part of your job description. Maybe you’re at a company where the IC track hasn’t found its stride yet, and you need reports to be in the rooms where the decisions are being made. Or maybe you’ve been a Staff engineer for a while and want to start building some management skills.

Be warned, before you make this decision, that being a tech lead manager is a famously difficult gig.Being a good technical leader is hard: it takes a lot of time to keep your context and skills fresh. Being a good manager is difficult too! Most engineers starting out in a management role will need to learn how to do it. It can be challenging to be responsible for both the humans and the technical outcomes without feeling like you’re failing at one or the other. When trying to do both jobs at once, it’s difficult to find time to invest in building skills on either side, and I’ve heard a lot of TLM folks lament a loss of career progression and sometimes missed promotions as a result.

More often I’ve seen people decide to focus on one set of skills and then the other, taking a management role for a couple of years, then going back to a staff engineer role, often going back and forth13 every few years to keep skills on both sides sharp.

That said, some people do manage to thrive in TLM roles, particularly when the number of reports stays small. Despite its title, Will Larson’s article Tech Lead Management roles are a trap says that a role like this is not always a bad choice, so long as you’ve already built up solid experience as both team manager and technical contributor. If you’re trying to learn either of those sets of skills on the job, you’re going to have a hard time. If you’re going into a role like this, have a plan for how you’re going to make it sustainable, perhaps by having a bench of other senior people you can delegate to or lean on when you need them.

Do any of these archetypes fit you?

In his article, Staff archetypes, Will Larson describes four patterns of staff engineer roles that he’s identified while interviewing people doing the job14:

  • Tech leads, who partner with managers to guide the execution of one or more teams

  • Architects, who are responsible for technical direction and quality across a critical area

  • Solvers who wade into one difficult problem at a time

  • and Right Hands who add leadership bandwidth to an organisation.

These archetypes can help define the kind of role you’d like to have. If you don’t see yourself in any of those archetypes, or your role crosses more than one of them, that’s okay too! These archetypes are not intended to be prescriptive; they give us concepts we can use to communicate with each other when describing what we’d like our jobs to be. Having a list like this means that if an engineer is operating in an “architect"-type role but would feel more comfortable as a “solver”, they have a concept to point at to describe what they want to do. Some organisations will find that they need someone in a role of that shape, others won’t, and either way, the engineer knows where they stand.

What’s your current mission

So we’ve discussed your scope and your reporting chain: the rough boundaries of the part of the organisation you’re operating inside, and where in the organisation you sit. We’ve also looked at your aptitudes: how you like to work and what kinds of skills you’re drawn to. But even if you understand all of that and have a clear map of the shape of your role, there’s one question left: what are you going to work on?

As one of the most senior engineers in the company, a Staff engineer tends to be in demand. Your expertise is valuable on projects. Your endorsement of a path carries weight. Longevity in the role and seniority in the organisation just amplifies this.

As you grow in influence, you’ll find that more and more people want you to care about things, and you need to take the time to decide whether you do. Someone’s putting together a best practices document for how your organisation does code review, someone else wants agreement across engineering to be more deliberate about library updates, your group’s doing a hiring push and needs to decide what to interview for, a system you used to work on is hitting its scaling limit, and there’s a deprecation that would be making more progress if it had more senior sponsorship. And that’s Monday morning. What do you do?

In some cases, your manager or someone they report to will have strong opinions about what your mission should be, or will even have hired you specifically to solve a particular problem. Most of the time though, you’ll have some amount of autonomy in deciding what’s most important, and this will increase as you become more senior.

While a few companies may have a glut of senior people who are looking around for things to do, it’s more common that there’s more difficult work available than there are senior people to take it on. That means that every time you choose what to work on, you’re choosing what not to do as much as you’re choosing what to do. You need to be deliberate and thoughtful about what missions you take on.

What is important?

As a junior engineer, if you do a great job on something that turned out to be unnecessary, you still did a great job. By the time you’re senior, your work also needs to be useful. At staff level, everything you do has a high opportunity cost, and your work needs to be important. Let’s unpack that for a moment. “Your work needs to be important” doesn’t mean you should only work on the fanciest, most glamorous things, the biggest launches, the newest technologies, the VP-sponsored initiatives. The work that’s most important will often be the work that nobody else is seeing, where it’s going to be a struggle to even articulate the need for it because your teams don’t have good mental models for it yet. It might involve gathering data that doesn’t exist, or spelunking through dusty code or documents that haven’t been touched in a decade. It might involve doing repetitive manual chores as you try to learn a process, or taking notes for someone else’s meeting to help a project that’s having trouble making decisions, or asking the same question of every manager in the company, or any number of other grungy tasks that just need to get done. Meaningful work comes in many forms.

Choosing your work deliberately doesn’t mean that you shouldn’t experiment, or that there will be a huge penalty for solving the problem wrong. The opposite is true, in fact: we’re unlikely to hit on the right solution the first time, so we need to leave room for exploration if we want to do good work. But we should try to be sure that the problem we’re solving is a real one, and that it’s a problem that matters. While we might applaud a junior engineer’s skill and initiative in building something they thought might be useful but turned out not to be, we don’t reward senior engineers for the same thing. Doing a stellar job polishing a project nobody needed is like using a big chunk of your company’s compute power to render a gazillion pictures of cats: yeah, cat pictures are cute, but that was a waste of an expensive and limited resource.

What needs you?

It’s a similar situation when a senior person devotes themself to the sort of coding project that any mid-level engineer could have taken on: you’re going to do a stellar job on it, but chances are that there’s a senior-sized problem available that the mid-level engineer wouldn’t be able to tackle. Think of it as a big binpacking problem. Or, to use an idiom my kid dropped profoundly one day, “you don’t plant grass in your only barrel”.

Along the same lines, be wary of choosing a mission that already has a lot of senior people on it. Scope out who else is working on the problem that you can see, and whether they seem likely to succeed at solving it. While Brooks’s law–"adding manpower to a late software project makes it later"–is, as the man said himself, “an outrageous simplification”, many projects won’t benefit from an extra person, and some may even be slowed by an extra leader joining.

In general, if there are more people being the wise voice of reason than there are people actually typing code (or whatever your project’s equivalent is) in the service of the goal, be cautious about butting in. I’ve heard one engineering manager privately wish that they could trade some of the senior people on their team for eager new grads: their project had too many people debating architecture and strategy and not enough actually writing code. We’ll talk in Chapter 3 about how your vocal support of someone else’s plan can be much more impactful than trying to solve a problem with your own ideas.

That’s not to say that you should avoid any problems that are already being solved. Just tread carefully. Try to choose a problem that actually needs you and that will benefit from your attention. Consider moving on when that’s no longer true.

The “most important” problems will change over time. The more senior you become, the more it is part of your job to use good judgement about what’s important and what isn’t. You should know why the problem you’re working on is strategically important–and if it’s not, you should do something else.

Aligning on your scope and mission

So by now you should have a pretty clear map of what the scope of your role is, what its shape is, and what you’re working on right now. But are you certain that your map matches everyone else’s? Depending on what kinds of organisations your colleagues or management chain have come from, your expectations may differ wildly on what a Staff engineer is, whether they count as “leadership”, what kinds of deliverables they’re responsible for, how much time they should spend on recruiting or industry engagement, whether they can or should have reports, and myriad other big questions. I’ve seen companies where managers weren’t really comfortable with the idea of having any engineers as leaders. I’ve seen others where Staff engineers were considered the only drivers of technical strategy and managers were expected to follow that direction. If you’re joining a company as a Staff, it’s best to get all of this straightened out upfront.

A technique I learned from my friend Cian Synnott is to write out my understanding of my job, and share it with my manager and other interested parties, such as the leads of a team I’m engaging with. It takes time to write a document like this, and frankly it can feel a little intimidating to answer the question “What do you do here?”. What if other people judge what you do as useless, or think you don’t do it well? It’s scary! But writing it out removes a lot of ambiguity, and you’ll find out early if your mental model of the role is the same as everyone else’s. Better to know that now and realign, rather than finding out at performance review time.

Here’s what such a document might look like for a breadth-first architect-archetype Staff Engineer who is assisting with (but not leading) a large cross-team project.

Don’t obsess about getting this perfect: get it right enough. Having a mission document doesn’t mean you’re then forbidden from doing something else. Just like stepping outside your scope, you might find important reasons to do something other than your defined mission. As mentioned above, when there’s a crisis or an outage, there’s no such thing as “that’s not my job”. But it’s a nice reminder of what you intended to do, and it helps you keep an eye on whether you’re actually doing the thing you claimed was your job.

You might decide that your mission needs to change earlier than you expected. The state of the world can change or your priorities might shift. A month or two down the road, you might realise that you’ve gotten it entirely wrong and need to reevaluate your job description. But then write a new one, with the new information. Being clear about your mission makes sure everyone’s on the same page.

“That’s not my job”.

Here’s a final thought for this chapter: your job is to make your organisation successful. For all you’re a technology expert or a coder or affiliated with a specific team, ultimately your job is to help your organisation achieve its goals: whatever they are, now and in future. The more senior you become, the more your job will involve filling gaps and stepping up to handle situations that aren’t anyone’s job. Senior people do a lot of things that are not in their core job description. They can end up doing things that make no sense in anyone’s job description! But if that’s what the project needs to be successful, consider picking it up.

Some of my coworkers at Squarespace tell the story of the day in 2012 when their data center had a power outage, and they needed to carry fuel up 17 flights of stairs to keep it online. I think “hauling barrels of diesel” does not show up in the job description for most roles in tech. But that’s what was needed to keep the site online (and it did stay online!) and so they did it. When the machine room flooded at the ISP I worked at years ago, the job became about making a bucket chain of trash cans to keep the water level low. And when a project in Google in 2005 was running late and we didn’t have enough hardware folks available, my job for a couple of days was racking servers in a data center in San Jose. You could tell the racks I worked on because they were only filled up to my shoulder height. Those servers were too heavy for me to fill the top of the rack! But you do what you need to do to make the project happen.

Okay, usually this “not my job” work is less dramatic. It can mean stepping up and acting as an incident commander during a crisis because you can see that someone needs to coordinate the work, or writing a document to make some process easier that’s wasting everyone’s time. It can mean picking up program management when there’s no TPM available, and chasing down the reason a project your team depends on seems to be stuck. It can be noticing that your new engineer is lost and feels abandoned, or that two people in your org keep getting mad with each other and don’t seem to be able to fix the relationship on their own. Not your job. But the sort of thing we should all pick up.

To reiterate: your job is ultimately whatever your organization or company needs it to be. In the next chapter, we’ll talk about how to understand what those needs are.

1 The technical track is often called the ‘individual contributor’ track, but it’s a bit of a mischaracterisation of the tole. Few senior engineers should be true “individual” contributors. Most should be responsible for clear improvement across their team or organisation.

2 As described in the introduction, I’m standardizing on the word Staff+”, coined by Will Larson in his book Staff Engineer, to indicate software engineering roles above Senior level. I’m going to say “Staff Engineer” to mean an engineer with the seniority of a manager, and “Principal Engineer” to mean one who is the counterpart of a director. These titles are far from universal: swap in whatever words make sense for your organisation.

3 Glue work is the less glamorous – and often less-promotable – work that is not in anyone’s job description, but that needs to happen to make a team successful. It’s a mix of technical leadership and shovelling chaos. Read more at http://noidea.dog/glue.

4 And the weird social and political reasons they made the decisions they did. What were they thinking? Was this really what they intended to do? Of course, future teams will say the same of us.

5 In some companies Project Managers might fill the same role, or there might be distinct TPM and Project Manager roles, or there might be one role called Program Manager, without the word “technical”. Just like with Staff engineering, just go with whatever your company does.

6 Wikipedia’s list of software bugs makes for good, if sobering, reading. I’m genuinely always surprised we’ve had so few major fatal accidents from software so far. I wouldn’t like to count on that luck holding.

7 Hillel Wayne’s article, Are We Really Engineers, and Glenn Vanderburg’s talk, Real Software Engineering are both fantastic works on this topic. Hillel’s followup essay, We Are Not Special, points out that a lot of engineering solutions that used to involve carefully tuning physical equipment are now done with a “software kludge” instead. Again, I wouldn’t like to depend on us staying lucky.

8 Though some do. We’ll discuss the “tech lead/manager” form of staff engineering later in this chapter.

9 And they’re all learnable. We’ll talk about how in Chapter 5.

10 I recommend Lara Hogan’s article on building a “manager Voltron”. https://larahogan.me/blog/manager-voltron/

11 A side quest is a part of a video game that isn’t anything to do with the main mission, but that you can optionally do for coins or experience points or just for fun. Lots of “well, I was about to fight my way into the heavily guarded fortress to defeat the demon that’s been terrorising this land, but sure, I can go find your cat first.” https://tvtropes.org/pmwiki/pmwiki.php/Main/Sidequest

12 Even if it’s objectively not the best use of your time, I think it’s valid to take on an occasional coding project for fun and to keep your skills sharp–so long as you’re completely self-aware that that’s what you’re doing.

13 Charity Major’s The Engineer/Manager Pendulum is an excellent article on this topic. https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/

14 The interviews are all up at https://staffeng.com/ and they’re fantastic, highly recommended.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.221.15.15