What makes for a "senior"?To summarize, what I expect from a senior is: technical competence with an eagerness to improve.
About a week ago I said “fanboys can’t be seniors.” This prompted a question from fellow list reader, Pieter-Jan Smets, who said:
So a senior should be able to to see advantages and drawbacks in their tools, including their favorite ones. But since the term “senior” is interpreted differently by everyone, what is according to you the skillset required in order to call someone a senior?
(Shared with permission, and edited for clarity)
Yeah, that’s a good question. Probably a better question than I have an answer for, but I’ll try my best. But fair warning: As I start writing this, I don’t actually know what I’m going to say.
First, though, let me say that I don’t put a lot of stock into job titles like “junior” or “senior”. In large part for the reason Pieter-Jan brought up: they’re interpreted differently by everyone. But also because I think they’re mostly artificial, and at worst harmful in their contribution to toxic cultures of one-upmanship and pay disparity, and at best often just superfluous, or a “necessary evil” for HR departments.
Also, I’ve gone my entire career without ever holding the title of “senior”. I’ve been “Software Developer”. I’ve been “Lead Developer”. I’ve been “Interim CTO”. I’ve been “VP of Engineering”. I’ve been “Manager of Software Development”. But I’ve never been “Senior Developer”. (Actually, I may have briefly been given that title at a 3-month freelance gig I did in 2021… I’d have to dig through some paperwork to be sure.)
But all that said, they are a reality for many of us, so it probably warrants some attention.
The way I look at the title of “senior” is something like “aproximately half way between junior and staff” (or whatever title designation your company uses for someone one or two grades above “senior”: “staff”, “principle”, or whatever)
I think the best place to start is with what I think an “Ideal Engineer” ought to look like. Which presumably a Staff Engineer is a good way toward achieving.
In my mind, the ideal engineer:
- Has a deep knowledge of the tools they use (programming langauges, git, frameworks, databases, etc)
- Has a solid grasp of the business domain they’re working in (eCommerce, cryptocurrency, embedded manufacturing controllers, etc)
- Has great habits that reinforce quality, feedback, and teamwork.
- Has basic business sense, and can identify solutions to provide the required business outcomes, instead of a focus on pre-defined “requirements”.
- Has a strong ability to learn and be taught (every problem we face in software is novel in some way, so this is key)
- Has good communication and people skills. Can hold strong opinions without being a jerk, and seeks to understand differing opinions. Knows how to work with other technical and non-technical people.
- Is able and willing to help others, particularly those with less experience.
I’m sure I’m missing a few things, but I think this is a good all-around list. Perhaps most important: it’s only about half technical stuff.
Now if I work backward, what do I expect from a junior engineer?
- Has only a basic knowledge of the tools they use. Likely needs to ask for help a lot.
- Has little or no grasp of the business domain they’re working in. Likely needs to ask for a lot of help.
- Has few habits, perhaps bad habits.
- Has little or no business sense, and may expect requirements to be delivered with a bow.
- Has a strong ability to learn and be taught.
- May have weak communication and people skills, but demonstrates an ability to learn in this area.
- Should be willing to help others, but may not have this opportunity as often as a more senior engineer.
As I’m writing this list for the first time, I’m struck that about half of them are almost the same between my ideal and a junior… Anyway, moving on.
So in my mind a senior probably falls about half way between these two. So probably something like:
- Has a working understanding of the tools they use. Most days they don’t need to ask for help.
- Has a good grasp of the business domain they’re working in. Most days they don’t need help.
- Has developed some good habits, and is always on the lookout for new ones.
- Has a strong ability to learn and be taught.
- Has good communication and people skills. May have strong opinions, but seeks to understand alternatives anyway.
- Willing to help others.
And now as I read this list I just wrote at 10:00pm, I’m wondering if it’s at all helpful. 🤷
I guess to summarize, what I expect from a senior is “technical competence with an eagerness to improve”, whereas from a junior I expect more or less “incompetence, with an eagerness to learn”, and from a staff+, “technical excellence, with a desire to constantly improve.”
I think this says a lot more about what I view as critical aptitudes in an engineer (the half of each list that’s mostly unchanged), than the difference between levels.
What do you think? What skills, or other charactaristics, should map to a Junior/Senior/Staff engineer title?
Adventures in DevOps 123: Standing Out in the Job Search Process
Strategies you can implement to stand out in a crowded job search process.
What's the first thing you do with a new code base?
When you join a new dev team or company, where do you start?
Improve your software delivery