I've been a software developer for all my career - however, I'm thinking of changing to a leadership/management path down the line, when there will be opportunities to do so. What are things I can do now, while still an engineer, to prepare to move into engineering management, eventually? Resources (books, blogs) to dive into?
I get this question reasonably frequently. While I could cut the answer short by recommending a book or two on engineering management, that won't help you as much - not even to start.
While reading (theory) has its use, it's far from sufficient to become a decent manager and won't help in preparing for a transition as much as most people hope. I've known managers who have read a vast amount of management books and could recite parts of them. They were still poor managers. On the other end, I've known great managers who had limited theoretical knowledge, but had naturally great people skills and ran laps around the former ones.
So how can you prepare for a potential future management role? Put yourself in situations that managers deal with, day-to-day, and get better at handling these.
- Build your leadership muscle
- Make the team better
- Pick up the ungrateful tasks that no one else wants to do
- Give credit to others, selflessly
- Teach, mentor others and learn to delegate well
- Be the mentor/"intern manager" for an intern
- Give candid feedback to others and don't shy away from difficult conversations
- Network with others and build good relationships
- Observe and learn from good and bad managers
- Do your homework: read books, autobiographies, newsletters
1. Build your leadership muscle
Leadership is a skill you'll need, whether you move into management, or if you continue growing as an individual contributor. While it's an abstract skill, it's pretty easy to see if you can practice it. Can you lead a group of people, to achieve an outcome successfully, in a way that others appreciate?
Find opportunities to lead people: this can be both at work or outside of work. Focus on completing the project, then find a way to get honest feedback from others. What did they like about how you led the project? What were the things that they thought you could have done better? How clear did the project feel? When things did not work out, why was that?
If you are leading a project at work, even with a team of a few people, you can try using something like the project lead guidance I've put together, from having kickoffs to communicating with stakeholders.
Here are other activities that you could do:
- Lead organizing an event within or outside the company. For example, organize a meetup, a hackathon, a coding event, or a bring-your-kids-to-work day. Perhaps before leading the organization, you can volunteer to join in, then step up to take more responsibility. But you'll want to prove to yourself that you can lead non-trivial things involving several people, end-to-end.
- Take ownership of a problem area within the team/company. It could be the CI/CD system, QA, coding standards, interacting with customers, or something else. Choose something that seems important, and no one owns it. Step up and take the lead, collaborating with others. Draft a plan on how to fix the problem, involve your manager and other engineers, and make things better.
- Make sure you always finish what you start. When you take the initiative, or take ownership of a project, don't stop halfway. If you have too much on your plate, consider delegating, or making it clear to your manager and team, that you are stopping work.
2. Make the team better
The manager role exists because, with managers, teams perform better. Turning this around, one of the main roles of a manager is to make the team better. So look for opportunities to do this, even while you're not a manager.
Look for bottlenecks the team is facing that slows work down. This could be too many bugs making it into production, too slow build times, the upcoming work being unclear, and many others. Identify a major problem area and take the initiative to fix it.
3. Pick up ungrateful tasks that no one else wants to do
The job of an engineering manager is ungrateful, a good part of the time. Good engineering managers are servant leaders, often doing the work that no one wants to do, but it still needs to be done. How well do you deal with this kind of setup?
Look for work that is non-sexy, and people kick it down the road, like an empty can. Pick it up and fix it, knowing you won't get much credit for it. It could be making oncall less noisy. It could be writing better documentation - and many others. Learn how you'll react when you do important work that is invisible, and you get little to no recognition for it. If you don't like this feeling: ask yourself if management is what you'll really want? Many of your days will be spent feeling similarly.
4. Give credit to others, selflessly
Everyone loves getting called out for great work. Good managers make sure no result goes unnoticed. So start building this habit. If someone does good work, tell them - both privately and practice doing so in front of the team. Do it because you believe the work was good. And do it without the expectation that others will call out your work - that's not the point. As a manager, you will rarely hear anyone tell you that you've done a good job: like now, it will be others on your team who will get the praise.
To build this skill, you need to build more awareness of what is happening within the team and the organization. Talk to people, ask them what their challenges are and what tricky problems they've solved recently.
When you see great work, call it out. Do this in-person, like on standups. Practice doing it in written forms, sending praise to the person, perhaps their manager included. Do it because you genuinely think the other person did a good job, that otherwise could have gone unrecognized.
5. Teach, mentor others and learn to delegate well
Good managers are great mentors. Some are also efficient teachers and coaches. You won't be good at management if you're not good at helping other people grow. Luckily, you don't have to wait until you become a manager to start practicing this skill: as a developer, mentoring other developers is something you can start right away.
Activities you could do to grow this muscle:
- Pair with others: coding, planning, brainstorming. When you notice someone on the team stuck, offer to pair up with them. Sit next to them and help with brainstorming, pair coding, or drawing out their architecture. Ask open-ended questions and help them come up with solutions. Coach them as much as you can, and give them space to learn.
- Use code reviews as a teaching tool. When you see code that could be improved greatly, resist the urge to leave a huge number of comments. Instead, offer to pair with the developer whom you could help. When you do end up reviewing the code, aim for great, not just good code reviews.
- Start having one-on-ones with other developers. One-on-ones are an essential toolset for managers to help their directs grow. Start doing this yourself, especially with new joiners or more junior developers. Read about what makes a good one-on-one, and start doing them. Do this both to help others grow and set up ones where you can learn from other experienced leads or managers.
- If you don't have more junior developers to mentor at work, sign up for online mentoring platforms like Coding Coach, and help more junior engineers level up.
- Speak at local meetups or conferences, sharing your expertise on a topic in a way that others can learn from you.
- Volunteer to teach people how to code, or how to get better coding on various events. There are countless places where you can volunteer on topics like this. Take inspiration from Stripe engineering manager Kate Taggart, who, before switching to engineering management, spent a year tutoring university students.
Delegating well is an important skill to learn - even as an engineer. Good delegation sets a clear context but leaves the approach up to the person you delegate to. You specify the "what" but leave much of the "how" up to the person. People learn best from their own mistakes and good delegation recognizes this, balancing allowing people to fail and learn, but stepping in before things get too overwhelming for the person you've delegated to.
Good delegation means setting the right detail of context and checking in. Take the skill level of the person you delegate to into account when you hand over a piece of work. If they've never done anything like this before, give more detailed instructions and check-in more frequently than if they're more practiced. And always ensure to check-in on the result and do a small retro on the result. Did they complete it as expected? What went well? What was hard? What did they learn? Are they ready to take on this work by themselves the next time?
6. Be the mentor/"intern manager" for an intern
Internships are a win-win situation for companies: they bring enthusiastic people to the team and are a cost-efficient way to hire great talent. If your company has internships, volunteer to be a mentor or an "intern manager" for an intern. If your company or team doesn't yet have a program like this, propose it as an idea for your manager.
As a manager, having people interested in management mentor an intern is a dry-run I like to do. People can learn a lot about management and growing a less experienced person a lot from this exercise.
7. Give candid feedback and don't shy away from difficult conversations
Giving feedback is something managers frequently do with their directs. When was the last time you did this, though?
Start by gathering and giving feedback to your manager. What is something they could do better? What is something you appreciate them doing? You can also do this for your colleagues. When you see something positive, pull them aside, and reflect on why it was great, how they did it.
Giving negative feedback is tricker to do well. Avoid negative feedback antipatterns. Follow patterns like the Observation, Feeling, Need, Request pattern. Be constructive and nice, and listen to how the other person reflects.
Difficult conversations are easy to navigate away from. As a manager, however, you won't be able to do this. Giving negative feedback is one type of difficult conversation. Disagreeing with your manager, or someone senior to you, and being constructive about it, while standing your ground, is another one. When you notice a difficult conversation coming up, don't shy away from it, but embrace it. The more you put yourself in these kinds of situations, the better you will get.
8. Network with other professionals within our outside the company
Managers need to be great at building strong relationships across the business: with other engineering managers, product, design, and external teams. If you struggle to do so, you will struggle to be a well-connected manager, and you'll have a hard time in this role.
As a developer, start building good relationships outside your team. Activities you could do:
- Meet other leads outside the company. Have coffee with tech leads or recent engineering managers, connecting with them and learning about their transition and challenges.
- Connect with non-engineers, learning about their work. Meet people working in product, design, and other business functions in tech companies. Learn about their work, how it relates to the business, and what challenges their role has. This will help to build both empathy and your business sense.
9. Observe and learn from good and bad managers
I started to observe my managers in-depth well before I decided to give management a shot. I kept a shortlist of bad and good things I saw my managers do. I wanted to make sure I don't do the bad things but will be doing the good things.
The bad things on my list were my manager micromanaging and being disinterested in my work. I had managers who did this frequently - and I ended up leaving the team as a result. For the good experiences, I loved managers who gave me lots of autonomy but provided frequent feedback. I also liked this manager, as on a positive performance review, he still came up with specific ideas on how I can further stretch myself.
Everyone has different experiences with managers: the more managers you worked with, the more you can dig into these experiences. Analyze what behaviors made you like, or dislike a manager and why.
10. Do your homework: read books, autobiographies, newsletters
Finally, invest in your own education. There is an overwhelming amount of resources available on management. Make a list of ones you'd like to get through. Here are my personal recommendations. As an important note, try to avoid one-way information intake. When you read books, articles, challenge yourself to apply the content you took in, very soon. That is the way to grow: else you're wasting your time with theory that you will very soon forget. Read a longer list of books and newsletters on engineering leadership I recommend here. A few highlights:
- Become an Effective Software Engineering Manager - my #1 recommendation for anyone looking to move from an individual contributor role into engineering management. Hands-on details on what the role is like, in an easy-to-read format, with stories spicing it up. Read my longer review here.
- The Manager's Path - a short reference handbook for managers at all levels.
- An Elegant Puzzle - a long overdue read for engineering leads. The most hands-on read on engineering management I've picked up. See my in-detail review and book notes.
- The Goal - written in the '80s, yet a timeless novel on what management is about, may that be a manager of a team, an organization or an industrial plant.
- The Five Dysfunctions of a Team - an engaging story about a company struggling. It tells the tale ofhow the leadership team comes together under a new leader, doing small things that end up making big differences.
- Turn the Ship Around - a novel on empowerment, teamwork, and breaking down the hierarchical structure. All of it taking place onboard a nuclear submarine (really!).
- The Feiner Points of Leadership: a generic, but good management book from the former chief people officer of Pepsi.
Autobiographies are always a nice mix-up to read. All of them are very different, and as they are personal, each one will resonate differently with each reader. Here are a few that I recently read and liked.
- Hit Refresh - the story of Satya Nadella, and an insight into his servant leadership style.
- Shoe Dog - from the founder of Nike. Light on management, heavy on leadership - and how leadership from the outside can feel very different, from the inside.
- Winning - the autobiography of Jack Welch, CEO of GE. Interesting insights on career growth and winning in business.
- Losing My Virginity from Sir Richard Branson, founder of Virgin records, airlines, media and countless other ventures.
- Software Lead Weekly by Oren Ellenbogen, VP of engineering at Forter. Five articles per week on technology and leadership - all of them recommended reading.
- Level Up from Pat Kua, Chief Scientist at N26. 15-20 interesting links on leadership, tech, organizations, and processes.
Featured Pragmatic Engineer Jobs
- Founding Engineer, Front End and API at Causal. $175-225K + equity. Boston.
- Senior Software Engineer at Portchain. Coppenhagen or Remote (EU).
- Engineering Team Lead at Portchain. Coppenhagen or Remote (EU).
- Software Engineer - Infrastructure & SRE at Koyeb. €71-105K + equity. Remote (Global).
- Software Engineer - Service Mesh & Networking at Koyeb. €75-105K + equity. Remote (EU).
- Security Lead at Conjecture. £85-210K. London.
- Senior Software Engineer at Consensus. Boston, MA or Remote (US).
- Senior Frontend Engineer at Plain. £75-110K. Remote (Europe / 2 hours within GMT).
- Lead iOS Engineer at Polarsteps. Amsterdam or the Netherlands.
- Distributed Systems Staff Engineer at Reframe Technologies. Remote (Global).
- Senior Software Engineer at Karat Financial. $160-225K. Remote (US time zones).
- Senior Backend Engineer - Ruby at Rise Calendar. €80-120K + equity. Remote (Europe). I'm an investor.
- Senior DevOps Engineer at Droit. $170-205K. New York.
- Senior DevOps Engineer at Droit. London.
- Full Stack Engineer at Applied. £45-69K. London or Remote (UK).
- Solution Engineer at Pigment. $90-180K. New York or Toronto.
- Senior Backend Engineer at Pigment. €60-130K. Paris.
- Senior Engineering Manager at Whimsical. $185K + equity. Remote (US, Canada).
- Engineering Manager at Bobsled. $170-190K. Remote (US, Europe, South America).
The above jobs score at least 10/12 on The Pragmatic Engineer Test. Browse more senior engineer and engineering leadership roles with great engineering cultures, or add your own on The Pragmatic Engineer Job board and apply to join The Pragmatic Engineer Talent Collective.
Want to get interesting opportunities from vetted tech companies? Sign up to The Pragmatic Engineer Talent Collective and get sent great opportunities - similar to the ones below without any obligation. You can be public or anonymous, and I’ll be curating the list of companies and people.
Are you hiring senior+ engineers or engineering managers? Apply to join The Pragmatic Engineer Talent Collective to contact world-class senior and above engineers and engineering managers/directors. Get vetted drops twice a month, from software engineers - full-stack, backend, mobile, frontend, data, ML - and managers currently working at Big Tech, high-growth startups, and places with strong engineering cultures. Apply here.