From Senior Engineer to Mature Engineer
When I was fresh out of college with a Computer Science degree, I had a culture-fueled fantasy of what it was to grow into a senior software engineer. Like the mythical 10x programmers, I dreamed of having full workings of a computer at my fingertips and able to hack like the best of them.
As I progressed in my career I learned that being a senior engineer wasn’t just about the breadth and depth of technical knowledge you had. It is much more nuanced and interpersonal. It is about being a mature engineer.
What is a mature engineer? These are just three (out of many) non-technical skills that I think are essential for any engineer looking to develop their maturity:
So much about software engineering is about people. The clients or end users who you are developing features for, your coworkers that you are working with to try and solve problems, future developers who have to look at and maintain your code (which might include a future version of you). Unless you are working at home solo on a project no one but yourself will see or use, you will be required to interact and communicate with other people. Whether it’s verbal, written, or even non-verbal, communication is essential to working with others, and requires the development of skills such as active listening, trust, and being able to clearly articulate thoughts and vision.
At the foundation of communication is the practice of empathy. I have noticed that engineers tend to look at themselves as completely rational and objective beings, but in reality we are all emotional creatures. We have emotional reactions to work that we are invested in, and in turn others will also have emotional reactions. Having an understanding of the feelings and experiences of others and yourself allows you to navigate tough situations towards positive and proactive ends. It is really easy to develop an “us vs. them” attitude when things get tough (I’ve been there many times myself), but having an empathic understanding of where the “them” (client, qa engineer, other developer) is coming from not only alleviate tension on both sides, but can also lead to a deeper understanding of the issue and more creative solutions.
Again this skill is about people (notice a theme?). The best and most successful software engineering projects are executed by a team, not by a solitary engineer operating in a silo. And a spirit of helpfulness on the part of senior engineers , a spirit of teaching, knowledge sharing, collaboration, and patience not only makes projects more successful but also creates stronger and more talented teams. A helpful engineer proposes solutions to problems, with a strong understanding of others views (guided by empathy), rather than getting stuck on empty complaints. And finally a helpful engineer is proactive, communicating early and often about risks and solutions.
These are just a few of the many characteristics of a mature engineer. For a much more comprehensive and in-depth look into engineering maturity, I highly recommend reading John Allspaw’s "On Being a Senior Engineer".