Job of a senior engineer
If you want to skip the rambling - TL;DR / summary is at the bottom.
This has got to be one of the more favorite and universal topics in software engineering… So, a disclaimer: I’ll be talking about my POV, and within webdev/gamedev industry, and from a mixed experience working in both very small companies and large ones, and within my own startup. With that being said...
At the end of a very detailed and thorough candidate interview at Symphony, the candidate asked my colleague and me - are you really thinking about all of these things on a daily basis? He was surprised to hear that - yes, it is usual for people in our position (senior, team lead) to think about a lot of technical things and their low-level implications, consider implementations and architecture and performance, be knowledgable about the latest tech and libraries…
It got me thinking further on why that is the case. And the answer is - from the business organization side, the name of the role that innovates on the technical side is - senior programmer. Let me explain.
As your business grows, responsibilities need to separate more and more. The founder takes the role of a CEO or so, i.e. somebody with the job of highest-level decision making and planning highest-level business strategies.
CTO is a person responsible for the highest-level reasoning about technical implementations of the business decisions and coordination to make it happen eventually.
Next, you have engineering managers and product managers. PMs are responsible for the delivery of pieces of product, one chunk (i.e. feature set, module) at a time. EMs are there to coordinate that effort with engineers and they are in a position to manage across different engineering teams, assign people accordingly, and have a good technical background to help them with reasoning about practical aspects.
And there’s the implementation part of the structure - the engineers. They are the ones that do the concrete work of creating the code that will be running. And in that part of the business structure, you’ve got the usual split on juniors, mediors and seniors.
Juniors are there the ones with the least experience and knowledge, and they require guidance and help, even when specified with the exact task to execute.
Mediors should be capable of executing most of the tasks without too much help (yes, it’s okay to seek opinions and feedback and extra explanations from other engineers, but they can always achieve the goal in at least one, perhaps suboptimal, way). They are able to implement things and to reason about a decent level of considerations, but they are mostly focused on considerations involving that specific task, not an even broader picture.
Seniors are basically people that take into account the whole lot. They are up to date with a huge chunk of the latest tech development and libs, they consider low-level stuff for performance and architectural reasoning, and they are responsible for coordinating their team on the technical side to be able to finish the task. And probably the most important distinction between them and any other role is the ability, and responsibility, to propose new technical solutions and to innovate, on a technical side.
Seniors are marked that way due to their knowledge and experience. With it, they’ve seen and worked with a lot of things, and know what are the best practices and why they are the best practices. And the job of a senior programmer is mostly to put that into practice - knowing what they know, what’s the best thing to do, considering their employer’s business model and their requirements. They are the role from which the technical innovation should originate from.
Let’s take a look at the role of a product designer. In its narrowest focus, product designers are innovating at the level of features and UX. They are people responsible for proposing new and exciting things, but for users. The business level of the company (CEO, PMs et al.) makes a decision to implement those based on the general approval from the engineering side. And only then we get to the practical implementation. But somebody needs to translate business requirements into concrete technical tasks, and to be able to do that, you need somebody to really consider all of the technical parts - the architecture, the perf, the tech stack, everything. And conclusions and new, original technical proposal are done by, you guessed it, senior programmers.
There are a lot of roles with mixed responsibilities and that is due to fact that all roles in all companies mean a bit different things, and as the company changes in size, so the responsibilities get added or removed for every person and every role.
On the product side, PMs, delivery managers, producers... are sharing responsibilities. On the tech side - engineering managers, solution architects, tech leads, team leads, seniors are sharing the responsibility for organization and planning of the technical counterparts. On the implementation side - senior, medior and other engineers. (And all the other engineering levels with less recognizable names - I, II, III etc.)
My point here is that - the first level at which innovation is created on the technical side is - “a senior developer”, because only at that level of experience and knowledge can technical proposals be trusted sufficiently.
This doesn’t exclude the possibility that there is a medior knowing even more than a senior, but it means that that person isn’t willing to innovate and take responsibility for that (this doesn’t have to be a negative thing as it can depend on a variety of factors, personal preference, personal life…).
This also makes a difference when interviewing a person - concluding whether they are perhaps not just capable of taking big tech risks and challenges, but do they want to do that? Maybe they are a senior based on their knowledge and experience, but they don’t want to operate in the role of a senior. And that’s fine.
So I’ll try to very coarsely categorize different roles and what they usually entail, in their more narrow sense, but the responsibilities and roles do mix very, very often:
- junior engineers - technical implementation (need help and guidance)
- medior engineers - technical implementations
- senior engineers - technical implementation and technical innovation
- team leads - technical innovation and work management (optionally technical implementation)
- tech lead - continuous (probably cross-team) technical innovation
- solution architects - ahead of time technical innovation
- engineering managers - team and cross-team coordination
- CTO - across the board technical innovation and coordination
So, to summarize:
The first level at which innovation is created on the technical side is that of a “senior developer”, because only at that level of experience and knowledge can technical proposals be trusted sufficiently. The innovation aspect and the responsibility associated with it are actually the main distinctions between mediors and seniors, and not the knowledge or experience on their own.