Advancing from a Mid-Level to Senior Developer

"Senior" developer is a coveted title amongst software engineers. Many you work with will be promoted seemingly overnight, despite you thinking you're a better engineer. While you stay firmly as a mid-level developer.

This is the situation I found myself in. I was curious about what would make me a senior developer. I figured that the title was when I would have finally "made it". I could tackle interesting problems, make decisions and work on more areas of the product.

But I soon realised I had an incorrect view of what a senior developer was.

I thought a senior developer was someone who

  1. Had 5+ years of experience.
  2. Wrote great code (which I understood to mean never receiving a PR comment).

But, the reality is much different.

I'm going to discuss what it means to be a senior developer and what you should do to become one. Hint: It's nothing to do with your pull requests!

What it takes to become a senior developer

1. Don't chase the title

The best things come in life when you don't search for them.

In the same way, one of the best ways to become a senior developer is not to strive after the title. Because the title is meaningless without a solid foundation. I could call myself an architect. But do I know how to design a house? Not at all. In the same way, you have to have the knowledge and attitude of a senior developer to be called one.

But titles are not the be-all and end-all. Reflecting on it, I now consider titles meaningless. I've met plenty of "senior" developers who have that title by being at a job the longest.

Be driven by the knowledge you will gain at the end of the process and not some words on your company's "about" page. You don't need a title to be a good engineer. Stay humble and be a junior.

2. Develop T shaped understanding

"T" is a great shape. It's got the bottom stick and the broad top. We can liken this to our knowledge.

Let's first look at the bottom of the "T" - depth of understanding.

By now, you will likely have at least 1 programming language you use more than others. Develop further understanding of this language. How? Learn how the compiler for the language works, its flaws and what situations is it good in.

Developing a deep understanding (the bottom of the T) of a particular topic will enable you to debug the difficult problems and tell others about it. You can speak from a position of knowledge, rather than repeating blog posts you read verbatim.

There is a joke that touches on this topic:

A priest is giving a nun a ride home.

As they're in the car, each time the Priest goes to switch gears, he rests his hand on the nuns knee.

The nun looks up at the priest and says "Father, remember Luke 14:10."

The priest moves his hand away, embarrassed. The next time they stop at a light, he places his hand a little higher on her leg.

Once again, the nun says "Remember Luke 14:10, father."

The priest apologizes, "The flesh is weak" he says.

The priest drops the nun off, and when he gets home, he reaches for his bible and flips to Luke 14:10, which says.

"Friend, come up higher. Then shalt thou have glory."

The lesson? Know your subject.

The other part of the "T" is the top - breadth of knowledge.

It's all well and good being an expert in one topic. But, without a wide breadth of knowledge, you will struggle to apply that knowledge. You need to have a surface understanding of a bunch of topics.

For example, if you're a genius at NodeJS, then you can learn React, HTML and CSS. Continue to skill yourself on new topics, even if they are only slightly related to your field of expertise. You might choose to learn Algebra, Game theory or Design psychology. Learn what interests you and supports you.

3. Apply principles and previous experience

A key feature of a senior developer is that they've been around the block. They've seen the destructive effects of forgetting tests and have seen the successes of teams that foster psychological safety.

Using these experiences, their principles, and their "T" based knowledge, they can apply these to future scenarios. When a decision is being made, reflect on your past and use these to make comments and suggestions.

Additionally, when doing your day-to-day programming, apply programming principles consistently such as KISS, documenting code, and handling edge cases and performance issues proactively. To illustrate this, consider a new carpenter and an experienced one. Likely, they can both construct a chair. But the experienced carpenter will be able to apply his experience to discern that the chair needs extra lumbar support and so requires a particular technique of joining the wood. In the end, the experienced carpenters' chair will stand the test of time.

In the same way, consistently applying your principles will enable your code to be robust and stand the test of time.

Of course, there are many other ways to develop from a mid-level to a senior developer but these three stand out in particular. And, in my case, were the deciding factor. Enjoy the process of continuous learning and growth. Although cliché, it's about the journey, not the destination.