My personal musings on the common thought that a senior/principal developer is only a stepping stone to a manager.
A Developer’s Career Path
You have become a developer because you love coding and the whole process of turning ideas into code. Building something out of nothing. Learning new technologies, programming languages, frameworks, etc. Figuring out how things work. From a Junior Software Developer, through a “regular” Software Developer, up to a Senior/Principal Software Developer, you have been enjoying everything you do.
Now, if you are good at what you do, or you exhibit managerial abilities, or there is simply nobody more suitable in your team, you may be asked to become a manager. The common thought at this point is that “Becoming a manager would be a natural progression”. I would like to argue that this is not always natural, and you should not be forced to do something you do not want to do.
Why Is It Not Natural?
First of all, if you take a person who loves coding and turn them into someone who does not code, what is the logic there? They will start feeling disconnected from their passion, and eventually burn out and start hating their job. They can force-push past this and code anyway, but when a manager is coding, it means that managerial duties are not being done. In other words, doing the work of the team means that the work of the manager is not being done. That is not good for the business. Why would you have a manager if they do not manage?
Second, if a person is a good coder, it does not automatically mean they will be a good manager. Development and management are two different types of jobs, both requiring specific skills and mind sets. It is similar to football players and football-team managers. If one is a good footballer, it does not say anything about them being able to take care of the business. Management is about working with people and setting them up for success. You get results by enabling people to do their work, not by doing the work for them. On the other hand, a developer is more of an individual contributor. You should be a manager if you enjoy getting work done through other people instead of doing it by yourself. Also, you should consider your social side first. If you are not a social person, you may not necessarily be good at management. Similarly, if a person has trouble taking care of themselves, do you think they will be good at taking care of others?
Third, there is a concept called Peter principle. Basically, it is an observation that people in a hierarchy tend to be promoted based on their past experience until they reach a position they are incompetent to do. Thus, a good developer gets promoted to a manager, and if they are not prepared for that, they will be unable to do their work. Turning a great developer into a poor manager cannot be good for the business. Instead, people should be promoted when they are already doing the job they are being promoted to. If a developer is not acting like a manager, do not promote them to one.
Fourth, some people take a managerial position for the extra money. While it is true that managers often earn more than their subordinates, this does not have to be necessarily always the case. If you have a group of specialists and a manager to manage them, why would the manager need to earn more if the experts are very hard to replace? As I have argued above, being a developer and a manager are generally two different jobs, and a good manager does not necessarily have to be a good developer. If the contributions of developers exceed that of the manager, I see no reason they should earn less. Anyway, remember that your wage is not everything. If you enjoy what you do (development), earning less could be a better option than being a manager earning more but feeling miserable and hating your job.
Fifth, do not take a managerial position only because there is nobody else in your team to do that. This is not your fault. You should choose your career path consciously. Otherwise, not only you will get harmed, but also the company.
So, what if you love development but do not want to become a manager? Fear not, there are other possibilities!
What Are My Possibilities?
While it is true that a senior/principal developer can be a stepping stone to a manger, it does not have to be that way. There are generally two career paths (ladders if you will): a managerial one and a technical one. Becoming a manager will set you on the managerial path. However, you can stay on the technical track.
- Senior/Principal Developer – This can be a career position at which you want to stay. It is perfectly normal to have solid Senior/Principal developers who are happy being individual contributors, and do not want to move to management or general architecture.
- Lead Developer (Technical Lead) – A semi-managerial role. Lead Developers lead projects and people purely from the technical viewpoint. They do not have direct reports and do not boss people around; they lead by gravitas. They generally act as a final judge of code aspects. However, your mileage may vary as their job description differs from company to company.
- Architect – If you are good at and enjoy designing complex systems and want to stay on the technical track, you may become an Architect. Technical architects are often considered the highest position on the technical career ladder. Their job descriptions also vary a lot, even to the point that some Architects do not write any code (which can be considered an anti-pattern).
Anyhow, I would like to stress that role names and their job descriptions differ a lot, and the responsibilities of many roles are sometimes conflated to one.
I, similarly as e.g. Shem Magnezi, hope that there are developers in the audience that will get relieved by the fact that their “I am not sure if I want to be a manager” thoughts are completely normal. Do what you love doing, and do not let other people talk you into something that you would hate. Indeed, programming is one of the jobs that you can actually love doing. Do not get me wrong; Being a manager is completely fine and I know managers who enjoy what they do, but this is because they love the people dimension of the role. Just think about what you actually enjoy doing when considering your career path.
What is your take on this topic? Does what I have written resonate with you, or do you think I could not be more wrong?
Apart from comments below, you can also discuss this post at /r/programming.