I often wondered about the difference between junior, mid-level, and senior developers, so I decided to write a short article about the topic.
First of all, I should say that companies qualify developers in different ways and can rely on different factors. For example, the number of years of experience, although the number does not necessarily correlate with qualifications. A person can, for example, can perform the same simple tasks for several years without gaining any valuable experience, without solving a single real problem, and without getting a single bump, or he can gain real experience and improve his qualifications in one year. So at one company, the same developer can be qualified as a senior, and at another as a middle, and vice versa.
As the main criterion, I would single out the degree of independence or generality of the tasks that a specialist solves.
Junior solves simple technical problems with a clear and detailed description. For example, the implementation of a class, while the description should have detailed requirements, for instance, an interface or which design pattern to apply. Junior does not solve business problems, does not work in architecture, and works under the close supervision of senior colleagues.
Mid-Level, unlike junior, already solves business problems with a more general formulation. It does not need a detailed description of the implementation, but it needs clear business requirements in the form of a description of the desired functionality. He can think on his own about what classes he will need, what tables, templates, etc., as well as performance issues.
How is the senor different? The senior does not need a clear statement of the problem. He, as a rule, has a good understanding of the subject area and can offer solutions to business problems. He does not need a detailed product or technical requirements, if necessary, he himself asks clarifying questions. Also, the senior is able to decompose tasks and give some of them to middles or juniors and control their carrying out. A Senior thinks systematically. Junior mentoring can also fall on the shoulders of a senior. Also, a senior can solve architectural problems if there is no architect or tech lead on the project, who is essentially the same senior, only in addition he is responsible for the entire architecture and technological landscape of the project.
In addition to the levels above, which do not depend on the technology stack, one can also distinguish technical qualifications. It determines the knowledge of certain technologies and does not always correlate with the levels described above. This happens when, in particular, when a developer is transferred to a project with a new stack for him. For example, a senior who specializes in Java development is transferred to a Python project, which he does not own. He retains the level of “seniority”, and he can learn the language in a short time.