What makes a person a Senior Software Engineer? Is it their technical knowledge? The amount of languages, libraries or development techniques they know? Or maybe it's just an indicator of the number of years experience they have?
In so many cases, you become a Senior engineer through a combination of these reasons. The best "Senior" engineers I've worked with have got there because of their attitude and not their aptitude.
Having the technical knowledge is, of course, important. But it might not play as big a part in your career as you think. I want to work with smart people who have a great depth of technical knowledge. Smart people come up with great (simple) solutions to complex problems. Yet what sets the great engineers apart from the world-class is the way they apply their knowledge.
The best engineers display a sense of maturity when working with others. And these are the people I want to work with. If people want to work with you, you'll do well in your career.
People will want to work with you because of your attitude. Or to be precise, because of the way they perceive your attitude.
Mature engineers recognise that they have skills and knowledge that others don't. They spend time teaching others these skills. They think about the bus-factor impact to the team. Less mature engineers use this specialist knowledge to maintain a niche for themselves.
The way they pass on information also signals an engineers maturity. The best recognise that they were a beginner once and are forgiving of the mistakes made by the student.
Mature engineers recognise that they are also fallible. They recognise that the code they write is open to criticism from all. The way they react also shows their maturity. It can be hard to take criticism from others and mature engineers will take the feedback and use it to improve the solution.
Giving feedback is also a skill. Mature engineers focus on critiquing the code and not the person who wrote it. Having empathy for another persons context and environment can help explain things you see in the code. Once you understand the context, you can also get to a better solution. Knowing that one-size doesn't fit all is also a key trait of mature engineers.
The best engineers also focus on the solution to the problems, rather than the problem itself. They apply this principle when they find mistakes, focussing on the fix rather than revelling in the problem.
And this doesn't just apply to code. If there are problems with the environment or team, a mature engineer will suggest things to try to improve the situation.
In most corporate environments, this can sometimes means dealing with political situations. Learning to manage relationships across the business is a skill that mature engineers develop. They do this by paying attention to their audience and tailoring their language to suit.
A lot of this comes down to understanding the affect that the language used has on an individual or group. What you say, is not the same thing that the person hears. Understanding another persons filter and the impact this has on your message is key to gaining their respect. This is particularly true when having difficult conversations or when in conflict.
I'm not the only one that believes that your attitude is important if you want to become a respected individual contributor.
"On being a senior engineer" by John Allspaw describes in more details some of the attributes of mature engineers. This blog post promoted me to reflect on my understanding of senior engineers. And in turn to write his post.
In John's piece, he describes attributes of mature engineers, and the impact they have on an organisation. He includes the "10 Commandments of Egoless Programming" from Jerry Weinberg's book The Psychology of Computer Programming. This short, punchy list is a great place to start for anyone aiming to be a senior or mature engineer. I haven't read the book yet, but I've added it to my list.
So, take care with the way you act. Don't be the elusive coder in the corner, and drop the ego. Becoming a senior engineer is more than knowing the technical side. You need to understand that the most effective engineers know how to work with people. If you can achieve this, then people will want to work with you. And if you can do this, then you're well on your way to becoming a Senior Engineer.