You would come to think that things around developer's role would be clearly and exactly defined. That's unfortunately not the case with seniority definitions 😅.
Recruitment agents, outsourcing agency and companies interpret seniority level differently. Since there is no universal definition of specific skill levels, it's not strange to see job listings with few listed positions and their requirements that are contradictory regarding experience level, responsibilities and required skill and knowledge. Recruitment agents rush to label someone as a middle/senior(so they can try to jam them into companies and collect sweet provisions), which can make employees feel good about being labelled as an expert. But this can backfire in the long run. You need new knowledge and experience for every new level of skill. It doesn't matter how much years you are at the junior or middle level if you're not learning from your experiences and not growing your skills. Not only technically, but also social skills, as a team member and a person.
Sometimes jumping into roles you aren't yet ready for can force you to adapt and learn very quickly. But, there is a thin line, where if you cross it, you'll found yourself overwhelmed, failing to deliver what's expected and so stressed out and trying to pull everything together, that you actually won't have time to learn or do everything properly and grow. It can happen when you aren't prepared enough for more than 1 or 2 things and need to adapt at and learn multiple things while simultaneously using them for the 1st time. Then it's almost certain you'll make costly mistakes. It's an uphill battle. Don't let this scare you, but take it as a warning to be careful not to rush the process and get ahead of yourself.
Different people also approach learning and mastering new skills differently, with different amount of effort, focus and time. Resulted knowledge and skills that individual developers demonstrate over the years can vary greatly. Someone might focus on a narrow set of skills and become excellent at them, others might use their time to become very good in wider range of skill. Some technologies and industries are different in terms of how quickly you're able to acquire skills. Gaming, enterprise web/database, apps/mobile apps, websites, desktop apps, embedded systems development... are all very different when it comes to what you'll learn and how long it'll take you to master it.
Possible developer seniority levels are: intern, junior, middle, senior, lead, (principal/director). And the highest level a technical person could reach at the company is the CTO position. Even though it doesn't necessarily mean that this person has the most technical knowledge. They make high impact technology decisions inside a company and steer all the technological advancement and development in the direction that's agreed upon with the rest of the company leading positions like CEO.
Some companies have full spectrum of the mentioned roles, and some don't. There are companies where you won't hear about interns, maybe because of the reason they hire only experienced people, or it's just because they immediately assign them the "junior" role. Historically, interns were college students that come to brush their practical parts of skills at a tech company. But, these days, there are growing number of people without college degrees or formal education starting to get into programming and taking positions somewhat similar to that of interns, only they are not in college, and may only be in a such role to test things out, or gain initial experience. I any case, most of people on that level of (in)experience will do things quite similar to beginner junior devs, so maybe there's no reason to have a specific category. Intern positions are usually not advertised or actively searched for. Mostly they are announced at hackathons, college lectures/conferences/meetings and community meetups. One way to get an intern or a junior position is to directly reach out and ask. When interns show some proactivity and willingness to learn, it often leads them to full time employment.
In other companies, the "missing" lead role is probably just an informal position that's in fact there, and is taken by a senior/middle developer that takes on the responsibility of managing a less experienced group of people. Or the team is simply too small to have a need for team management. Another possible scenario is that a company doesn't have a formal "middle" level, but rather have a blurry transition between "junior" and "senior". Employees with "middle" level of skill may still be there, but they'll be viewed as either higher level junior or lower level senior.
Big companies usually have a bit clearer definitions of seniority. They also sometimes build their own documentation that describes required skills, experience, responsibilities, years of work etc. in detail. This helps their employees picture a clear career path inside the company. When that's not available, people get confused and uncertain about the possibility of progress in well established companies. Inside well managed companies, employees will be reevaluated regularly for the things they've been working on, their approach to work, motivation and their skills. When they become more effective programmers, start to have more influence on the team or the project decisions they'll typically move to a higher role. This reviews happen more often than in other industries, sometimes even every half a year.
Now let's quickly go through the levels of seniority and speak about possible requirements and responsibilities of each level. As I already said, everyone will have a different story to tell about seniority levels. But, hopefully this information will make you aware of the full scale of different levels of difficulty, variety and responsibilities that go with them. After you know that, you'll be able to at least roughly position yourself.
Seniority levels summarised:
Junior - Starting to code in practice, learn business/project/team processes, requires guidance
Interns sometimes fall under this category as simply a very low level junior. It's a skill level of someone who is just starting out, needs guidance, learns how to communicate inside a team, learns how things at work in general, as in they are employed for the first time. Starts to learn technologies, concepts, methodologies in practice. They aren't able to make estimates because there is too much things that are unknown for them. Aren't responsible for the outcome of a project and won't be able to work on a project alone. They don't usually carry the responsibility of the project's outcome.
Middle - growing towards code experts, getting to understand all the processes and doing their best so that projects go smoothly and as planned towards successful finish, sometimes need hints and help with their approach from seniors
They are able to handle most code stuff by themselves but rarely need help with edge-cases. Still need guidance on higher level things like structure and planing. They slowly start to realise other things that are important: estimation, communication in the team and teamwork/delegation... Better estimation of when and how something can be developed comes from their past successes and failures(experience). They are able to carry out the work themselves successfully. Even when the whole process is not completely defined or a pieces of the puzzle are missing. They teach and advise juniors, especially about the problems they had and learned to solve. Are able to create software that is working. Aren't yet able to predict the outcomes of the technical and management decisions or see the potential problems a few steps in advance.
Senior - code experts, having many successful and failed projects behind them, able to plan ahead, foresee problems and avoid them ahead of time, delegate tasks or lead teams People in this category have done many different projects or a few complex ones. They have faced many successes and failures. They have worked with many different technologies, including competitive technologies that work similar things so they have experience to decide and choose technology stacks to build products upon. They mentor junior and middle developers and can lead teams. Usually the ones that will plan development, decide on code structure. Able to communicate with different roles in the company and discuss plans, possibilities and estimates. Able to carry out complete project by themselves, but often times work with project or feature focused teams.
One of the best summarised explanations I've heard for the 3 major skill levels is: "Juniors learn how to solve a problem. Middle devs know how to solve it. Seniors know how to avoid the problem in the first place.". This level of intuition and awareness for the job at hand can only come through experience and practice.
As said, this is a rough and summarised description of seniority levels. You'll see many slight differences when comparing it with other descriptions, but this serves a purpose of introduction to those roles and their responsibilities inside a team, and as a way for you to compare them with situation in different industries you might already be familiar with.