What does it mean to be a senior software engineer?
Over the years I've observed several software engineers as they grew from their first day on the job into a Senior Software Engineer and beyond. A common thread among those early in their career is they don't have a well-formed understanding of what it means to be a Senior Software Engineer. Let's examine what it means to be a Senior Software Engineer and how it affects the everyday choices of early career engineers.
A senior Software Engineer is many things, but they consistently embody two main qualities: impact and ownership. Let's break these down.
Impact
When I talk about impact in terms of software engineers I'm referring to positive outcomes that affect many people. Not just slightly-positive outcomes where you do $1,000 worth of work and produce $1,500 of value, but very positive outcomes. The kind of outcomes where $1,000 of your time turns into thousands of dollars (or more) annually. This is the kind of impact expected of a senior engineer even at the smallest of companies. It doesn't always need to be about dollars, though; at least not directly. Other ways to measure your impact are by increasing customer counts, decreasing customer churn, and improving customer satisfaction.
Ownership
As you're leveling up in your career you'll own an increasing amount of functionality. You may own several smaller things, one big thing, or a combination of the two. Whatever you own, you'll own deeply, and will be the point person for questions, bug fixes, and feature development. One of my favorite ways to express the concept of ownership is with the following thought exercise:
Who is responsible for turning the lights off in a business at the end of the day? Is it the last one out the door or the CEO? Think about it for a moment before scrolling ...
If you said it's the CEO, you're right. They may have established a policy stating the last one out shuts off the light, but when the electricity bill is too high it's the CEO's problem to solve.
How can I increase my impact?
- Make it work, make it beautiful, make it fast
- Increase your ownership
- Become a mentor
- Solve ambiguous problems
- Write things down
Make it work, make it beautiful, make it fast
For those new to the quote, it serves as a reminder that we should first make it work, then make it beautiful, and lastly make it fast. While these steps are meant to happen in order, they are not all mandatory, and in many cases can decrease your impact if you focus on them too early or too deeply. It's a common trap for early career engineers to needlessly spend time making the perfect architecture or squeezing a few milliseconds out of a routine. Don't let this be you.
The only one of these three steps you must do is make it work. It's fine to stop right here and ship the code provided it's not a complete mess. The other two steps are situational. For example: If you're working at an early-stage startup, or on a feature you're not sure will be well-received by your customers, it probably doesn't make sense to invest the time making the code beautiful. Even if you know the feature will stick around, you shouldn't invest the time to make it fast until you have proven, repeatable evidence that it's slow and that fixing the slowness is worth the effort.
Increase your ownership
The more you own, the greater your impact; plain and simple. Look for opportunities to increase your ownership. One of my favorite ways to do this is by saying "yes" to new opportunities; especially the ones that scare me. Another is by monitoring bug reports and diving into them until I determine the root cause, communicate it, and put up a PR to fix it.
It's easy to burn yourself out quickly if you overdo either of these approaches, so start simple and build up your tolerance.
Become a mentor
Mentoring is one of the best ways to increase your impact because it forces you outside of your comfort zone frequently while also building your confidence. Look for opportunities to mentor on Twitter, codingcoach.io, or various Discord and Slack communities.
Solve ambiguous problems
Earlier I mentioned taking on problems that scare you. They might scare you because you don't know the tech, or they might scare you because they are ambiguous. Look out for these and be bold enough to take them on. Ambiguous problems are a forcing function that helps us grow.
Write things down
Writing things down increases your impact as well. Imagine, someone asks you how to do something, and instead of calling or DMing them you can link them to a document that spells it out. Even if the document gets them halfway it's still time you can spend on other tasks. Instant impact, repeatable for a long time.
How can I increase my ownership?
Earn trust
Ownership isn't always something you can choose to get more of. The really meaningful projects are going to come from your boss or colleague. This won't happen unless you earn trust first. Thankfully, earning trust is a natural byproduct of doing all the things in this article. Say yes, deliver on time and on budget, and be consistent; the trust will come.
Trust yourself
In addition to earning trust from other people, you also need to trust yourself. You did the work to get where you are, even if it's your first day as a professional software engineer. Trust in where you've been and use that trust to grow your areas of ownership.
Mastery of at least one language
Most senior software engineers are masters of at least one programming language. This doesn't mean you're in the top 1% of all practitioners of the language. It does, however, mean you are capable of starting a project in that language from scratch and building an entire project of reasonable complexity. Furthermore, this project should be thoughtfully architected and maintainable.
Project Management
Senior software engineers are frequently put in the position of doing lightweight project management. Keeping track of their own tasks, determining priority, and delivering on time. This doesn't make you a scrum master, but you should know enough about project management to be effective.
Have strong opinions
By the time you're a senior software engineer you should have some strong opinions on a language and/or framework. You've read many articles and books, watched videos on the subject, and have joined at least a few communities that discuss the technical area. Through this self-education you've honed your thoughts on how something should be done in that language. Make sure not to hold your opinions too tightly, though. There's nuance in every situation which is why it's common to hear senior software engineers say "it depends".
Wrapping up
A focus on impact and ownership will take you very far on the path to becoming a senior software engineer and beyond. Stay focused on these main qualities and let them guide your decisions.
Did you enjoy this article? Dislike it? Feel like I'm missing something? I want to hear from you. Don't hesitate to contact me on Twitter.