I would consider that most tracks need to have at least three levels:
- Junior or trainee
- Intermediate
- Senior
Then for some tracks you might want a level that is reserved solely for the very few experts in their field who you would prefer to pay a senior management level salary to in order to retain them as technical experts rather than force them into management get a pay raise. You could call this expert level. This will help you avoid turning a great developer into a mediocre manager.
The majority of your employees should be at Intermediate level but Senior should be attainable. Expert level should be rare and should require significant contributions to the organization and/or the profession.
You should spell out what tasks (and level of independence at performing them) a person at each level should be able to accomplish, so that people can know what they have to do to move from Junior to Intermediate and Intermediate to Senior. HAving the differences described helps immensely when you have to explain to one employee why you promoted someone else but not her/him. It also helps that underperforming employee see that once the performance criteria is met, he or she can still get promoted. Some of the worst employees I ever worked with were ones who were capable of doing senior level work but who had gotten the idea that they wouldn't get promoted no matter how good the work they did was.
In particular, I believe the move from Junior to Intermediate should be automatic once certain criteria have been met. Keeping people at trainee level once they are no longer trainees is short-sighted and ultimately bad for the company. You will lose the best ones (who can easily find intermediate level jobs elsewhere) and retain the worst ones.