This article has been published 6 years ago. If you're into internet archeology, read it — but at your own risk. Honza doesn't have to necessarily agree with the content by now.
Today morning I opened Pyonieri (Pyoneers), the Slovak & Czech Python user group on Facebook. There has been a question about how many years one needs to become a senior software engineer. Reading the comments gave me an impression there is a great amount of confusion about what does it mean to be a senior engineer in the first place. I decided I'll write down my own thoughts on the topic.
Unlike some of the discussion participants, I don't understand the senior engineer label as something related to managerial skills. Managing people is different from writing code and teamwork. It is pretty common these days to explicitly classify people working in software development as either managers or individual contributors. Individual contributors have a separate career track from managers.
In case they get promoted, it doesn't mean they manage more people or that they manage people at all. They can, of course, but their main career objective is to become better in their field. A prominent example of a top-level IC would be an architect. I definitely think of senior engineers as ICs, not as managers.
I also don't think brilliant technical skills are enough for someone to be recognized as a senior engineer.
It's quite common to think about senior engineers as being on the opposite end of the scale which starts with junior engineers. How would you describe juniors? My understanding is those are team members with narrow technical skill set whose main goal is to grow into average engineers. How do they grow? They learn from the others in the team. In other words, they absorb knowledge.
In the same sense, an engineer can be senior only when they're emitting knowledge. Their main purpose is to let the team grow professionally. They dedicate time and effort to help others, to mentor, and to replicate their wisdom into the heads of their teammates. This sort of implies they also need to be humble, pragmatic, mature, egoless. They can't be assholes. Although seniors are not managers, they should be great team players.
Skills and knowledge are not the same thing as experience. No matter how many engineering books you've been reading and how much theory you can say from the top of your head, your skills mature by application in the real world. Senior engineer's abilities are battle-tested, not freshly learned. That's why people like to learn from them and why their opinions are respected.
Observing age or years spent in the field usually doesn't make any sense. One can easily spend 20 years in the field and not to be a senior engineer. How does the time relate to whether they learned something? Whether they tried to apply what they had learned? Whether they're able to make the rest of the team grow? Whether they're not assholes? It does not.
And this concludes my answer to the person asking the question in the Facebook group. It's not possible to calculate how many years it takes to become a senior engineer. You need to learn a lot, apply a lot, and to be of some use to others in your team.
In my opinion, one starts to be a senior once their career goal changes from having great skill set to sharing my great skill set with others. And while observing age really is silly and unfair, I have to admit I'm yet to meet real seniors who are younger than, let's say, close to 40.
The best among senior engineers share their skills not only with their team, but they help the whole community of their field to develop professionally. They dedicate time to share their knowledge in articles, at conferences, etc.
Real seniors don't know everything. However, they know enough to minimize their learning time. They learn incrementally and are able to recognize general patterns. They've seen things, so they won't get surprised by a new architectural style or a new programming language.
In the realm of CVs and hiring, the senior engineer label is really devalued. Basically anyone who is beyond intermediate level of programming considers themselves to be a senior engineer these days. And I have to admit I wasn't any different. However, later in my career I had an opportunity to learn from some real senior engineers and it was very easy to spot the differences. Today, although I'm trying to behave like one, I'd be very cautious about calling myself a senior.
Why so? Well, I think the easiest way to recognize whether you are a senior engineer or not is probably this one: If you need to say to your team you're a senior engineer, then you're not ;-)