As Rahul and I have talked about many times before, I recommend working with your manager to create a formal growth plan.
You ideally don't want to put all the burden on your manager to create the growth plan for you - I actually believe that part of growing from mid-level to senior is figuring out your own path to some extent. To help fuel ideas on what that looks like, check out this growth plan I wrote for engineers tackling this promotion at Meta.
I recommend putting together a growth plan doc yourself first and seeding it with some ideas. After that, you can run it by your manager. This reduces the ask from "Please do this giant ask for me" to "Say yes or no to the ideas I have, and you can add things here and there if you want."
All that being said, here are some common gaps I've seen from mid-level engineers working on the senior promotion:
- Writing more code than they review - Senior engineers need to influence others on the team, and reviewing the code of others is a very straightforward way of doing this.
- Not having a large presence in firefighting - I saw a lot of junior/mid-level engineers who played hot potato whenever they were assigned a bug task; they just wanted to get back to their feature work. A good senior engineer should be excited to sink their teeth into a tricky bug IMHO.
- Focusing too much on their tech stack - If you're on the higher-end of mid-level, progressing to senior, you will generally have 3+ years of experience. This should be ample time to have strong depth in your stack. This is the time when you start going "wide" and understanding more about other stacks. You don't need to write code in them, but you should be able to add value to what your teammates on other stacks are doing. For example, if you are a front-end engineer, you should be able to have a healthy, productive discussion with back-end engineers about API design since the front-end needs to call those.
- Only dealing with the code - Code is only 1 part of shipping products, there's also planning, project management, update communication, team alignment, driving meetings, and a whole lot more. Senior engineers tend to pick up more of these non-code responsibilities.