The blanket terms "junior" and "senior" for development roles abstract away a lot of the minutiae of a developer's skill set, which to me seems good and bad depending on the context. The way I understand it, "senior" is the most concrete term, and there are more specific understandings and expectations around it that are more easily assumed/deducted from the phrase alone.
However, there's extra flux with the term "junior". Yes there's the term "entry-level", but that's not as widely adopted as the term "junior". I've worked with "junior"s who know practically nothing about the technology beyond completing simple tutorials, juniors who have no experience in other technologies beyond one language or environment and don't know source control or anything else, juniors who do know numerous technologies and have a thorough understanding on architecture enough to have valuable opinions within the context of a project, and juniors who have widespread capabilities and are close to senior but aren't quite there yet. All of them for better or worse consider themselves "junior"s, which to me seems improper.
To illustrate, I'll use Major League Baseball:
- Rookie player --> Entry-level developer
- Class-A player --> Junior Developer
- Double-A player --> Junior Developer
- Triple-A player --> Junior Developer
- Major League player --> Senior Developer
There's a lot of abstraction that can either oversell or undersell a "junior" developer's skill set beyond the other terms.
So, is there a communicative term or phrase that expressive a "junior" developer's skill-level more precisely than the blanket term "junior"? I realize it's a difficult role to define, but I was curious.