Next year I'll be celebrating twenty years as a software professional. I've had the good fortune to work in a variety of industries within the public and private sectors.
Over the years I've met wonderful people who have shown me what true professionalism in the software industry actually looks like. Most of them aren't rock-star conference speakers or book authors, but quietly confident and experienced people who have learned the hard way.
Perhaps the most rewarding part of my career has been mentoring less experienced developers and watching them grow into mentors themselves. In nearly every case they were enthusiastic programmers when we agreed to a mentoring partnership. Almost without exception they asked me what being a senior engineer actually means and how they might get there. My answers have nearly always surprised them.
By way of a personal reflection I thought I'd summarise my thoughts on the attributes of a senior engineer.
Senior Engineers Have Empathy
Most technical work is fundamentally influenced by human factors. In commercial organisations with projects or product development there are a wide variety of stakeholders, each with their own perspective and set of interests. People hold a unique and valuable set of human and personal experiences.
Senior or mature engineers take these factors into consideration. Empathy in this situation means being able to view situations from the perspective of others and to take that into account in your work.
Experienced Engineers Are Aware Of Biases
Mature engineers sometimes develop a level of self-awareness of the cognitive biases that they have.
Understanding how one is perceived by others is an important quality, both for the wellbeing of those around you and the development of your own career.
Mature Engineers Invest in Others
Mature engineers recognise that their contribution is only part of a wider whole. They understand that raising the potential of their colleagues is valuable in a different way to the work they usually perform.
Sharing knowledge and experience is a fundamental opportunity for everyone. Developing the effectiveness of the team is often more important than an increase in general productivity.
Experienced Engineers Operate From Principles
Starting out as an engineer can seem like an intense and exciting journey learning the latest languages, technologies, tools and practices. Over the course of an engineer's career the solution space tends to give way to a greater appreciation for the value of understanding the problem space.
Mature engineers understand the core patterns and principles that guide their approach to solving problems with technology. For example, they understand that code is fundamentally a liability until it is being used and providing feedback. Principles like this guide their approach and practices.
Senior Engineers Grow Rather Than Build
In the early days of computing there was very little by way of a comparison with other industries. Analogies with construction or industrial engineering seemed logical and across the world the comparison pervades to this day. The perception is that products can be constructed and then left with little or no maintenance.
Experienced engineers understand that software products and technologies grow over time just like people do. In the early toddler years the emphasis is on learning and discovery. As time goes on other concerns associated with repeatability, consistency and reliability become more important. Finally, improving efficiency and reducing costs have a greater priority.
Mature Engineers Have Learned How To Learn
Faced with dozens of frameworks, different practices, technologies and development approaches, where do you start? There are thousands of engineering books, video learning and training courses on every conceivable topic.
Most experienced engineers have learned how to learn based on need. Given limited and precious time, what you learn needs to be prioritised. Understanding how little or how much to invest in learning a particular topic is a hugely important skill.
Always Improving
Nearly twenty years on I'm still developing myself as an engineer. Perhaps one of the most important qualities of an experienced engineer is humility and the offer to share that experience.
Engineering is not a well defined profession like many others are with understood levels of accomplishment and governing bodies. In an environment where few people have parents who worked in the field, the principles, practices, technologies and platforms with which we operate are themselves being grown. It is important that we continue to share our combined experience. I'm looking forward to the next twenty years.
Top comments (11)
Great post! I LOVE all of these points! Especially
A lot of younger devs I think look at Senior Engineers and think the only way to get there is to become some crazy coding rockstar. In reality, yes you have to be good at coding, but that is really only half of the battle.
Thank you. I’m glad you like the post and I hope it’s helpful.
Mentoring is definitely a learning opportunity for everyone involved.
Eleven years behind you, but you've just thoroughly shattered my imposter syndrome for the day. I opened this article thinking "awesome, what can I do to move to the 'senior' level in the broader sense of the term," and walked away realizing I'm already there in many ways!
Of course, I know I will always be more experienced in the next year compared to the previous one, but I no longer feel that recent nagging feeling to go learn a bunch of trendy stuff to be "legit". It's weird I'd even have that feeling, since I've spent the past six years telling other developers that there's no factual legitimacy to that feeling...but there it is.
I will still keep on learning, chipping away at my list of things to master this year, but I now feel a lot more legitimate as a developer!
That’s great to hear. I’m glad you recognise yourself in these words.
Mature engineers become accomplished at identifying the technologies they don’t need to learn and the code they don’t need to write.
Wholeheartedly agree with your post - and I count myself fortunate to have been part of a development organisation where the attributes and attitudes you note were valued and promoted.
I've observed a few of the "10x engineer" in action - and a lot of the time it really isn't pretty. I've also had the good fortune to hang out with and learn from some people who are actually brilliant who could not only code around the 10x engineer in their sleep, but who were also really nice to everybody at every level, and built everybody up. Walking into a room and being greeted by a huge smile from one of those people and a hearty "Hey, it's James!" when I was still a very junior member of the organisation was amazing.
I try to be the person who says "Today's your lucky day" in xkcd.com/1053/ - I've been inspired by those senior engineers and I want to pay it forward.
Great insights, Danial. Thanks for putting pen to paper.
This is a great post. Empathy is so important. All of these points are important.
Thanks for your sharing!
As someone very early in their career, I'm glad to read there's always a strong element of active learning. Great post!
Great great post!
nice post. keep learning, keep going