This is first video in my new series about how to become a senior developer. In the video I'm talking about:
- where is senior developer position on the typical career ladder
- what is experience required to be a senior developer
- what are responsibilities of senior developers
- https://www.gov.uk/guidance/software-... - career ladder from UK Gov
- https://levels.fyi - comparison of levels (and salaries) among large tech companies
My notes for the episode:
Who is senior developer
Ok, so let's get to the point: who is a senior developer, what does she or he do? What are their skills, and responsibilities?
As you can imagine, our beloved tech industry lacks any standard in naming positions. Some companies don't even have a concept of a senior developer! They use some codes, usually with numbers, like "Level 3 software engineer" or "Level 63". Seriously, when I hear that someone got promoted to "level 63" I can't stop thinking of Pokemon. But maybe in large organisations it makes sense.
Alright, so for the purpose of this series I need kind of a definition of the senior developer. Let's start with the ladder.
We start with junior developers - people who just start their career as software developers. Next we have... "developers" for the lack of better naming. Sometimes they are also called "software engineer 2" or "mid-level developers" but again, no standard. After that we have senior developers, who we're going to talk about in this series. And finally on top we have lead developers, who are often also called "technical leads" or "staff software developers". I've never understood the term "staff software developer", aren't all employees "staff"? Anyway, apparently it somehow makes sense.
Is is the end? Of course not. After the lead developer (or even after the senior developer level) people usually choose one of two paths: they become technical experts or move to management. Of course that's a great simplification, since not all companies offer these paths, and people often move from one to another. It's not like you sign a contract for the rest of your life.
Back to the senior developers then: for the purpose of this series we assume that senior developer is the 3rd step in the career of a software developer. Senior developers usually have at least 5 or so years of experience (again, varies a lot between the companies) and I personally consider them the backbone of every good software team.
Senior developer is also a position where some people decide to stay - in a lot of companies moving to a higher position is not only a mark of a seniority, but it also comes with more responsibilities and sometimes very different kind of work. If you don't want to manage teams, become an architect, and you enjoy a very hands-on position, senior developer might be a position where you can stay.
Experience is something that senior developers must have a couple years of experience in software development. How many years? I really cant' tell. I've seen people with 1 year being promoted to senior developer and I think this is an abomination, and even if you are a brilliant programmer, you just can't get enough experience in just 1 year of professional work (unless you're coming from some related work field). But is it 3 years? Is it 5 years? It totally depends on a company. I usually am a bit sceptical when I see a senior developer candidate with 2-3 years of experience. It is not a deal breaker, there might be exceptions, but they're, well, exceptions, they're exceptionally rare.
Skills and responsibilities
Ok, so now we know that in order to be a senior developer you need at least a couple years of experience. That's the minimum, and if you want to become a senior developer within a rather short amount of time, you need to acquire multiple skills and start taking responsibilities that are part of senior developer's job. Here's what I believe are the main skills and tasks of a senior developer:
Surprised that programming is not the first one here? Ok, let me explain — as a senior developer you might be approached by different people who'll ask you for help related to software that you write. Those people might be other developers who can't solve some issue, or someone from marketing team asking how to get email addresses of users who haven't logged in for a year; or account managers whose clients ask if it's possible to export the data.
You will be approached by such people, and you will help them solve their problems. In some cases the solution will be "we do not support such feature, please talk to our product manager" and in a few weeks you'll write some code. Some of these problems will require reading code and understanding the bug. And yet other problems will require some thinking, asking some questions and discussing some workarounds to get the things done.
As developers we very often decide to write code in order to solve problems. But often the code is not required, what's required is some problem solving skills and trying a couple different solutions, before we figure something out.
Related to the first point are communication skills. I can't emphasise enough how important it is to be a good communicator. It doesn't matter whether one day you'd like to lead a group of developers or whether you want to spend your career as an individual contributor — communication is extremely important and if you want to succeed by delivering projects on time or by helping your company build a great product, you need to have at least decent communication skills.
Who and how do you need to communicate with? Unless you work as a single software engineer in a company (which I hope you do not, especially if you're just starting your career)
Supporting other developers
As a senior developer you will be considered the guardian of the fire camp, the watchman of the code... well, ok, let's just say that one of your responsibilities will be to ensure that the standards that are set in your team are kept, and you'll be teaching less experienced developers how to write code, test new features and how to approach problems.
While you might not be an official mentor of anyone in your team, other developers will be relying on your help, they'll be asking you for opinions, and they will take your suggestion into accounts. And you should know how to help other developers, so that you find the balance between telling them to Google and giving them all answers on a platter.
Be aware of it: supporting and teaching other developers is a skill. A skill that's worth developing.
Seeing big picture
- most of the code I wrote professionally was in products that still exist
- senior developers are core of the team, they usually hold a lot of knowledge about the software they build
- I rely on senior software developers when it comes to determining the impact of new code on the whole application
- you need to be able to look into the future, not only on the scope of the current code being written, but how it might look like in the future. See a few steps ahead
Finally! Did you expect me not to include it here? Well, I think it should go without saying, but let's make it clear: in order to be a senior developer you need to be able to write good code.
What is good code? Great question, I'll answer it in one of my future videos. For now let me just say that good code goes way, way beyond being correct. As a senior developer you will be holding others to certain standard and you should be an example to follow.
Do you need to know multiple programming languages? It would certainly help, but no, you can be good in one language and become a senior developer. Do you need to know internals of any language? Again, it might help, but you can do without it. (TBC)
Learning new things
Alright, a bonus skill that didn't make it to top5, but I think it's extremely important as well: learning new things. The ability to learn new things is also a skill. The ability to add new tools to your toolset, not only in terms of new programming languages or frameworks, but also in terms of certain patterns, solutions, approaches to solving problems — such ability will make you a very valuable and respected senior developer. I've worked with some people who refused to change their way of work, they refused to change the coding style that they had once learned and they believe it to be the best way, and it's never a great experience.