On Becoming a Senior Engineer

In this section, we look at what an engineer "Burak Karakan" thinks are the key attributes of a senior engineer, as well as what doesn't define one.

📚 Source: https://burakkarakan.com/blog/on-seniority-in-software-engineering/​

On what doesn't make a senior engineer

There may be multiple things to mention as pitfalls to understand if the subject individual is senior or not in a broad sense, but there is a common theme I see companies and teams fall into, and some of the characteristics of those mistakes seem important to discuss here.

Strong technical skills are important, but not everything. I believe this is such a common misconception in growing companies that everyone that can develop some features starts calling themselves “senior engineers”, which damages the “senior engineer” image of the company in the employees’ eyes. An experienced engineer may be able to develop a lot of software, but that shouldn’t bring seniority automatically as that doesn’t imply that the individual understands about business, can motivate self and the ones around or can be relied upon. Overall, if I were to list traits of a senior engineer, technical skills wouldn’t be in the top 3 on that list.

Working in a company for a long time doesn’t automatically bring seniority. An engineer working for a company for 5 years might be the most senior employee of the company when it comes to time spent in the company, but that doesn’t automatically make that person a senior engineer in the sense of being senior no matter what company or environment we are talking about. Being a long-time employee has its advantages for sure, but that doesn’t imply that this person has all the traits of a senior engineer, it just implies that the person is either happy in the company or very patient.

Working in the industry for a long time doesn’t automatically bring seniority either. Just like the company version of the same case, it doesn’t imply that the subject individual is senior because he/she spent X years in the industry. One might spend 10 years just doing repetitive stuff or not thinking about the job in detail, which would disqualify them from the idea of seniority.

On what makes a senior engineer

A senior engineer should be able to communicate clearly. I think this is one of the most important traits that define a senior engineer; ideas matter only if one can communicate them clearly to other individuals. No matter how good of an engineer one is, if that person cannot explain what he/she is doing or cannot communicate various ideas with technical and non-technical people clearly, then all the technical skill becomes nothing. Technology is there to bring value, and bringing value is more often than not a team game, which means if you want to deliver value, you have to communicate well. There is always this myth of a geek that is not able to communicate with other people and creeps people out and regarded as a super-duper engineer; I believe that no one would like to work with someone in their team that cannot talk/stand to other people and explain his/her ideas. Good communication is key, a senior engineer needs to be able to communicate with engineers, managers, and customers clearly and efficiently so that he/she can keep building value.

A senior engineer should understand the tech-business relationship. Software engineers are trying to build value for people in different areas, and it is very common for inexperienced engineers to fall into the trap of thinking only about the tech and not caring about the value implications of it at the end. The software can be a for-profit product, a hospital system, a non-profit application, a public transportation system, it can be anything; business here means the value produced at the end. Technology is important, that is correct, but the software should be seen as a tool to achieve other goals rather than being the goal itself, excluding education purposes. A senior engineer should be able to understand the business effects of the technology in use to aid the result rather than the intermediate tools.

A senior engineer should be open to learning and criticism. One of the things that pulled me into computers was how huge the potential is and how many different directions one may take within the field itself. Since there are so many things that can be done, I believe this also brings the requirement of continuous learning. We should all be open to learning from academia, industry, and our peers. We should keep reading, listening, watching, experimenting, testing, and staying positive about all these while still delivering value. As these are the behaviors I would expect from every engineer, a senior engineer should be a role-model when it comes down to learning.

A senior engineer should support their peers. It is hard to get started something and everybody was a beginner in their profession for quite some time. Helping other people to get something done, supporting them through technical and non-technical decisions, and allowing them to grow has a huge impact on overall productivity and team energy. I would expect supportive behavior that shines a light to various bottlenecks for the individuals in the team from a senior engineer.

A senior engineer should empower their peers through their career track. While this may sound a little bit controversial, I think it is hard for some types of people to promote themselves to other people, which makes them look like they are not achieving much even though they might have been doing incredible work. A senior engineer should be the one that gives credit to outstanding work, promotes their teammates to the open world, and encourage them to do more if they are willing to. This can be a very small gesture, such as mentioning to an upper-level manager as “have you seen the outstanding work X has done over the topic of Y?” while both are in the environment; this kind of behavior can be a huge motivator for both of the parties as it would help the individuals’ career tracks and help them to achieve more.

