editione1.0.1Updated October 11, 2022
If you were to pull up your preferred search engine, enter the query “what is a senior software engineer?”, and hit enter, you’d be presented with hundreds of different explanations of what it means to be a senior software engineer.
It’s interesting that as programmers, we work in an industry that has self-organized around standards and protocols such as TCP/IP, HTTP, HTML, IMAP, SMTP, and many others that play an important role in a connected society. These standards provide a basis for which we all agree on something—a mutual understanding. And yet the truth is that there are so many different interpretations on how to define a senior engineer precisely because there is no standard definition for what is actually required in order to call yourself one.
The software industry is still very young when you look at it in the context of history. While other industries have formed consensus on what standard requirements should be met in order to do business or practice an occupation, we’re still learning the best way to deliver software reliably and efficiently. You don’t have to pass a licensing exam in order to write software professionally, you just need to demonstrate that you know enough about programming to pass an interview.
The reason for this ambiguity is partly because of the diverse opportunities within our industry. As programmers, we can work for small seed-stage startups all the way up to Fortune 500 public companies, and across almost every industry—energy, healthcare, finance, entertainment, and education, to name a few. So, when you really think about it, how should we standardize a common definition? A senior engineer’s role and responsibilities at a seed-stage SaaS startup are vastly different from those at a public healthcare corporation, hence we see different interpretations for what it actually means to be senior.
Each business needs to form their own organizational structure around what works best for them, so it makes sense that roles and responsibilities are unique to each enterprise. Yet people try to compare apples to oranges all the time when it comes to debating the characteristics that make up a senior engineering role. In fact, what some people fail to realize is that the word “senior” has multiple meanings here, and each organization interprets the title differently.
Some companies interpret seniority as a reflection of a software engineer’s actual years of experience at a company or in an industry. Certain industries are complex enough that it takes years to learn the nuances of a company’s product suite and how it solves a customer’s pain points. A software engineer who’s spent years building a complex product carries vast amounts of domain knowledge with them, and they understand the product and the industry better than anyone else.
While these engineers typically have strong technical skills, they may not always be the most technically skilled on their team, yet they still get promoted. They may bring domain knowledge and experience delivering software in the industry, which some companies value more than pure technical ability.
important You tend to see years of experience valued in highly regulated industries where domain expertise is more valuable than pure technical abilities, such as aerospace, telecommunications, transportation, healthcare, energy, and certain financial businesses.
On the other hand, some companies interpret seniority as a reflection of a software engineer’s technical abilities. While not always the case, businesses in a growth phase tend to hire or promote from within based on one’s technical abilities. This is because these companies have validated their business model and are evolving from a startup into an enterprise. They need to scale their codebase, team, and software development processes as they cross the chasm from an early adopter product to a mass-market solution.
Growth companies need strong technical people to lead the charge as they refactor, rewrite, and scale their systems to handle more demand. Domain knowledge is valuable in these cases, but some of the challenges to be solved are purely technical, so companies may hire and promote from within the candidates with the strongest technical abilities, even if those people have less years of experience than others. This is where it pays to specialize in specific technologies, because you may be able to find companies in a growth phase that are looking to hire for strong technical skills in one or two specific technologies, regardless of whether you have industry experience. For example, a fast-growing security company may need to hire engineers with deep knowledge in cryptography, or a regional internet service provider that’s looking to expand into a new market may be looking for network engineering experts.
important You tend to see this more in startups and fast-growing technology companies. If a business is focused on scaling at all costs, pure technical ability is more valuable than domain expertise.
Most companies combine both interpretations and look for well-rounded software engineers that have both years of experience and strong technical abilities. They view seniority on a spectrum, with years of experience and technical abilities at either extreme. Their ideal candidates would bring both domain expertise and technical skills, but they may make exceptions if they come across a candidate that skews towards one or the other.
Now that we’ve uncovered the different interpretations of what it means to be senior, let’s look into some skills required by all senior programmers, regardless of whether the title is based on years of experience or technical knowledge.
When you’re first starting out in your programming career, you’ll be fixing bugs and extending existing features to add new functionality. Most of what you’ll be working on will be determined by a product manager, your engineering manager, or a senior engineer. It’ll be up to them to determine most of the functional and technical requirements, and it’ll be your job to implement a working solution.
As you grow into a senior role, you’ll be faced with more ambiguity in the problems that you need to solve. There won’t always be a straightforward answer, and oftentimes there will be a number of ways in which you could solve a problem. It’ll be up to you to weigh the trade-offs and determine the best path forward, which may not always be the ideal technical solution.
Senior engineers are often asked to solve difficult technical problems when there isn’t always a good understanding about how to get there, such as keeping a user’s shopping cart updated in real time across both web and mobile devices. It’s up to the senior engineer to break the problem down into smaller, more manageable pieces, determine dependencies between the pieces, and put together a plan for building a solution. Junior engineers, on the other hand, often have a known path set out in front of them and are tasked with working towards a goal, such as making sure orders are processed successfully and inventory numbers are updated accordingly.