Become a better software engineering manager
I didn't set out to become a manager of software engineers. One day I was the principal software engineer on the team. The next I'd shifted to a management track. I initially wasn't sure if I'd made the right move but I now really love building great software teams.
I've dipped in and out of management over the years but I've now been a software engineering team lead for the past 4 years. I manage a team of 8 software engineers of different levels of experience and every day presents a new challenge. Here's are some learnings which have helped me on my journey. I hope they can help you too.
It's a different careerPermalink to "It's a different career"
A software engineering management role is often seen as the next step up from being a software engineer. It's not. It's a different discipline. If you love coding, you probably won't be doing as much of it if any. There are many reasons to become a manager but make sure you know what you're getting into. It shouldn't just be the next step after becoming a senior engineer. People management is something different than managing a codebase. Take a look at some reasons to not be a manager written by the awesome Charity Majors before you consider a management role.
You'll have imposter syndromePermalink to "You'll have imposter syndrome"
You've spent 20+ years writing code. You can reverse a binary tree on a whiteboard while deploying a Kubernetes cluster. If you can do that, being a manager must be easy right?
Your day of coding will be replaced 1:1s with your team, stakeholder meetings, backlog grooming in Jira, looking through résumés, writing technical documents, and so on. For a while you won't know what you're doing but perserve. The imposter syndrome may always be there but it will stop nagging you eventually. Ensure you find a network of peers that can help you to learn. Find other engineering leaders who have done this for a bit longer than you have. Share your journeys and you'll find that other people struggle at times too. A network of peers is really helpful. Meet them regularly and it will help you all to grow.
Build a culture of positivity and honestyPermalink to "Build a culture of positivity and honesty"
Your job is now to manage and lead a group of people to success. It's your job to set the tone for the team and help to define the team's culture. Be the one who builds a culture where all voices matter. A junior engineer can have great ideas like your more experienced developers but you must allow them to feel comfortable enough to share them. Ensure that your meetings are inclusive and make all of the team feel comfortable enough to share their opinions. Why not use a collaborative document instead if you feel that some people are less comfortable at public speaking with more senior engineers around. Help to set the expectations for code reviews and ensure that it feels like a learning experience rather than a telling off. Appreciate your team in public. If someone has written some fantastic code or released a great new feature, share and celebrate it both inside and outside of the team. Most people are quick to complain about mistakes but aren't so fast at thanking people for great work. Be the champion of your team!
Trust is the keyPermalink to "Trust is the key"
Most people won't let you down. Trust them to do their best work without micromanaging them and telling them exactly what to do. Yes, it's your resonsibility to ensure the work gets done but do this by setting the direction and not piloting the ship. There may be times when the team doesn't enjoy the work so your role is to explain the difficult choices which may have been made. If you've built an culture of honesty and openness, the team will understand. Allowing autonomy in the team will lead to greater motivation and a belief in their own decisions. If you trust your team then your team will trust you.
Become a great listener and communicatorPermalink to "Become a great listener and communicator"
Your new role as a manager is mostly about clear communication. You'll be talking with project stakeholders about the requirements and deadlines for the project. You'll be sharing details with your team and setting the technical strategy for what you need to do. You'll be hearing about the needs and struggles of your team in their 1:1s. You'll have to provide mentoring and feedback for your team. What you say and how you say it will matter to the team, your manager, and other people you deal with. Try and learn how to write and speak clearly. This isn't easy but it's a skill you should attempt to get better at.
Know that some conversations will be difficultPermalink to "Know that some conversations will be difficult"
Your job as a manager means you'll have to deal with the good and the bad. Your team won't be happy all of the time. You'll need to be a great listener and able to deal with tricky conversations. This has been even more apparent over 2020 and a global pandemic! If you've built a culture of openness, these conversations should happen regularly and you should embrace the fact that your team feel comfortable enough to be honest with you about how they feel. If you don't know the answer, it's ok to say you don't know. Ensure you've got support networks to help you find answers. If it's a conflict within the team, talk to everyone involved and help to resolve it as quickly as you can.
Your job isn't to know everythingPermalink to "Your job isn't to know everything"
When you first start to lead a team, you expect to be able to answer all of the questions from all of the people. You quickly realise that this isn't achievable. It's time to be comfortable with saying "I don't know" to people. It's better to become an enabler for the team. You might not know the answer but you can find out from your senior engineers, or other team members. Open up your network to the team and connect them with the people who can answer their questions. You become more valuable to the team when you realise you don't have to know everything but you know where to find the answers.
Advocate for your teamPermalink to "Advocate for your team"
Your team won't necessarily have the voice that you have as a manager. It's your job to shout loudly about how amazing they are. You should be sharing the great work they're doing with the rest of the department. You can be a supporter of team members and help to guide them in their career. It's up to you to help to mentor and develop the team. Open up your network to them and help all of your engineers to find new opportunities to grow. If you do this you'll bring the whole team up. I've always loved the saying "A rising tide lifts all boats". Bring everyone along on the journey with you and help the whole team to succeed.
Keep on learningPermalink to "Keep on learning"
Being a better software engineering manager is an on-going process. Ask for help from your manager and peers. Talk to your team and ask them how you can improve what you do. Ask for a step-level 1:1 with your manager's manager and learn from them. New challenges will come at you each day but embrace them and work out strategies to deal with them. Never stop learning and share your experiences with other managers. Let's help each other!
This isn't an exhaustive list and I'm sure I'll think of more ways of becoming a better manager as I learn them myself. You can read some other great suggestions on my good friend Gavin's website. He's another software engineering manager that I trust.
If you want to read about my journey from a being a developer to a software engineering team lead then I shared my thoughts in an interview on the Dev To Manager website.
Want to read more?
Never get too comfortable
Everyone needs to feel comfortable at work. However, getting too comfortable can become a problem.
Be a force multiplier
Want to become a senior developer or software engineering manager? Forget being a 10x developer. Use the force!
Asking for feedback as a leader
Feedback is necessary for a growth mindset and to continuously improve. As a leader, we often give feedback to our team but forget to ask others for it.
How do you measure success?
Being successful means different things to different people. How do you measure your own success?