I have talked to several great developers who write fantastic code with years of experience who were confused about why they were not a senior developer yet. Maybe you have had some of the same thoughts. Perhaps you think you are ready to be promoted, but it doesn't seem to be coming any time soon.
If you look at the requirements for most senior developer positions, it seems like all the requirements are you need 5+ years of experience with language X and technology Y. So when you see this, you start thinking I write great code. I have the experience, I should be a senior developer.
In reality, being a senior developer is more about your skills outside of coding. A senior developer is also a leader. If you pay attention, you will see most senior developers perform many tasks outside of coding. They also seem to possess some of the same skills and quantities. Senior developers often are great leaders, manage projects, the go-to person for help, and help everyone around them grow. Now don't get me wrong, some senior developers don't lead teams, or their greatest skill might be their code. However, in my experience, these senior developers take longer to get there, might be passed up for other opportunities, and aren't looked at with the same type of respect as seniors who can excel at both coding, and being a leader. It's often these other skills that lead to being promoted, not the quality of code.
First, you want to focus on yourself. Become an expert at managing and leading yourself before you attempt to lead anyone else.
Estimates for software projects are rarely correct. It's tough to account for all the unknowns and get it right. We still need to try to do our best at estimating, though, so other features, teams, and marketing efforts can be planned around our features. When you first start out trying to manage your projects, first learn how long it takes you to do specific tasks. Once you have a good baseline for how longs things take you, you can start using that to estimate similar features. You should double any estimate you come up with to play it safe.
Once you are comfortable estimating your tasks, start learning how long your teammates take for their tasks. You should get comfortable being able to estimate for your team and judge how long a developer of specific skill levels may take. One important thing to remember for this is developers should never be solely assessed on their speed. Everyone will work at different paces, even at the same skill level. Two of the best developers I ever worked with were on complete opposite ends of the speed scale. Speed is not a comprehensive measurement of a developer's skill.
To be clear, I don't mean to spend hours stuck on a problem without asking for help. If you are stuck on something for longer than 15 - 30 minutes and have the resources to ask for help, you should. I can't tell you how many times I spent hours trying to figure out an issue for someone else to tell me how to fix it in 5 minutes. However, it would help if you started learning the best ways to debug problems, look up information, and troubleshooting in general. This is important as senior developers have to figure out challenging issues no one else may have the answer to and guide others on fixing their bugs.
A large part of being a leader is being able to admit what you aren't good at. You can't be the best at everything. You also can't complete everything yourself. Senior developers recognize this and learn when it's best to ask for help and rely on their team. It is about maximizing the team's potential and leading them to success, not your success.
Think back to some of your favorite bosses or teachers. One of the reasons you liked them likely was you felt like you could relate to them and be comfortable around them. We feel this way around people that practice empathy. They can put themselves in other people's shoes to see what they are going through and understand their viewpoint. Doing this can help people relax, help connect to them, and guide them on the correct path.
Even before being a senior developer, you can start to practice this. Learn to recognize when a team member may be having an off day, struggling with an issue. Don't jump to judge them if they have been seeming slow or running into problems. They may be going through something you don't know about or frustrated from being stuck. Again think back to some of your previous favorite bosses. When you had a rough time, they probably weren't rough on you. They probably cut you some slack. Maybe they let you work on something that they knew you would enjoy, offered to talk, or just took a step back. Being able to step into someone's shoes to understand them and then react accordingly may be one of the most critical skills a leader needs. It's hard to be a leader people want to work with, but great leaders are people others want to follow.
It is easy to be so excited about moving up that you forget that it will take time. There is a reason all those job requirements list years of experience for senior developers. Becoming a great developer takes a long time. Improving all the skills outside of coding takes years of practice. Even after you are a great developer and have nailed down all the other skills, it can still take even more years to be promoted. First, there has to be an opening for a senior-level position to fill. If a job is open, your manager and team also need to see a proven track record of you using the required skills. They need to see you in situations where you can prove that you have what it takes to be a senior developer.
Don't give up. Don't lose excitement over moving up. Just keep practicing and improving your skills, and eventually, you will be a senior developer.