on seniority in software engineering
I’d expect a senior engineer to be a technically capable individual, understands/thinks about human psychology, has good self-motivation skills that would ignite the team motivation as well and is dependable. I wanted to pour some thoughts, think out loud about seniority and to reflect on some discussions I’ve had with some friends recently.
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.
Even though these traits are usually seen in people correctly regarded as senior engineers, correlation does not imply causation; therefore, I believe these are some points to be careful about.
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 have a T-shaped knowledge. It is expected from a senior engineer to have broad knowledge about various topics and deep knowledge about some topics. The person should not be expected to know everything, but they should at least have a reasonable amount of knowledge about what the team is working on, from both technical and business perspectives. Applied technical knowledge might be required for some positions/teams, but I’d argue that it is not that important for a senior engineer to have extensive experience with a certain technology as it shouldn’t be too hard for someone that has a broad knowledge about various technologies to pick up something new and get productive with it.
A senior engineer should stay away from bike-shedding and favor objectively better solutions. It is really easy to get lost in various firefighting, especially when it comes to various technologies, that it may harm the productivity of the team in very bad ways. A senior engineer should be able to analyze potential options at hand and favor a solution that is objectively better from another rather than being fanatic about one solution with no backing information. A senior engineer should also strive to stay away from analysis paralysis for similar reasons; engineering decisions should come from data rather than gut feeling and spending too much time on small differences is not productive.
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.
As it is already obvious, I am at the beginning of my career as well and I am trying to grow and learn more as I go, but I believe putting some thoughts into the process and the expected outcome is important to be more precise about achieving our goals. I have worked in smaller teams where the progress and delivery was mainly a one-man show, and I have been working at Hellofresh for a while where delivery is a result of an effort of tens or hundreds of people, and the dynamics of these environments is quite apparent; however, the effect senior people can have in a team on delivering stuff and achieving more is one of the most important common points between these organizations, and I believe assessing these values and thinking about them should be a continuous process that keeps evolving.
Since you have managed to read the post until here, here is a pic of a cute fox for you.