I have seen many developers get frustrated from hearing that they are not "senior" that many question the overall meaning of the work. Many are dejected from the feeling of a chicken and egg problem. They need experience to get the job, but they need the job to gain experience. Having been asked many times, I wanted to shed light on how I evaluate a developer.
First: A Warning
There are many warnings can be said about this blog post. The topic of Junior versus Senior is a sticky topic (it's literally the reason why a promotion happens or not).
Warning #1: Standards vary organization to organization
All of my guidance is based on my experience at the various companies that I have worked with. Levels of career development differ company to company. I try to generalize statements to a common theme to help show application in whatever company. In addition, some companies have a flat structure where everyone is a software engineer with perhaps some super senior people reaching a fancier title.
Warning #2: Definition of promotions can be superficial.
More often than not, a company will define a title change to be dependent on ability and an empty spot for you to take. The latter is quite disheartening because it is difficult to hear that you are doing great work, but you cannot move up because of a technicality. In general, this is a bad organizational structure.
Being a senior software engineer means that you have the experience and know-how to accomplish tasks at a higher caliber. Most people associate Senior Software engineers with lots of years working at a company, but in reality, it can mean many things. Many people can display the know-how of a software engineer without the experience. In reality, the converse is more important than a hard number. That is, if you have no experience, you are most certainly not a software engineer.
If you are looking for a rule (yay to my fans of structure), I'd say a minimum of 2 years working for one company before even considering the idea of being senior. The more experience you have, the less you can rely on the other criteria to be senior. If you tend to jump companies, it is probably closer to 3 years. Experience within a single company tends to be valued more because there is more data to show your capability.
The Differences You Would See
With all the caveats above, I believe you would see often these key differences between a junior and a senior engineer.
1. Asking the right questions
Saying a senior engineer does not ask questions is a ridiculous statement. Senior engineers ask a lot of questions and especially in times where they are entering a new territory. Senior engineers, however, are asking the questions that moves themselves forward to solving a problem. When given a task, especially one as open-ended (see number 2), senior software engineers take the time to themselves investigating the code, ask poignant questions and move forward.
2. Handling Ambiguity
Whenever you start a new job, a team will always give you "easier" tasks to familiarize yourself with the code, team, and process. A senior engineer moves away from those quickly in favor of taking on bigger projects that lack clear goals. Their job is to take something fuzzy such as a product manager's description, and form clear goals, tasks, plans, and timelines to get to the finish line. Really good engineers can do this fast and always meet or beat their goals. Interestingly, a Senior Software Engineer ends ups spending less time programming and more time learning, crafting, and presenting their ideas to the problem. Junior engineers usually need to ask for help early and often at tinier details to get to the end. Given ambiguity, Junior engineers can appear lost, confused, or concerned. The analogy is swimming out of a whirlpool. With time, energy, and grit, they can swim themselves out, but they can get closer to the finish line with the help from someone more experienced. Unfortunately, most startups and businesses need time as an advantage, which explains why they tend to require senior engineers.
3. Building Confidence (with experience to back it up)
A senior engineer brings confidence in their work and abilities. Sometimes, that confidence is inflated, but in reality, the confidence is backed with experience to illustrate the picture they perceive. When you become an engineer, we will focus on building a case to evaluate yourself on your strengths and weaknesses. With a track record of accomplishments, a leadership team has more confidence to be able to meet their goals.
4. Practicing Between Good and Good Enough
Engineers spend a lot of time working to build the best and highest quality software, but they end up struggling with tradeoffs, time-constraints, and stall in the death march to delivery. Senior engineers have hit this multiple times and have made the tradeoffs and either succeeded otherwise or bombed. They then focus on what makes the software "good enough" (as much as people hate to hear those words, it's a daily practice, so we need to get over our desire for perfection). Junior engineers tend to fall into two categories: those who spend unneeded hours sweating details to the delay of their delivery or those who ship really bad code (please do not be in this bucket).
5. They change the culture heavily
I actually consider senior engineers, more often than not, an addition to the team that can impact the integrity of the team culture either positively or negatively. Finding someone who aligns in the vision and values of the company is difficult. Senior engineers use their experience to change how team processes work, how code gets reviewed, and how team dynamics play out. Work can become a place where either senior engineers thrive in the culture, drive others out because of their culture, or get driven out because of the resilience of culture. In either case, a company takes a big bet to have someone come in and bring their experience to the mix of what the company culture has been building.
Where do you fall on the spectrum?
As you look at the criteria above and evaluate yourself, please keep in mind that it is hard to really articulate where you are in comparison to where your manager and peers feel where you are. I gave the warnings above: a company can have any system and promotions can appear arbitrary. These warnings should not discourage you on your progress but empower you to focus on writing down what makes you successful. As an exercise, take a look at the above differences and tell a story where you feel you fell into the senior level bucket. These stories form the case for your promotion and begin to compose a narrative of your values and accomplishments.