A large percentage of software engineers spend years at the “senior engineer” level. At many companies, including most of my former employers (i.e., Google, Twitter, Airbnb, and Stripe), this level is fairly straightforward to get into, but hard to get promoted beyond. The difficulty in advancing past “senior” can cause a lot of frustration and make people feel stuck in their careers.

In this post, I want to share some observations about this “senior engineer plateau”, why it causes frustration, and how to navigate out of it.

Aside: The senior engineer level

As described in my earlier blog post, most companies beyond a small size have well-defined career ladders for software engineers, with at least 4 levels. The details vary from company to company, but in most of these ladders the “senior” level is what employees get to after 5+ years of industry experience.

At most places, this rung on the ladder is also considered the “career level”, which implies a few things. First, this means that once you get to it, you can stay in it forever- as long as you meet expectations, you can spend 30+ years as a senior engineer, and no one will ever complain about your lack of ambition or try to push you out for not advancing further.

Second, as the “career level”, it means that people’s careers naturally flow into it. Assuming the correct mentorship, management, project work, etc., most company promotion processes don’t put up lots of barriers for people getting to “senior” and, moreover, might even require them to do this after a certain number of years at the company.

Once you get to senior, however, the path beyond it can be much harder. Because staff and higher roles can come with significantly more compensation (discussed below) and because not everyone is expected to get up to these levels, companies are much, much pickier about how and why they promote people into them.

Aside: Why level matters

A common statement I hear is that “levels don’t matter” and thus that people shouldn’t care whether they’re stuck at senior or somewhere else on the ladder for a long time.

While this is true from a strictly title-based standpoint (personally, and like many others, I really don’t care whether my LinkedIn profile says “software engineer” as opposed to “staff software engineer” or something else), the reality is that levels are more than just words.

First, they’re an acknowledgement of the work that you’ve done. Many engineers, myself included, are motivated by working on things that matter, and levels are one way (but certainly not the only way) to express that one’s work is valued and has had a positive impact at the company.

Second, and probably more importantly for many, levels can play a big role in compensation. As described in my earlier blog post, each level has associated salary and equity bands. Once you hit the upper end of the band, which may happen relatively quickly if you negotiated well for your initial offer, it’s hard to get significant increases from year-to-year.

There are a few other ways, beyond pay bands, that levels affect compensation. At some companies significant equity increases are tied to promotion. If you don’t get promoted, you might not get stock refreshers frequently. Also, at companies with bonus programs, the target is often tied to level. When I was at Stripe, for instance, senior engineers had a target of 10% of base salary whereas staff had a 20% one. This meant that, all else being equal, staff engineers would get significantly larger bonuses. Google also had level-specific targets when I was there.

These links between levels and pay are not always 100% fair, but they’re the reality of the compensation systems at most tech companies. Thus, you sometimes need to “work the system” around levels to ensure that you’re paid competitively.

Common frustrations

The following sections describe some of the common frustrations that I’ve felt myself and/or observed in other senior engineers over my last few jobs.

Productivity alone is not sufficient

Many senior engineers are super productive from a coding standpoint- because they’re experienced enough to know what they’re doing (usually) and because they don’t have the extra responsibilities of managers and more senior level ICs, they’re often at the sweet spot where they can “get stuff done” with minimal distractions.

Unfortunately, though, this productivity alone is often not sufficient for getting promoted. It’s a data point for sure, but at many companies it’s just one of many things that’s considered.

This causes frustration for many, and was personally something that puzzled me earlier in my career, because intuitively it feels like productivity should be the main criterion for promotion. Engineers are hired to create software just as doctors are hired to treat patients and artists are hired to make art. So, if you are more hard-working and efficient at creating software and related outputs (e.g., documentation, bug fixes, etc.) than others, you should be rewarded with a promotion.

But, alas, this isn’t how most career ladders are set up- these systems reward “impact” as opposed to “output”. Productivity is a necessary condition for having a positive impact in an organization, but, particularly as you get into higher levels, other things like working on projects that are sufficiently complex, demonstrating cross-team leadership, being visible, etc. are required as well.

