I think in every Software Engineers life comes a time when they need to decide if they want to pursue a career in engineering or switch to management. There are pros and cons to both of those choices, it all depends on what your character is like, what you want out of life and how well you can manage work-life balance.
I became CTO of a small company (< 40 Employees) almost two years ago (UPDATE: I am part of mindnow AG now), and that switch made me work harder than ever before, suddenly the things I needed to do didn't fit on a single to-do list, and as the weeks went by the list kept getting bigger. During that year I finally managed to structure my work and I would like to share with you a few things that I think are important and would have made my life easier if I would have known them back then.
First there are some points you need to keep an eye on while transitioning from developer position to a management position from the same team or just in the same company.
1. If you're moving from the same team to become their management, you need to make sure that they respect you as developer (expert) first.
This is an important one, as otherwise your management calls will be questioned and there will be a sense of distrust between you and the team. Remember how your manager used to suggest some bizarre stuff to do, to improve the efficiency of the team? The more respect you have before becoming the manager, the less friction you will have with your ideas that not everyone agrees with.
2. Your friendship with your teammates will suffer once you're their boss.
If you want to continue being friends outside of your job, then it's best to leave work conversation inside the office building. This problem has several sides to it. The first one is that some of the people on your team might view your friendship as a source of bias towards that person. They will assume that if your friend supports you, then she is doing that not because it's objectively good, but because of the friendship. Another problem is that, there will come a time when you will have to have unpleasant talks with that friend. This always happens, no matter how strongly you support your friend, everyone makes mistakes. And if you don't do the unpleasant talk, then others will see this as unfair.
Usually a transition to a leading position results in some habits needing to be rid of. Here are some of my personal habits that I needed to let go.
1. Desire to do everything yourself.
Of course you can do it better. Of course you can do it faster. But your time is limited and there are other more important tasks at hand that need dealing with. Learn to delegate and learn not to look over the shoulder of the person you're delegating with. Assume they will finish the job in a timely matter and as good as you. Only after the person fails to deliver should you have the talk about your expectation of standard, how fast you expect the tasks to be done and the quality of the result.
It's also a possibility that once you start doing everything by yourself, people will start expecting the same from you next time.
Don't be a bottleneck. If a matter is not a decision for the President or you, delegate it. Force responsibility down and out. Find problem areas, add structure and delegate. The pressure is to do the reverse. Resist it. - Donald Rumsfeld
2. Desire to be the know-it-all.
It's impossible for you to know all the answers, and it's OK when you answer with "I don't know" to some weird technical question. The important part is that you can connect the person that's asking the question with the person that knows the answer. Or at least set him on a path that leads to the answer.
None of us is as smart as all of us.
3. Closing up and working alone.
Sadly you will not be able to work alone anymore. The whole workflow of getting a task -> doing the task -> submitting the task for review without zero human interaction is gone. (Although you will have to maintain that healthy workflow environment for your developers.)
The key quality you will be required to improve is communication. You will need to talk with your developers. A lot. You will need to talk to your Directors. A lot. You will have a lot of calls and a lot of emails during the day. That's just how it is, and there's no way of avoiding it. Unless you do the job of maintaining a healthy environment bubble around your developers, people will start approaching them directly and annoying them with their stuff. This will make your team unhappy. So take care of communication for them.
4. Caring only about your part of the work.
"My module works, so it's not my problem" or something similar along those lines should now be taboo in your vocabulary. Your responsibility now is the success of the company so you're not allowed to say that you did your part and everything else doesn't matter. It matters. If some other department is causing your team/department speed to slow down, it's now your problem. If there's a blocker somewhere outside of the company, like with third-party providers - you need to sort this out. Either delegate that to someone or solve the problem yourself, but there should be no "Our work/their work" mentality now.
There's also things that I needed to learn and improve after switching to management position, here are some of the things I consider important:
I'm going to repeat this here as this is so important. The amount of communication you have will increase ten-fold, you will need to hire people, you will have to talk to other people to make them more productive, to discuss their problems etc. Soft-skills are key in any management position.
The art of communication is the language of leadership.
2. Stress management
If you think you had stress when you couldn't fix a bug or couldn't finish enough tasks during a sprint, think again. Now you will be the shield for your developers, so everything negative that goes to your team will go to you. Interesting fact, everything positive will also go your way, so there's that.
You will have multiple stakeholders that are pressuring you and think the thing they want is the most important one. Instead of having one manager telling you that you need to work faster you will have multiple people wanting different things from you and wanting them fast.
You will need to learn how to deal with stress, personal advice - meditation, sports, and digital detox during the weekend.
Paying attention to your body and taking care of yourself will help you deal with the stresses of leadership.
3. Decision making
This is also important. Every decision you make from now on will probably concern your whole team and the company in general. You will need to think about all the trade offs you're making. Decisions usually contain some sort of trade offs, for example decision to do refactoring of some part of the code is a trade-off between current stability and future maintainability. Rewriting some Monolith into a bunch of Microservices is usually a trade-off between scalability, development cost, complexity, performance and maintenance.
Leaders are often responsible for making challenging decisions, such as whether to rewrite the service from scratch; whether to keep an employee or let them go; whether to share “bad news” with Directors.
4. Ability to learn and adapt new things
There's constantly new stuff being developed, new programming methods being announced. It's important to stay open and absorb as much information as possible to stay ahead of the curve.
Being in management does not mean that you need to stop watching Coursera videos or doing Udemy courses about Distributed systems. For you as a decision maker, it's important to have a broad knowledge about many things, the only way to achieve that is to never stop learning.
5. Accept that you will be wrong.
Being wrong is an unpleasant feeling, but you will probably experience it multiple times if you have people working for you that are smarter than you. It's OK to be proven wrong. Being wrong means that the suggested solution is better than yours which is eventually better for the company in general. Do not hold a grudge against someone with whom you argue, as that will lower their desire to argue with you in the future. Only in arguments will the most optimal solution be found.
6. Caring about small things
If you're the head of the department you will need to be the one who enforces standards, who cares about documentation, workflow, technical debt etc.
As you know not many developers like writing tests or documentation or sticking strictly to the specified workflow. This is now your responsibility to make sure that all of the above things are begin done.
1. You will meet a lot of interesting people.
This is one of my favorites. As you're in a position where you're forced to constantly communicate you meet a lot of smart people. Basically it will give a boost to your professional network.
2. You have influence on the direction of the company (or a part of it)
You are now part of the driving force of the company, you get to decide, or at least vote on some parts of the strategy. This is a very fulfilling feeling, and the smaller the company the bigger an impact you get to have. But remember with great power comes great responsibility.
This is an amazing opportunity to learn new things that were unthinkable for you before. As Software Developers we are mostly focused on single bugs or parts of feature without expanding our horizons (during work hours, we still can build side projects with new technology over the weekend). But switching from development to management is a whole new field and there's just so many new things to learn.
If you want to talk about this topic, send me an email. Always interested in meeting new people!