As a senior software engineer at a large growing tech company, I have the privilege of helping interview many other software engineers who apply to come work with me. Throughout the last year, I participated in about 50 interviews for positions ranging from mid-level software engineer to senior software engineer to engineering manager.
This experience has given me time to reflect on the qualities and skill sets that I value in other senior software engineers, and as a result, I try to craft my interview questions in such a way that I can hopefully get a glimpse into these attributes during the brief time I have with each candidate.
So, without further ado, here are the things I look for when hiring senior software engineers.
1. Ability to communicate clearly with technical and non-technical people
This is important for two reasons. First, as a senior software engineer, you'll serve as a mentor to junior and mid-level engineers. Other engineers will often come to you with questions, and you'll need to be able to explain technical concepts to them in simple terms. When you give code review feedback, you'll need to explain clearly why a piece of code is not ideal the way it currently is written and how it can be improved.
Second, as a senior software engineer, you'll often lead through indirect influence. You aren't managing anyone directly, but you do need to be able to spread your ideas throughout the organization and rally people to join you in your cause for clean code, higher engineering standards, or whatever it may be. If you can't communicate your ideas effectively, you'll have a hard time convincing others that your ideas are worth their time.
2. Attention to detail
This quality comes in many forms. You'll often see it in an engineer's own code as well as in their code reviews when looking at other people's code.
Engineers with strong attention to detail are sure to check and double check their work before submitting it to others for review. They write meaningful commit messages. They clearly name their variables and functions. They are lovers of clean code.
It's important to note that senior software engineers are not infallible. They still make mistakes. The key though is that most of the time they catch these simple mistakes on their own so that others don't have to do it for them.
These practices and habits extend to their interactions with other engineers during code reviews as the senior software engineer seeks to lift his coworkers in helping them write cleaner code as well.
3. Emotional intelligence and maturity
A senior software engineer needs to understand that they are not their code. You must take your ego out of any argument or discussion. Understand that criticism of the code is not criticism of the person.
Senior software engineers need to be able to have hard conversations with other people whether it be about code quality, job performance, or managing expectations regarding project timelines.
At the same time, senior software engineers need to understand how their words and actions affect other people. Emotional intelligence includes not just a self-awareness but also an awareness of those around you. Senior software engineers should know how to constructively provide feedback in a way that uplifts and inspires, not degrades and demoralizes.
4. Humility
Senior software engineers do not know everything. Nor should they! The field of engineering is far too massive for any one person to master it all.
A good senior software engineer understands this fact and is comfortable with it. You don't need to know everything, but you should be able to recognize when you don't know something, when to ask for help, and how to find answers to questions on your own.
This understanding leads to humility. There is no room for ego in the software engineering world. You should never feel like you are indispensable or that you are the only one who can adequately perform your job duties. The team and the company will go on without you if and when you move on.
5. High standards for engineering excellence
Senior software engineers set a high bar, both for themselves and for those they work with. They use effective tools like code formatters and code linters to enforce standards and coding styles. They understand the importance of tests and don't allow untested code to be merged into the master branch. They configure CI/CD pipelines to automate the tedious part of code reviews and to ensure that the master branch is always kept in a working state.
Senior software engineers view programming as a craft, not just a job. They are proud of their work.
6. Expert in their domain
Senior software engineers have advanced to this level for a reason: they are good at their job. This means knowing their tech stack or language of choice at more than just a superficial level. Their expertise is T-shaped - deep knowledge in a few areas and a breadth of experience in many other areas.
They gain this expertise through years of tackling hard problems, volunteering for tough projects, accepting stretch assignments, and learning from those around them.
Senior software engineers take advantage of the wealth of experience available to them by reading classic programming books like Clean Code, Refactoring, The Pragmatic Programmer, or Design Patterns. In doing so, they vicariously learn lessons from domain experts who have spent decades perfecting their craft.
7. Passion for learning
Senior software engineers are excited about their job. They're interested in new things. They're always exploring new ideas through reading articles, watching videos, building proof of concept apps, or maybe even writing and producing content.
In short, they're not stagnating in their career, and it shows.
Conclusion
Hard skills are important, and a senior software engineer needs to know their stuff. They are expected to be experts in their field, or at least in a subset of a few key areas.
However, as important as hard skills are, I've often found that soft skills end up being just as important, if not more so.
In summary, here is the list of qualities I look for and value in other senior software engineers:
- Ability to communicate clearly with technical and non-technical people
- Attention to detail
- Emotional intelligence and maturity
- Humility
- High standards for engineering excellence
- Expert in their domain
- Passion for learning
I hope this helps, and thanks for reading!