Software development is both a highly technical and a highly creative process. Programmers are reasonably proud of their abilities and experience, much in the same way that expert artists or artisans can be proud of their work.

Unfortunately, like art, there is no obvious scale on which to measure programmers. We throw around terms like “junior engineer” and “senior engineer” on job titles and resumes, but there isn’t a clear definition for these terms. If you look online you’ll find a variety of definitions from a variety of bloggers. This article is one such blogpost.

In this post I lay out my criteria for senior engineers. As with many posts like this, it will mostly focus on non-technical aspects of the job.

For the lazy, I’ll summarize this post in the following sections. Senior engineers …

  • Are technically skilled
  • Handle vague requirements
  • Seek to understand context
  • Connect with stakeholders
  • Take ownership and talk back
  • Communicate regularly
  • Handle uncertainty, and are comfortable with failure
  • Ask for help
  • Take vacations

Are technically skilled

First, senior engineers need to be able to program well. This has less to do with understanding language constructs and frameworks (these are traits by which we judge junior engineers) and is more about designing systems that can be easily reasoned about, maintained, and extended by junior engineers into the future.

Senior engineers can design and implement boring solutions to complex problems.

Now, that that’s out of the way, let’s get on to the non-technical aspects of senior engineering.

Handle vague requirements

The more senior you are in an organization, the more vague and poorly-specified your tasks become.

  • Junior engineers get tasks like

    “Run this specific benchmark on this component of our platform. Then try swapping out algorithm X for Y and report back the results”

  • Senior engineers get tasks like

    “Please figure out why the platform is slow and fix it”

Junior engineers are more actively managed, while senior engineers are trusted to figure things out on their own, reliably come to a decent solution decently quickly without someone guiding their way.

Seek to understand context

To achieve this, senior engineers acknowledge their own ignorance of the situation, seek out others to help them understand the context in which their work matters.

  • So given a task like

    “Please figure out why the platform is slow and fix it”

  • They understand that this was actually

    “Someone somewhere is complaining about performance. Figure out who this was, what will make them happy, and while you’re at it see if there is anything we should be concerned about long term”

Senior engineers seek to understand the context of the task given to them so that they can resolve underlying issues efficiently.

Connect with Stakeholders

To do this, a senior engineer reaches out to other stakeholders. This might be the people who raised the issue/ticket, the people who are most affected by it, or even just someone they know personally who is well informed about this sort of problem.

The engineer then seeks to learn more about the problem so that they can design an efficient plan to solve it.

So for original task above:

  • “Please figure out why the platform is slow and fix it”

they might first ask their colleagues why it’s important that things are fast. Maybe it’s just frustrating users that they don’t know how long things will take, and so actually the solution to this problem is to implement a progress bar, rather than dive into optimizing code, which, while fun, likely isn’t the best use of time.

The proposed solution given by the manager is often wrong. That’s ok, senior engineers identify the root problem so that they can develop a more effective solution.

Take ownership and talk back

A senior engineer should feel comfortable disagreeing with their manager and peers when constructive. They understand that they have been trusted with this problem, and the they are likely the person who has the most time to focus on it. They will quickly become the expert here and know more than their managers, who are often distracted and make incorrect judgements about these vague tasks. Managers are often juggling many things and so often make mistakes.

As a senior engineer learns more they naturally take control of the problem, both technically and socially, and handle communication with the broader team.

Communicate regularly

As the senior engineer takes control, they communicate with the relevant stakeholders about what is going on. This is both to allow other people to plan around the engineer’s work, and also to verify that the plans of the engineer remain valid as things inevitably change. This communication might be sending out update e-mails, updating issues/tickets, or reaching out to known stakeholders directly in one-on-one conversations. They don’t ask for permission to do these things, they just go ahead if they think that it’s probably the right thing to do.

Handle uncertainty, and fail comfortably

Senior engineers are given positions of ownership over difficult problems. They are placed in positions where they are likely to fail.

This is ok. They know that they will survive. While a junior engineer might be mortified at making a public mistake, a senior engineer is self-assure and has enough reputation to fail safely. No one is perfect, and no one can do everything right all the time, especially when operating on their own.

Ask for help

Senior engineers engage peers in the company when necessary to help them accomplish larger tasks. Probably most of the task that they were given is well within their expertise, but there may be some parts that they know they’re not going to be efficient at. To resolve this, senior engineers know how to ask for short term resources within their company, and are comfortable doing so, especially when it’s likely to be more cost effective for the institution.

So in our example maybe the backend engineer who is building a progress bar identifies that they need a little bit of front-end work to make the bar integrate well into the visual design of the broader product. The senior engineer has learned the process to ask for this help from peers, including peers from very different teams.

Take Vacations

Senior engineers have been around long enough to realize that they work and live better when they are well rested.

They also know not to get stressed out by any particular problem, even if that problem seems critical at the time.

The senior engineer works a comfortable number of hours during the week, and makes sure to take solid chunks of vacation time to help them clear their head, and invest in their life and mental health.

Conclusion

Senior engineers are trusted to get things done. For larger and more vaguely defined tasks this requires technical, organizational, and emotional maturity.


blog comments powered by Disqus