Becoming a Senior Engineer
9 min readDisclaimer. This post is based on frequent discussions with many of my friends and acquaintances who work in IT/Software Engineering, in a lot of different places, like outsourcing companies, product companies, big organizations with established processes, and small ones where chaos reigns.
Anyway, based on all this tribal wisdom, anecdotes, and my own experience and observations, there are four base properties/skills/traits which are a sure-fire way to grow into a senior/leadership position at your organization.
The four axes
Depending on the organization, a mix of these four traits is necessary to take the mantle of a “senior engineer”.
-
Business acumen - You know how stuff works in your organization. You know the processes, the people, and the relations among all. You understand the vision and priorities of your company. You also have a rough idea of the company’s risk tolerance, budget, and context in which it operates. You know why certain things are done the way they are.
-
Communication skills - You explain your thoughts crystal clear. And I can’t stress this enough! If you can’t explain your thoughts in a clear, accessible way, you will impede not only your career prospects but others’ productivity too. The better you talk and write, be better everyone will understand what needs to be done, or how to fix things, or what is the roadmap, or… you got the idea. Besides, the more senior you get, and the bigger the organization you have to work in, the more you’ll have to write and communicate with people. Especially now with all the work done remotely, you need clear writing like never before. Chats, emails, JIRA tickets, code reviews, meeting notes, post-mortems; this list can go on forever. Another subskill deserving a place here would be explaining technical stuff to non-technical people. This is especially important when you have to deal with non-technical stakeholders of your projects. They very much appreciate the effort you will put to explain to them what’s going on without much technical jargon. Imagine if nuclear physicists would explain what are they doing using their jargon. You won’t understand a thing. Been there, done that. So be empathetic, and talk to people in a way they can understand.
-
Being a force multiplier - You have good coaching/mentorship skills. You also always think of ways to enable people to do a better job. Maybe by creating a script to automate something, or by creating a shared document explicitly telling how some process is done and why, or just being a knowledgeable and pleasant colleague to discuss issues and ideas with.
-
Superior hard skills - You are one of the most knowledgeable people in your organization/community on some technology/practice/domain. You have superior skills, and for that, you are respected. Part of this is superior debugging skills. More often than we’d like, we have to fix code that’s not working. The quicker this can be done, the more time is left for feature development, which is so important for the business. You think beyond just lines of code and understand the architecture and the tradeoffs which lie at its foundations. You understand that sometimes DRY is not a good idea, where you should apply design patterns, and where it’s ok not to. Also, good coding skills are infectious. People will see your beautiful code and will want to do the same. In a way, you’ll be a force multiplier, by influencing others to write better code, which in turn will make the codebase a nicer environment.
The A potential path to senior positions
Let’s say you were hired as a software engineer, maybe even a junior one. You aspire to become a senior. What do you do?
- Learn your project.
- Learn why your project is important. Who are its users? What’s the roadmap? How does it make/save money?
- Learn more nuanced technical skills. Maybe read a few books. Iterate on this.
- Spot inefficiencies in your team’s processes, try to ease these through explicit processes, helper tools, or any other way. Iterate on this.
- Make friends with colleagues outside your team, maybe even outside your business function.
Do all these, and you will certainly be allowed to lead some projects or initiatives.
A warning note
Everything that is in excess becomes harmful. Depending on the organizational culture of your employer, being overly interested in the hows and whys of the business might seem nosy. And if your intentions are perceived this way, you might damage your reputation, instead of growing it. The same goes for strong initiatives to help your colleagues or the business. This one is more nuanced. It might be (usually) that your manager or colleagues are not unpleasand, counterproductive, or trying to dismiss your genius, they just know that some stuff has been tried already, or the current prerogatives do not leave space for such initiatives. Remember to be respectful, not very annoying, and if all else fails, start searching for another job.
Some misc skills you’ll also need
I would argue the four traits above are crucial to becoming a senior engineer in any organization. But I’d also like to include the following 3 skills too. Let’s label them as very good to have.
- Attention to details. Sloppy-done tasks have a big hit on your karma. Depending on your place of employment, this could range from writing code that works well without immediately visible issues, and writing high-quality code, with good tests and without breaking the CI.
- Humility. You know, don’t be an unpleasand, counterproductive, or trying to dismiss others person. If no one wants to work with you, you will either be put on the worst projects in your company or straight fired from there. Note, don’t confuse humility with low self-esteem.
- A growth mindset. If you learned something to land a job and once there, decide to sit still on your ass, I’m afraid your only chance to become senior is by having the rest of your colleagues being hit by a bus. Stagnation should never be an option.
Of course, there are always exceptions, people who hold senior or technical leadership positions without these skills, but they are that - exceptions. So, it’s better to also be humble, attentive, and with a growth mindset than not to be.
Some edge cases
-
Senior engineer is the one who stayed the most with the company. This distills down to business acumen. She/he knows how things are done in the organization, and knows the codebase very well. Some communication and hard skills are also necessary. This path is prone to the “old junior” problem. “Old juniors” are a case you wouldn’t want to be in. It happens when someone stays with a company/product for too long without substantially growing their skills, but only acquiring business acumen. People in this situation remain stuck in their companies because of a growing chasm between their title and their actual skills.
-
Team leads. They usually are strong on Communication skills/being a force multiplier, and most are pretty good on the hard skills side too, but YMMV. A good team leader is an important asset for any organization, they are like Great Generals for their teams.
-
An outsider is hired as a senior/lead right away. This does happen, and is more common in smaller organizations, in freshly established departments, or in new and specialized teams. Such people are almost always strong in hard skills and usually in communication skills. Occasionally, they may have very good business acumen because they have worked in similar industries before.
Remember, you need a mix of these. Having only hard skills won’t cut it. You’ll be just a very good software engineer. Nor will just business acumen help you, it will just turn you into a mediocre manager in the best-case scenario, or the terror of the engineering team in the worst case. And if you’re only good at being a force multiplier? Have you heard about the Scrum master position?
Takeaways
- Ask questions about the business/product. Show interest in how things are done within your organization.
- Level up your communication skill and help your team. Technical writing, working on enabling tasks, and mentorship are some of the most important. You can level these up by volunteering to document some nasty parts of the codebase, describing internal processes, and working on/proposing tools to increase the productivity of your team. Mentorship skills can be acquired by either asking to be the mentor for new hires, or you can try teaching outside of work, CoderDojo-like organizations being probably the best at this.
- Learn hard skills. Read books. Work on pet projects, to crystalize the knowledge you got from reading. Being part of a specialized community will also help you grow your hard skills, by learning advanced concepts you won’t find by just googling, because you wouldn’t even know what to google. Reddit is pretty good at this, sometimes. Also, slack/gitter/discord groups, interested in specific technology are good too. If you use it right, Twitter and YouTube are also excellent channels for this.
By the way, notice that throughout the whole post, there was no mention of years of experience. Of course, some of the traits outlined above correlate with years of experience, but the correlation is not perfect, meaning you could have 10 YoE and still be not as good as someone with 4 YoE. So focus on skills, not on mileage.
Before I go
Maybe someone will find this news, but being a Senior is not the end of the road. Of course, many know about the “move into management” path. But there’s another way. Becoming a Staff software engineer. How? I don’t know, yet. When I will, I’ll certainly write another blog post. Until then, I’ll leave you with this Reddit thread and this book.
A little disclaimer
These posts were almost done since February, but due to the tragic events unfolding in Ukraine, I thought it wouldn’t be nice, to say the least, to post it back then. In Moldova, there’s a saying “Satu’ arde da baba sî chiaptănă” which translates to something like “The (unreasonable) old lady is grooming while the whole village burns”. I didn’t want to be that lady, so I thought it would be better to wait until things become at least somewhat less chaotic.
#Слава Україні! #Героям слава!