After watching a video on software development career progression I thought I would share my view on career progression, which is typified by the junior, intermediate and senior labels. Is this simply a measure of years? Of leet coding skill? What magic bestows these honours?
My own view is that this is a progression of responsibility. When you begin as a coder you will usually be taken under the wing of a senior developer or team leader who will feed you specific narrow tasks that are usually not on the critical path. Your code will be examined in more depth than other developers. You might feel as a junior developer that coding is mechanical, and that your only job is to complete the small tasks assigned by your superiors. At the entry level you have almost zero responsibility. All responsibility is taken by others who are ensuring your work is correct.
Once you prove yourself as competent and the team leaders or senior developers become more comfortable with your work product some of the responsibility shifts to you. As an intermediate developer you are responsible for the quality of your work. This is not to say there are no systems to ensure quality such as unit tests, but it does become your responsibility to ensure these processes are followed and that the quality of your work is maintained. You may however still be given responsibility for small sections or in modern terms 'stories' to complete. Your responsibility may have grown, but you are not responsible for the higher level aspects of overall system architecture.
Senior developers take on new responsibilities. They take on the responsibility of mentoring and developing other developers. Sometimes this extends to team leadership, although team leadership involves more than mentoring. Senior developers also take responsibility for the overall quality of the system.
Team leaders take on further responsibilities such as project management, team communication, customer liaison and other communication functions. The team lead should be one that developers respect, who can lead through example rather than command. They have taken on responsibility for overall delivery of the product, which means finding a path between quality and efficiency.
In essence career progression is not about collecting an increasing set of arcane leet coding skills; I've known many excellent developers where skill is unrelated to experience. Rather it is about increasing responsibility, both for those working with them and for the products they are making as a whole.
Finally, as we reach the 'senior developer' area a curious thing happens; the label loses its meaning. I'm only concerned about working with good people. For me the labels are arbitrary anyway, although not totally without meaning. My goal as a team leader is to inspire my team to reach higher, to be passionate about what they do. Because intrinsic internal motivation is always far better than superficial labels.