Many people struggle to make the transition into a senior software engineer. Learn what it takes to make this transition much less challenging.
This is something I experienced myself. I started at Microsoft as a college hire and the first few years of my career were a nice series of good performance reviews and promotions. But when the next level was in the senior band my promotions suddenly stopped.
To better understand the challenges of becoming a senior software engineer, let’s review the typical progression for a software engineer. The actual titles will vary from company to company, but the responsibilities and expectations tend to be common.
- Junior Engineer / Engineer I: This is your entry-level position, typically after graduating college. You are normally responsible for small features and rely on guidance from others. For example, you are still learning the company’s tooling and coding standards or growing your system and OO design skills. This may be your first time working on a large code base as part of a team. In other words, you are learning the ropes. This is the dependent stage.
- Engineer II: You move into this stage once you no longer require much guidance to deliver your own work. This doesn’t mean you never need help or that you won’t seek input from others. But for the most part, you are given the full responsibility of a feature or component and can execute on it end to end. You’ve reached the independent stage.
- Senior Engineer: You have reached this level once you are having impact beyond you own deliverables. Maybe you are the expert on certain technology and people seek your help. Or you are the go-to person who helps junior engineers with system design. The “senior” aspect can take many forms, but in a nutshell, you’ve reached the leadership stage.
So why is it tricky to make this transition? Because it requires a different set of skills which is less familiar to the previous stages. Up until the independent stage, most of the progression can happen by growing your technical skills. You get better at certain languages, learn new tools, hone your debugging skills, etc. This is familiar territory since it’s a natural continuation of everything you’ve done since college or however you started your programming career.
But being a leader within your team is different. All the technical knowledge and skills are just the pre-requisites. Now you need to be able to leverage this valuable knowledge and have impact through others. Your soft skills become really important: communication (written, verbal, non-verbal), empathy, assertiveness, collaboration, prioritization, mentoring, etc. Here are a few examples:
- Teaching a skill to a junior engineer with less knowledge and experience than you
- Interfacing with other disciplines, such as product, UX, management, sales
- Building consensus among your team on a technical decision
- Breaking up a problem into smaller pieces that your team can tackle, taking into account both technical skills and team dynamics
- Knowing when to jump in to do something and when to step back to let others grow
As you can see, these are quite different from learning to optimize a SQL query or becoming more proficient at SOLID coding principles. Some of these are similar to the skills you need to become a good manager. Here the 3 basic steps I recommend:
- Be an awesome engineer. This is a must as you need technical credibility. You don’t need to be an expert at everything (that’s a trap). A good recipe is to have deep knowledge in a couple of areas and pair that with strong general software engineering skills.
- Hone the soft skills. Seek opportunities that challenge you in non-technical ways. For instance, mentor the new hires, give technical and non-technical presentations, work with other disciplines. Reflect on how you are interacting with your team: do people seek out your help? are you facilitating technical discussions and listening to different perspectives?
- Shift your mindset. Leadership activities take time and you may sometimes feel like you’d rather write more code or fix a bug. But to grow in this area you need to shift your focus in two ways. The first is to think longer term and more strategically vs tactically. The second is to consider the overall team’s success instead of only our own deliverables.
This will likely be new territory for you and it’s important to get feedback and guidance. Your manager can be a great partner in this stage of your growth. You can also find a good mentor or get coaching throughout this process. By having the right plan and being intentional with your efforts, becoming a Senior Software Engineer will no longer be a struggle.
Leave a Reply