The terms junior, intermediate and senior are primarily related to responsibility. A junior has no responsibility. Juniors are generally not given critical path jobs, rather given reasonably easy to complete tasks that are not critical. At this point a senior developer or team lead is responsible for them. A intermediate developer is one who is trusted to implement code responsibly. They are trusted to complete tasks or stories with minimal oversight. A senior extends responsibility beyond their personal efforts. This may involve mentoring, system design, team building, scheduling and development practices.
This is not about age or development skill as such, it is about increasing responsibility and ownership. Such progression is not necessarily automatic. You can get locked into restrictive roles which do not allow you to take on additional responsibilities. I have found smaller startups provide roles that are less strict in terms of separation of roles, which allows people to develop their skills. Larger companies tend to be more inflexible, but there is a rather wide variation in company culture.
To be honest the terms themselves can be potentially corrosive unless you clearly communicate to developers what is required to advance in terms of responsibilities.
Spot on, this this is really what titles are about.
As a Junior myself, this was exactly the definition I needed to see. It makes so much sense!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.