Breadth over depth

A related frustration I’ve seen with getting to staff level at large companies is that the promotion criteria often place a bigger emphasis on breadth as opposed to depth. You can be an expert in a technical field and do great work there, but if you don’t also check off other boxes (e.g., cross-team coordination, mentorship, etc.), then you’ll likely hit roadblocks in getting to the next level.

Thus, the system tends to reward people whose work is “horizontal”, i.e. spread across multiple projects, domains, and types of work as opposed to those who are more “vertically” focused on a specific thing. This isn’t necessarily wrong (horizontal work can have a big, positive impact on a company and should be rewarded as such), but it is something to be aware of and is something that can cause some frustration if, like me, you’re more about depth than breadth.

Visibility required

For promotion to senior and lower levels, the direct manager’s word is usually enough- if the manager says that one of their reports is ready for the next level, and there’s some basic peer validation, then the person will most likely get promoted.

For staff and higher levels, though, the manager’s word is typically not enough. The person up for promotion could be the greatest engineer in the world, but if no one outside of their immediate team can affirm this, then they’re unlikely to get to the next level.

The easiest way to get this affirmation is to be visible to those outside of your team and particularly to those who are making the promotion decision. Unfortunately, though, this can be hard if you’re super introverted (as I am), or you’re working head’s down on a deep technical problem that isn’t flashy and doesn’t naturally lend itself to cross-company visibility.

How to fix it

Find the right role

This might come across as a bit extreme, but if you really care about career advancement then the most important thing is to find a company and a role where the work and evaluation criteria match your strengths. Personally, I feel that I’m strongest on the productivity side and less good at the “cross-team coordination”, “evangelizing new technologies across the company”, and other dimensions that high-level ICs are promoted for. Other people, however, might excel at the latter and not want to spend all day pumping out pull requests.

It’s important to note here that there can be a ton of variation not only between companies at a high-level but also between the roles within a company. Backend infrastructure engineers in division X, for instance, might be evaluated differently than frontend product engineers in the same division, and these two groups might be evaluated differently than engineers doing similar work in division Y at the same company.

Before you sign a new job offer or switch teams inside a company, it’s really important to assess your strengths and compare them to the work outputs and behaviors that are rewarded for the role.

Make sure you check the boxes

As mentioned above, many companies evaluate employees on a broad set of criteria and require positive signal in all of them before allowing a promotion. Thus, if you’re trying to advance it’s really important that you “check off all the boxes”, even if some of these aren’t fun or aligned to your strengths. So, for instance, if getting to staff requires “mentorship experience”, then it’s important that you have some opportunity to do this, e.g. by hosting an intern for the summer.

You should consult your company’s career ladder documentation and work closely with your direct manager to figure out what these boxes are and how you can fill out the missing pieces.

Improve your visibility

Getting more visibility for yourself and your work is really key for advancing to higher levels. Even if you’re introverted and even if it’s uncomfortable, you need to ensure that the people evaluating your work understand what you’re doing and why it’s important.

In some cases, for instance if you’re at a really small company or working on a flashy, high-visibility product in a larger company, the visibility comes for free. In other cases, though, you need to do extra work to get this. Some tips here include:

  1. Do regular “skip level” 1:1s with your manager’s manager; if they don’t understand your work and aren’t promoting you to others, then it’s going to be hard to get ahead.
  2. Send out progress reports, launch announcements, etc. so others beyond your immediate team know what you and your colleagues are working on.
  3. Write blog posts, present at conferences, do internal “tech talks”, and participate in other activities that allow you to build your personal brand and promote your work.

Conclusion

At many companies, the senior engineer level is easy to get into but hard to advance beyond. I personally felt stuck at senior earlier in my career and many of my colleagues over the years have experienced similar feelings.

The key thing is to realize how the system works and ensure that where you’re working and what you’re working on are aligned with your long-term career goals. Once you achieve this alignment, advancing can still be slow but at least there’s a clear, achievable path to follow.