Most engineers aspire to be considered “senior”, the title being recognition of their career journey and the value they can add to a business. However, I find there are many misconceptions amongst engineers about what it really means to be senior. In this article I’m going to lay out my perspective on what it means to be a Senior Engineer.
Let’s start with their technical skills. A senior engineer is an “expert” in one or more technologies. I put the word expert in quotes, because it in itself is a vague word. By expert, I don’t mean that they know every last thing about a language, framework, etc; and I definitely don’t mean that they need to memorise syntax or the like. An expert understands the fundamental principles behind the tool and can apply them to use the tool in the optimal way. The expert may need to Google solutions and they will likely copy and paste code from StackOverflow like the rest of us, but they will be able to quickly understand the explanations found by mapping them to their knowledge of the technology ecosystem they work in.
The expert’s knowledge also goes deeper than a given tool or language, they understand the fundamental principles of the programming paradigms they work with, eg object oriented programming. They also understand the related protocols and systems they need to interact with, eg a senior web engineer understands how information is transmitted over the Internet.
The Software Development Lifecycle
Top engineers don’t just know how to write well structured code, they know how to solve problems throughout the entire SDLC:
- Analysis: they have the people skills required to proactively obtain business/technical knowledge and distill it into actionable points. They are not afraid to appear “stupid” by asking the seemingly obvious questions, they know that by doing this they are advancing everybody’s knowledge of the problem sphere. They make sure they understand as much as they can around the problem as they tackle it.
- Design: senior engineers can architect a viable solution to the problem taking all the relevant factors into consideration, such as: budget (upfront and ongoing), maintenance, timeline, technical requirements, uptime, scalability, SEO, performance, accessibility and security. They use their creativity to think of and research non-conventional solutions to the problem at hand (they know writing code isn’t always the answer).
- Implement: they build the solution whilst staying creative in the face of inevitable change. They maintain transparent communication with stakeholders as things change, they don’t leave people in the lurch by unexpectedly not delivering without prior communication.
- Test: they ensure they release code of high quality, using a combination of automated and manual testing strategies depending on what makes sense for the project. They understand the different types of testing (unit, functional, UI, integration, etc) and when to apply them. Even if they work with dedicated testers, they still understand testing and still strive to deliver high-quality code for the testers.
- Deploy: senior engineers know the feature is not complete until it is in production, up to that point things can change which add additional work or even make the feature obsolete. They do what they can to ensure their work makes it to production as quickly as possible, and they make sure things are setup to monitor that it’s working once it does.
Underlying the above are great problem solving skills, you can’t be a senior engineer without these. Solving problems in a great way means they (credit to Marc Backes for this list):
- stay efficient
- make sure not to introduce unnecessary sources of errors
- create as little friction with the existing system as possible
- think of the bigger picture
- have expandability/reusability in mind
- make decisions about potential trade-offs
In addition, great engineers understand the value of estimations as a tool for determining what is and is not possible for the given set of constraints. They use this tool to drive conversations with stakeholders. And of course, they have good communication skills (written and spoken) which they use to explain technical concepts and sell ideas, to both technical and non-technical people.
Finally, senior engineers can identify risks on their projects, they communicate them and drive them to mitigation. They are also team players, thinking about how to help their team mates grow into great engineers.
Senior engineers understand that their job is not to write code. I’ll say that again – an engineer’s job is not to write code. Their job is to solve problems. Writing code is often great way of doing this, but it’s not the only way. Sometimes there are more optimal solutions, such as purchase a plugin or SaaS solution, leverage open source or even just tweak an offline process.
Many engineers don’t realise this. They focus on code as the only solution, and they are doing themselves and their businesses an injustice. How many countless hours have been wasted building solutions that didn’t need to be built?