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.
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.
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 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.
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.
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.
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.
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.