Senior (or Not) Software Engineer — Where is the line?

I have recently talked to a friend of mine who had just gotten rejected for a job interview earlier that day. He mentioned that the company disqualified him because he was not as “senior” as he said in his resume. He was only working for 3 years as a software engineer. So where is the line where a software engineer can call him/herself a senior?

I think the answer to that question is very personal and there is no hard-and-fast rule to determine who is “qualified” as a senior engineer. Generally, the industry thinks the senior title is up to the company / organization. “You are what you say you are. And we’ll test you to make sure” — is the common way companies deal with hiring senior engineers as I observed. I think I’m not the only one who wish for this title to be regulated.

Personally, I am confident that I can efficiently solve any software project you throw at me — some will take more time than others; but I don’t think I’m a senior engineer yet (with 7 year experience as a software engineer.) From my observation, the engineers that I was fortunate to work with in the past and at the current projects have some common unmistakable characteristics which set them apart from the rest.

They are knowledgable about their craft

Senior engineers have accumulated their knowledge throughout the years they worked in the industry. Because they are learners, they are quick at thinking of a solution for problems.

They are mature

Senior engineers won’t dive head first to a problem right away but analyze different ways to attack from various angles. Not all, but most usually published a book in their field or contributed heavily in open source projects.

They have great attitude

They won’t know everything technical you ask, but their great attitude of communication, learning, adapting and problem solving always help them to find the solutions. They are willing to learn, even from the juniors. They are confident but not arrogant. While they love to mentor junior engineers and share their knowledge, they have respect to other team mates. They are opinionated about the product, the architect, structure and team work, etc…

They respect and care about their craft

As a result, they all have great sense of detecting code smell, bad indentation, inconsistency in the code, laziness (no tests, etc…), inefficiency (YAGNI, yak shaving…) and they would point them out right away to more junior engineers in code review sessions or via chat. Even though some are more protective of their code, but most are not shy to show that they don’t know something — this is, to me, one of the big signs that sets a senior engineer apart.

They are flexible but persistent

Another thing that I respect from all of the senior engineers I worked with is that even though they are persistent at one problem and not easy to give up, they know when to stop at one approach when things are getting too hacky or taking too long. Some junior engineers I worked with are easy to say “I can’t do this” or they would dive head first and go at it with only one approach then get stuck for days without even thinking of stepping back to find other solutions.

In my humble opinion, a senior software engineer is an experienced engineer who doesn’t necessarily know everything; but with a great attitude of problem solving, communication and knowledge, s/he makes things happen with elegant and simple code (and tests.)

Well, that’s my personal take on where the line is between a senior software engineer and the rest. What are your thoughts on this? I’d love to hear. Please comment below to share it with me and everyone else who is interested in this topic.