Have you seen people that somehow get promoted every 1-2 years while others stay in the same role for a long time? Have you ever wondered what gives? How come two engineers that started from the same spot and apparently did similar things can end up having a totally different career trajectory?
I know I wondered this for a long time. I've also been on both sides of the spectrum - sometimes moving very fast while other times becoming too comfortable for my own good. This is what I want to discuss today - how to move from one level in your career to the next. I want to share a few things that worked for me and what I've seen work for others. Of course, your circumstances will differ, but I'm hoping that the ideas presented here will get you closer to that next promotion.
Before we jump in let me preface this by saying that you don't need to advance in the career ladder. There's absolutely nothing wrong with staying in the same role for a long time if that's what you enjoy doing. I know many engineers who just love to code and just want to be expert craftsmen. And that's totally OK. I also know plenty of engineers who are freelancers or entrepreneurs where getting promoted doesn't apply. I'm writing this article for the majority of engineers who work in companies, large or small, junior or senior, and are considering going for that next level in their careers.
Promotions are not a given
Let's just get this out of the way - you shouldn't take promotions for granted.
I'm sure all of us are aware of this simple fact, but it's worthwhile to keep it in mind because it's one of the biggest reasons I see folks not being promoted - they don't work towards it. They assume it should happen after a certain number of years, or after getting excellent feedback for their work, or just because they think they're doing a good job in their current role. This is not the case unfortunately at many tech companies. You have to have a lot more dedication and be more intentional if you want to take this seriously. How exactly? This is what we're going to discuss next.
1. Know what you want
It's obvious, right? You can't expect to be promoted if you don't know where you want to go next. Well, it might be obvious to some, but it sure wasn't obvious for me. For a long time, I just went with the flow, going from feature to feature and from project to project. I learned a lot of things along the way and that kept me engaged, but I didn't stop and think - where am I going next?
Sure, you can be promoted up to a certain level by doing most of the same things, but better and more efficiently. But after a certain point - usually after reaching the senior engineer position - this doesn't work. I know some folks that have been in the same role for 7+ years. Don't get me wrong, I'm not saying this is a bad thing, it's perfectly fine to focus on other things in your life. But if you want to invest more in your career and want to continue to grow, you need to be more intentional in what you want to do.
No matter if you have 1 month or 10 years of experience, stop and think for a second. What's next for you? What do you see yourself doing in 2 years? What is going to bring you the most fulfillment? You don't need to have all the answers, but you should at least have a sense of direction. Think if you like working with people, being an expert in a specific language, mentoring others, coordinating with other teams, working with cutting edge technologies, designing complex systems, etc. Identify what really motivates you and makes you get up in the morning.
Be honest with yourself here and the next step will be that much easier. Some answers will lead you down the management path. Others are more suited for very technical people at the staff/principal level. You might want to work in a big tech company, a promising start-up, or as a freelancer. You might enjoy working in a small team or a big team.
There is no right or wrong answer here. It very much depends on you, what makes you tick and what's going to bring you the most satisfaction. And if you don't fully know what you want yet, that's also fine! You'll figure it out in time. What is important is to start thinking about this and not leave your next step up to chance.
2. Understand the ladder
After you have a decent idea of where you want to go, start getting familiar with the career ladder at your current company. Here I specifically mean the expectations that your company has for each level. In many places, there is a central page/doc that lists the things that you need to demonstrate in order to be considered for that level. If by chance your company doesn't have this, then ask your manager and/or your peers, especially those that are already at the next level. Sometimes you don't even need to ask, you can simply observe what more senior folk around you are doing and connect the dots.
Why is this important? Because it's very easy to fall into the trap of doing an excellent job in your current role and not thinking about the expectations for the next level. As an example, it doesn't matter that you merge in 5k lines of code each month if the next level involves architecture design and team coordination. It's very good to become proficient in your role, but don't spend more time in it than you have to.
This concept is very important because of a very simple fact - companies usually promote engineers who are consistently performing at the next level for a certain amount of time. The reason is that promoting someone and giving them increased responsibilities is a risk that the company takes and they are much more inclined to do that if you have proven that you are capable of doing what is expected for the next level.
Don't just be an excellent senior engineer if your goal is to get to staff. Even though you might get good or even great performance ratings in your role, that doesn't mean you're any closer to that next step. Continuing this analogy, a staff engineer requires a very different set of skills including leadership, communication, strategy, etc. in addition to strong technical skills. If you just focus on shipping high-quality features, chances are you're never going to reach that staff level.
3. Make your own luck
Promotions don't usually happen to you, especially past a certain level. It might work for the first few years when you go from fresh grad to junior and then middle level, but anything past that requires a conscious effort on your part. That being said, sometimes no matter how hard you try, you can just be "unlucky" and work on a project that doesn't have great visibility, a team that only does maintenance work, or be stuck in a place where you don't have any mentors to guide you. It happens to all of us, you can't be on the bleeding edge constantly, but if you let it carry on for a few years it might have a negative impact on your growth.
That's why I say make your own luck. Be proactive in seeking out opportunities that you think might be relevant for you. Talk to your manager, understand the roadmap for the year and identify the high-impact projects. These projects have a bigger chance of putting you in a position to be promoted. Regularly talk to engineers in other teams and see what they are doing. Attend different meetings and presentations where you could get more context and inspiration.
Of course, just seeking out these opportunities is not enough. You also have to capitalize on them whenever possible. If you get the green light to join a different project, do it. If someone asks you for help with something, try to take some time and help them. If your manager gives you an extra assignment, take it and balance it out with your other commitments. If there's a long-standing bug that nobody seems to have figured out, consider fixing it yourself. If your company needs another interviewer, consider being a part of that. These are just a few examples, but you get the idea - try to get involved in as much as you can and it's very likely that you will get noticed, which will open up more doors for you in the future.
4. Be a leader
This ties directly into the point above and it's one of the more important mindset shifts that can greatly benefit your career and chances of promotion. I'm a big fan of leadership at all levels and it's one thing that I personally and many other folks that I know look for when considering engineers for promotion.
There are many ways to define leadership, but I'll just focus on three:
- Ownership. Nothing screams leader greater than ownership. Being an owner means having personal responsibility and accountability for your work. It means you can't just say "I didn't introduce this bug" or "I don't know much about this area". You're the first and last line of defense. People come to you with questions, concerns, ideas, advice and needs - and as an owner you have to manage all of that. It's not easy to do, but trust me, start acting with ownership and getting promoted becomes that much easier.
- Initiative. Being a leader means having initiative and taking calculated risks. Go out there and propose things that you think can have a big impact, but always have data to back them up. Discuss with PMs and other stakeholders and understand what are the pain points of customers, be it external or internal, then think of ways your team could help with that. They don't have to be big things, even small items such as a logging improvement can have a big impact on reducing customer troubleshooting times, for example.
- Collaboration. All strong leaders understand that you cannot do everything by yourself. You need to work together with others, be it in your team or from other teams. In order to do this, you need to develop and maintain good working relations with other people. Leaders know that the whole is greater than the sum of its parts and are constantly seeking to optimize the broader group's output, not just their own.
5. Get visibility
This is a contentious point for many folks for sure. Most engineers expect that their work should speak for itself, and while in an ideal world this would be true, it's unfortunately not the case. The simple truth is this - no matter how much effort you put in, if nobody knows of it, it's not going to get you the recognition you deserve.
It's very important that other people around you have good visibility into your work. This means your manager, first of all, but also your peers. And when I say peers, I don't just mean your teammates, but also other folks in the organization, such as PMs, support, sales, recruitment, etc.
There are three tips that I personally use and I believe can help with visibility:
- Work on high-visibility projects. Might sound obvious, but it's one of the most effective things you can do. This ties directly into the point of making your own luck. Position yourself such that you are working on things that are important for your company and having visibility becomes that much easier.
- Frequent status updates. This is something that all of us can control. Try to give constant updates regarding your work. This might be to your manager, project lead, peers, etc. but the concept is the same. I see too many software engineers neglecting this part. They might be working on a cool feature but don't provide any update unless asked after 2 weeks. Don't do this. It not only helps with making your work more visible, but it also makes risk management easier if folks know your of progress.
- Collaborate. Especially for senior positions, peer feedback is a key aspect, so make sure you develop strong working relations with your peers. Ask and give help when needed, let them know what you're up to, invest time in architecture and code reviews, mentor others, have pair programming sessions. These are just a few examples, but you get the idea. Be a person that others want to work with. Don't spend another week on a feature to squeeze that 2% performance increase, look and see if you can help others achieve more in that same amount of time.
One final tip here is to pay attention to the way you're giving this visibility. It shouldn't come across as arrogant as in "I helped X with a ticket because they were struggling to finish it". Be humble and positive when delivering your updates. The purpose is not to show how much better you are, but rather to present objective results that your manager and peers can use to evaluate your performance and impact.
6. Think strategically
This point becomes more important the higher up you go on the ladder. As engineers, we're often concerned with the code that we write. Do you think your director cares that you have 90% code coverage? Do you think your VP is interested in the latency of the database operations? The answer is no. While these things do indeed matter, the end goal of your company is to make money by creating products that your customers will buy. Sometimes these products are closer to the code (an open-source library on GitHub) but in many circumstances, the code is just a means to an end.
My intention is not to imply that there is no value in writing clean, extensible, performant code - that could not be further from the truth. Every house needs a good foundation to be built upon and good bricks for its walls. But the end goal of the house is for the people to live a comfortable life inside it. So from that perspective, having a good placement of windows to allow for better lighting might be more important than using 30cm bricks instead of 25cm ones. The same goes for software products and it involves you taking a step back and thinking strategically.
Understand what are the actual needs of customers and figure out what are the best compromises that you can make in order to maximize that value. Sometimes it might be paying an extra $10k a month to make the UI experience smoother. Other times it means using an old implementation that you know needs refactoring soon just to get that head start on your competitors. Or maybe it involves creating and presenting a proof-of-concept in 3 months in order to get that early feedback useful for shaping your product vision.
Think about these things constantly and identify ways in which you can help. Having a product-aware and business-aware mindset is essential to tie in all of the points discussed above - opportunities, leadership, visibility, etc. Work with your manager and your PM peers and be a technical partner in driving the relevant decisions in your team and org.
The underlying theme here is impact. All of us have 8 hours to spend in a workday. Think about what is the most efficient use of that time in order to have the biggest impact on the business.
Closing thoughts
Before we close, I want to give you a final piece of advice - think long and hard about why you want to get promoted and make sure it's for the right reasons.
Getting promoted should never be just for the money and title. While these are important, make sure you're not motivated only by that. Being promoted is a sign of recognition and trust from your company, that you are someone they want to invest in, someone they consider ready for taking more responsibility, and ultimately someone that can bring more value to the business.
And one more thing. It's not easy. It's not meant to be easy. Take charge of your own career and growth because nobody cares about it more than you do. And while it seems like a lonely journey, it doesn't have to be. Caring for others and growing them alongside you is one of the most powerful ways of creating a win-win scenario for yourself and others around you.