I have 5 years of experience as a “backend Swe” with the first 2 years at a company where I didn't get much chance to learn, and the following 3 years at a mid-sized company (where I have learned much more). Currently, I feel stagnant in my mid-level role and am eager to advance my technical skills.
Although I've worked on modifying existing systems and made minor improvements in scaling, I haven’t had the opportunity to design medium to large scale systems from scratch. I’m contemplating whether to join an early stage startup to gain broader experience rather than being confined to a single team.
However, I’m uncertain if this is the right step for my career or if it’s just FOMO influencing my decision to leave my current team. I'm also debating whether I should spend more time preparing and aim for other larger tech companies instead (wondering if there is a penalty for having too much YOE and having the expectation of a Senior)
From your message, I understood that you want to advance your technical skills, possibly by designing a medium to large scale system from scratch so you can go from mid-level to senior. You're also debating if you should go to a startup or big tech, but you sounded pretty sure to me that you don't want to be on your current company.
So answering each of these topics one by one:
Advancing your technical skills
This is a broad topic that you can achieve in many ways. In one of my teams we used to have a % of time in which we could spend learning topics instead of doing feature work. I highly encourage this even if your team doesn't have a formal structure. Learning is part of being a software engineer, you will always inevitably need to study new things. What worked for me was listing the most pressing topics for my day job, and find Coursera courses that covered them (I'm particularly a fan of their Google/Meta certificates). Then, also identify skills that I had to learn for my future self, that were not going to be immediately helpful but would definitely be in the long term.
Looking for system design opportunities
You mentioned you want to design something from scratch, but depending on the company or the team you are, these opportunities might be super rare. This doesn't mean though you won't be able to design something.
Have you mentioned to your manager that you want to do this? Maybe there might be a new feature coming up that will require building a new system, even if it's small it's still a good opportunity.
In terms of the system's size for scalability, this depends a lot on your team's context, so making a switch might be inevitable. Just don't stop learning and trying to find opportunities in your current team since we don't know when you will have the opportunity of switching.
Getting a promotion from mid-level to senior engineer
We finally got to what seems to be the reason for your question. But, while learning and designing systems are definitely important to a senior engineer, promotions are not only based on individual impact but also a lot on relationships and processes. Have you mentioned to your manager that you want to be promoted? Have you checked your company's definition of what a senior engineer is expected to do? Have you created a plan alongside with your manager of how you can grow to be already achieving such expectations? The previous two sections can be quite irrelevant if you haven't done any of this.
Startup vs. Big Tech
There are other threads here in Taro that answer this question specifically, so I recommend reading them if that's really something you want to consider. I believe startups can have more opportunities to design something from scratch as opposed to bigger companies with more stablished products. But, I think you need to ask yourself other questions apart from if you'll have more system design opportunities, because startup and big tech work environments as a whole have both a lot more pros and cons to consider.
Mid-level can have a pretty broad range. The entry-level roles will “age out” if you haven’t advanced to mid-level after some number of years. Mid-level may not be a “career level” everywhere (senior pretty much always is), but it still applies to a wide variety of experience levels.
At Amazon there were plenty of people at or hired into SDE-II with 10+, and rarely 20+ yoe. I was hired to Amazon at this level after about 8 years of experience at smaller companies. I wasn’t promoted to L6 (as a manager) until I was over 15 yoe total.
The approach may vary when it comes to how you prepare to level your skills up, become a better designer, and generally be on a more direct route to senior level behaviors. If there are truly no opportunities to gain those skills where you are, you sort of know it is not a place to keep growing. Otherwise you need to find how to position yourself with your manager, peers, more senior engineers, a mentor, and potentially a sponsor to start getting the opportunities, stretching and growing your skills, and having visibility with the people you need support from.
If your current company isn’t it, there are sort of… safe bets for growth opportunities. Giant tech companies are an avenue, but also may not promote you when you’re ready. You’ll grow, but may feel stuck in a rigid system. I don’t have startup experience personally, and I’m sure it’s not uniform, but certainly building from zero is a very different when it comes to explosive growth opportunities, and less gating to taking on stretch projects and having immediate impact.
There are plenty of individual behaviors required, but I’m guessing that’s covered in a master class or other answers. You need the opportunity to exercise those behaviors.
The first step is to talk to your manager: What are the gaps for you to get promoted from mid-level to senior in your current role? It seems like you have built a good reputation for yourself at your current company, so they should be open to having this conversation. For the tactics on how to do that, check this out: https://www.jointaro.com/course/nail-your-promotion-as-a-software-engineer/talk-to-your-manager/
I highly recommend going through the entire promotion course as it also covers a framework you can use to determine if you should switch teams or not: [Course] Nail Your Promotion As A Software Engineer
From my experience, a lot of mid-level engineers get stuck there as they need to learn how to create scope. In other words, don't wait for an opportunity to design a large scale system, find that opportunity to design a large scale system. Check out this playlist for inspiration: [Taro Top 10] How To Create Scope As An Engineer