Software Engineering Seniority

3 min read

Every engineer and every company has there own definitions of seniority. They have rubrics, require certain hard skills, and even behavioural aspects they need to see before they consider someone “senior”.

I’ve been thinking about this for the past few months and I’ve come up with a simpler set of attributes that I need to see in good engineers. These are Problem Solving, Communication, and Speed. I believe these attributes should be learned in order.

You will continue to enhance them over your career but you should aim to get each to an intermediate level before moving on to the next attributes. I’d much rather work with a person who can solve problems independently and slow than with someone who can only move fast and needs to be told exactly what to do. That’s what machines are for.

Below I break these skills down by engineer level, just to give you a better feel for what I would expect for each level.

Junior

Focus on Problem Solving. Deeply focus on this. Take extra time if you need to. This is the core skill of any engineer (software, hardware, civil, etc.). Learn how to take an idea/request and break it down into smaller more manageable problems. Come up with multiple solutions and discuss tradeoffs.

You can enhance this skill by:

  • Reading books such as Think Like a Programmer by V. Anton Spraul
  • Finding courses that focus on practice with real-world problems
  • Building side projects
  • Practicing Data & Structures and Algorithms on sites like Leetcode
  • Taking on more challenging projects at work when you’re ready

Intermediate

Learn internal/external communication. It is not enough to solve problems. You have to learn how to find out what problems to solve. You also need to follow up to verify that your solution solved the problem. Get comfortable talking or texting with:

  • Anyone on your team
  • Anyone on other teams
  • Stakeholders
  • Customers

The key here is to focus on positive interactions that make people want to continue to work with you. Efficiently communicating the right thing, to the right people, at the right time shows your level of responsibility (ownership) and builds people’s trust in you.

You can enhance this skill by:

Senior

Learn speed. Not typing speed. Not talking speed. Outcome speed. We develop software so that people and businesses can achieve certain outcomes. At more senior levels, we aim to reduce the time it takes to achieve the same outcomes. This can reduce company operating expenses, increase the return on investment, and decrease the time to market.

You can enhance this skill by:

  • Reading books such as Dive Into Design Patterns or Dive Into Refactoring by Alexander Shvets
  • Focusing on prototypes and feedback early in the process
  • Using the Pomodoro technique to limit time waste
  • Asking/observing how other do these things fast

Senior Plus

Learn planning and discovery. This is what makes or breaks the business. The better you get a breaking down work and proactively solving problems, the better chance that the business will keep customers happy and remain profitable. Time, money, and labor are limited resources that must be carefully managed.

You can enhance this skill by:

In some companies you may need to show these skills before promotion. Example: improve external communication before being considered senior.

In my opinion, everything else is a subset of these that can be learned:

  • On the job
  • Through reading
  • From Mentors
  • By doing side projects

Some examples skills:

  • Data Structures and Algorithms
  • System Design
  • DevOps
  • Presentations
  • Negotiations
  • Agile practices

Based on your job description, take your time to be familiar, not necessarily proficient, before applying.

The main challenge with all of this is How do you know when to move on to the next attribute? Talk to your manager and peers. Tell them you’re focused on the Pareto principle and you will continue to improve on these attributes throughout your career.

I didn’t mention quality anywhere. This is on purpose. You should build quality into each of these attributes. The question of how much quality is dependent on your time/money budget, which is a discussion for another time.

Written on May 30, 2023

The opinions expressed here are my own and do not reflect any individual or organization from my past or present.

Subscribe

My newsletter will inspire you and boost your software engineering skills - subscribe now!