Most tech companies have an established career ladder. They all follow this general form:

  • Junior engineer: Take this tightly defined feature & build it
  • Mid-level engineer: Take this vaguely defined feature & build it
  • Senior engineer: Take this known problem & figure out how to solve it
  • Staff engineer: Take this goal & find the problems we should be solving

Let's dive deeper into the default expectations of these roles and what it takes to zoom past them

Junior Engineer

Take this tightly defined feature & build it

These bright young fledgling college hires have just hached from their eggs. Precocious and eager to please, but still wet behind the ears.

At this level, managers expect Juniors to generally need a lot of hand holding and explanations. This is generally done in the form of giving these juniors well defined projects where the path forward is pretty clear.

Mid-level engineer

Take this vaguely defined feature & build it

The tasks given now become more nebulous.

The manager can get away with putting less time on scoping the project. Maybe they won't have validated that their planned approach might work, or they may still be unclear on some of the implementation details. And that's a good thing!

The dev has developed to the point where they can be trusted to fill in the blanks on their own and complete the project anyways.

This way, the young dev has started taking some of the scoping work off of their manager's plate.

Senior engineer

Take this known problem & figure out how to solve it

They're no longer asked to build specific features. Instead, managers simply hand the entire problem over to these engineers to solve on their own.

They have to explore the solution space, identify the best options, and get the approval of their stake holders (such as your manager, teammates, or customers)

They might even split the solution up into individual features and ask the juniors on their team to work on those. This makes their manager's lives even easier, they don't need to do as much planning or scoping!

Side note: At many large tech companies "Senior engineer" is considered a terminal role. That means everyone is expected to get to this level eventually. But to go any higher you need to work extra hard and also get lucky. The responsibilities change significantly at the next level up, and they're not everyone's cup of tea.

Staff engineer

Take this goal & find the problems we should be solving

You now think at an even higher level, identifying the problem, splitting it up into smaller sub-problems that Senior engineers should be enlisted to solve!

Except, merely identifying the problem isn't enough. You need to be able to persuade other people that the problem is a big deal and that it's more important than all the other problems the company is facing!

That's not easy!

It requires finesse, you have to manage upwards (i.e. politics). If you're successful, you'll likely end up leading the squad tasked with fixing the problem.

And who do you think gets to motivate those senior engineers to work on the problem?

What's in common here?

What do all these levels have in common? Each time you go up from one level to the next you're:

  • Taking on more ambiguous work
  • Influencing and getting support from others to a larger and larger extent

The biggest shift comes from taking a bigger share of ownership over the problem and devising solutions to fix them.

Don't Wait

If you've ever worked on a side project, some of this may have sounded vaguely familiar: It's exactly what you do when you're working on your own!

You do it instinctively then, since you have full context on the problem, you know the goal you're trying to achieve, and you have ideas on how to get there. The bits you don't have to worry about are interpersonal dynamics, and (depending on your goals) finding customers 🙂

And if you can do this in your side projects, you can do it at work too.

Even as a junior engineer, if you work to build up your context around the goals of your team and your org, along with the key problems they're facing, you can start suggesting solutions to those obstacles. Even if your ideas are rejected at first, keep trying. You'll end up practicing those leadership skills, develop that creative muscle, and stand out from the crowd just for trying.

And eventually, you might just find your ideas gaining traction

This article started out as a viral tweet. If you want more content like this, follow me on twitter or sign up to my newsletter below.  

If you want to learn about how to get a better paying software engineering job, you might appreciate The Interview Advice that got me offers from Microsoft, Google and Stripe