A senior engineer should be a motivator for the rest of the team. There may be cases where a team loses focus or motivation because of various reasons; a senior engineer should be able to manage the problems for the team and motivate them out of those depressive moments. These problems might be caused because of technical, managerial, or personal issues; in either case, the senior engineer should be able to analyze the situation, understand the state-of-mind his/her peers are in and act accordingly to bring the motivation back. This may be bringing a technically challenging task on the table if the team is bored with what they are doing right now, pushing some ideas within the team to bring the spark back if they feel like they are dropped out of the game, or supporting them individually through tough times. A senior engineer should be the one that acts as a role model to the other members of the team and show the path to the end of the tunnel for those who feel kind of lost.

A senior engineer should be dependable. Delivering things is important; however, what is even more important from my point of view is to deliver things that were promised to be delivered in various forms; these promises may be in the form of sprint plannings, RFC documents, product roadmaps or in-person communication. I believe a senior engineer should be dependable in the sense that the team should be able to internalize the notion of “if X said he/she will do something, he/she will do it.” confidently. This would allow better planning for future events, better allocation of resources, and more stability against workload or environmental changes. Also, I believe this dependability would bring faith to the attention the engineer puts into their work; as in, the quality of their work would mostly not be doubted in the process.

A senior engineer should be able to stand up for the good and point out what is broken. There may be cases where a broken thing is ignored to keep the status quo to stay comfortable; a senior engineer should be ready to point out problems and willing to take action to resolve those problems. The problems may be technical issues, behavioral problems, or processes that don’t fit the team culture; the senior should be calling out the problems and making things explicit to improve the situation for good even though sometimes it requires extra work for various parties.

A senior engineer should strive for the best out of the team. Some might call this behavior as “being too picky” when it comes to certain areas, but I believe a senior engineer should push their peers to produce better work and to learn more. This behavior might be exemplified as asking for good test coverage for some software, pushing for more extendable architectures, pointing out mistakes and potential improvements, and trying to bring out the best in everyone while not discouraging anyone. The team would ideally improve in terms of technical and soft skills.

In Summary

📚 Source: https://twitter.com/cyberomin/status/1274341280059965440​

  • First and foremost, what qualifies a person as a “senior engineer” is the kind of problem and breadth of problems that they have dealt with and not generally a length of time.

  • For instance, if you work in a fast pace environment and generally get thrown into deep problems, you’re more likely to grow faster in terms of experience and battle scars than someone who does the same repetitive tasks over and over.

  • Spend time in solving interesting problems, even though you think those problems are out of your experience, you will learn and grow twice as fast s the person who takes it slow. Don’t be shy to tackle hard problems.

  • Understand common pain points and become extremely well-versed with a complex multi-part system. As time goes on, you will begin to build solid muscle memories of the possible problems, so much so that if anything ever goes wrong, without too much digging around, you can pinpoint with near precision what the problem is, how to isolate that problem and how to fix it.

  • Find an opportunity to teach and mentor others. Volunteer to be the buddy of that new intern. What happens here is that you’re reinforcing your technical learnings. You’re learning people skills, very critical.

  • Demonstrate an ability to take more responsibilities beyond your defined “scope.” It’s important. While there’s a place for independent contributors, learning people management skills is super essential.

  • Ask the right questions - asking another person, using a social network like Stackoverflow or even Google. A senior engineer is someone who knows how to Google really well.

  • Create some sort of learning journal for yourself. It will become a knowledge bank and wiki over time. Do one last thing, share it. Put it on Medium, don’t worry if others have written about it, you should write about it anyway.

  • Read and be curious. Curiosity is super helpful, it allows you to question things and it pushes you to explore. My honest recommendation will be that you read engineering blogs. It doesn’t matter if some of the concepts there are over your head. Box, Square, Airbnb, Expedia, Grab, GoJek, Instacart all have good engineering blogs, read. And if and when you can, experiment. When you’re done experimenting, throw it to GitHub.

Don’t forget that being a seasoned engineer isn’t a destination, it’s a continuous journey.