There's been some fuss at /r/programming about a post by a developer with 2 years of experience claiming to be a senior, and evangelizing others on what they need to do to be like him.
Needless to say, the post blew up, and mods had to delete it.
Now I don't mean to bash the original author, he has all the right in the world to do/think whatever he wants with his title. But it does fire up an interesting topic I've been wanting to write for some time now.
That seems to be the most common question new developers ask when they want to reach senior status.
The answer is... it's not that simple. Not only the things you need to know are many and vary from place to place, but quality also matters.
Let's take martial arts as an example. As you might know, many different martial arts give you different colored belts as you progress in their system.
For the sake of analogy, let's say black belt is considered Senior.
Now, different systems have different ways of grading. Just like different companies have different ways of giving titles around.
Some places give the student an exam every fixed amount of time, like 3 months. If they pass, they advance one step. Others have longer periods of time. And others don't even have a fixed amount of time, when the instructor thinks you are ready, he gives you the belt.
The gist of it is, it's totally subjective, it depends on the context.
Some systems just want to earn money — they are called McDojos. In those systems, it makes total sense to have frequent exams, where you pass as long as you pay.
Other systems, like Brazilian Jiu-Jitsu, are more informal. At most of those places, the instructor just gives you the belt when he thinks you are ready. Maybe after competing, or maybe he just decides to test you that day.
BJJ cares about the quality and transmission of their art. So it makes sense that it takes lots of years to get the black belt. Sometimes it takes 6, sometimes 10, sometimes it never comes. It depends on the person.
Just like that, some companies will give you a title and keep you happy. It works for them, they want you to be happy, and to continue working for them. Evangelize about how great they are, etc. It also gives you a feeling of growth. And you surely did grow! But what some places consider black belt, others might consider white. It totally depends on the particular company.
At the end of the day, it's just a title. There's the infamous case of Eddie Bravo. Being a brown belt, he submitted and won in a competition against Royler Gracie, a black belt, and not just any black belt, a direct relative of the founders of the art (needless to say he got the black belt after that match).
Words associate a sound, or group of letters, to a particular meaning. But sometimes we miss the word for the actual thing.
What's in a name? That which we call a rose
By any other name would smell as sweet
— William Shakespeare
Don't get too stuck up in names. What someone means by senior others might now as architect, semi-senior, or whatever funny name companies can come up with.
I know. Senior jobs pay more than junior jobs. Also, you have more chance at being hired if you are senior. So you want that title.
In my opinion, everyone that has had worked on a tech job for a few years can already submit their CV to other companies as Senior. It's up to the other company to really know where you are at.
If they have competent people, no matter what your title is, they will know where you are at, and whether or not you are a good fit for their team, technically speaking.
If they don't have competent people, well... the hiring process gets more random. They might hire you because they like your face, or your gender, or some project you did/participated on.
Some people like being a jack of all trades, and they certainly have their place. Others, prefer specialization, and they surely have a place too. Someone good at what they do, whatever it is, will always be precious to any team.
This might be a controversial opinion, but let me tell you this: Someone who does something because they enjoy it, will always be much better at what they do that someone who does it just for the money.
Now, you can do both, of course. Who doesn't like money, right? But if you don't have passion for what you do, you are doing something wrong. You only have one life, better spend it doing something you like!
The good news is, if you enjoy what you do, you don't have to worry about anything! All knowledge will come on it's own. With time, with your own inspiration and desire to know and learn.
That's why I hate those "X THINGS YOU NEED TO KNOW TO BECOME SENIOR" posts. Besides being clickbaity, they totally miss the point.
I think a more realistic definition would be: A senior developer is not someone who knows everything, but someone who can solve any problem they throw at them.
But again, remember those are just words :) What do you think is a good definition?