
Job title cohorts are generally meaningless outside of corporate shenanigans, but it can be fun to find ways to bucket them in a non-arbitrary/non-tenure fashion.
For example, IC Software Engineer tiers (Junior/Senior/Staff/Principal) can be categorized based on what the engineer tends to focus on.
The Junior Engineer focuses on learning.
A junior engineer's priority is going to be on learning. This isn't to say an IC ever stops caring about learning, or anybody in life ever stops growing. But the reward for putting hours in as a junior is accumulating experience.
This makes juniors super valuable, especially if they are high performers. They are easy to direct, they're inexpensive (relatively), and they generally aren't afraid to work on the nasty stacks.
The Senior Engineer focuses on the code.
Senior engineers care about things like design patterns, paradigms, DRY, and performance. They now have opinions, can command a higher salary and have a deeper understanding of things in their purview.
They can sometimes be tough to manage (like most teenagers), but valuable as they have the ability and desire to keep a high bar on your software quality.
The Staff Engineer focuses on the product.
A staff engineer cares less about low level code quality, and more about the overall product utility. What's the point of pristine code in a product nobody want to use?
This is inherently cross functional, an engineer at this level is growing their soft skills and learning KPIs outside their department.
They are valuable, difficult to find, and can be expensive.
The Principal Engineer focuses on the business.
They don't get to code much, if at all. Their job is to find places where technology can be leveraged to advance the business, and defining KPIs to get there.
A principal engineer is concerned about market competition, budget constraints, ROI, etc.
Their skill set is valuable, expensive, and relatively niche. It's entirely possible to run a business, even a small tech business, without this position.