I have moved from being a tech lead to engineering manager close to a year ago. I wanted to share some of the things that over prepared me for a softer landing over the years, when making this leap from individual contributor to management. It is not the easiest change, after all:
1. Maximize your learning: move projects and teams often
I've worked at six companies on eight teams with nine different managers the last ten years. A lot of this happened by chance - for example, two of my company moves were just due to me relocating. At the same time, there was a theme of me getting bored of working on the same thing after a year. When this happened, I either changed projects or teams within the company. When there were no good opportunities, I changed companies for a new challenge.
Working with many teams and people have given me a breadth of experience. I worked at companies big and small, growing and stalling ones, agile and not-so-agile ones. I got experience building projects used by few customers and ones by millions, shipping several successful projects and failing a few. Having this kind of diverse experience helps me relate to challenges I face day to day better. No two situations are ever the same. Still, I find it easier to make good decisions when I have experienced a somewhat similar challenge before.
2. Master many technologies, languages, and stacks
In my ten years an engineer I worked on thick clients, web, backend and mobile stacks. I've used a dozen of languages and mastered a few of them. All of this happened by a combination of learning at work, side projects and teaching.
Work has been the main source of my professional learning. I aimed to master the languages used on projects here both by finding mentors in more senior engineers, as well as reading books to become more of an expert on them. After I became hands on enough with a language or stack, I would start to explore another language, pair with engineers working on other stacks and volunteer for projects using different technologies.
I've found side projects a great way to compliment the skills I built at work. For example, I've never done professional mobile development, but when Windows Phone was announced, I built several apps for this platform. These apps were surprisingly well-received, which led me building a Python backend and give several conference talks. All of this was new, exciting and educational.
Teaching is something that helped me master technologies even better. Early on in my career, I started to participate in team knowledge sharing sessions, followed by attending local meetups and also recording a three-hour in-depth training. These activities pushed me out of my comfort zone and forced me to deepen my knowledge.
Having a solid engineering and technology background helped me move into a management role with greater confidence, better understanding what and why backend, mobile or web engineers on my team are doing.
3. Observe and learn how your manager works and leads
I had a lot of different managers, having worked on many teams. Some were great, some were neutral and some I disliked. A couple years into my career I started to observe and try to understand what and why they do. I started making a mental list of good and bad things I saw. For the bad things, I decided that if I was ever to be a manager, I would not repeat those.
An example of a bad thing I experienced was my manager delegating something to me, then stepping in and taking it back as I was really close to fully finishing. All without much explanation. The memory of being angry, frustrated and feeling not trusted is still vivid and something that made me want to not repeat with people on my team.
4. Read and learn about leadership, project and people management
Well before I became a team lead or manager, I already started to read a lot about project management, managing teams and leadership principles. I always thought leading and managing are hard and found it interesting to learn more. There are countless amazing books on this topic, as well as other online or offline resources. A few ones I would especially recommend are these.
- The Lean Startup by Eric Riles. On many of the projects I work on I use some of the principles discussed in this book.
- The Managers Path by Camille Fournier. Hands-on advice for all parts of the management ladder.
- Turn the Ship Around by L. David Marquet. Turning a top-down run organization like the military into an empowering place, run by the people. And you get to read about what it's like to run a nuclear submarine!
- The Hard Thing about Hard Things by Ben Horowitz. An entertaining and engaging read on how a company went from zero success and how for leaders it can get pretty lonely.
5. Step up for opportunities teach, help the team and lead
The more experience I gained in on a team or tech stack, the more opportunities I had to help others. Pairing and mentoring were things I started to do without thinking much about it. When someone on my team was stuck and I could help, I would sit with them or do some extra sessions to help. Whenever new opportunities for projects came up, I often volunteered. As I started to lead efforts, I grew interested in project management, read more about it and proposed improvements at a team level.
As I grew more experienced, I started to suggest directly to my manager on how I could help the team. Doing this initially meant me moving out of my comfort zone to put myself and my suggestions forward. The more experience I had under my belt, the easier this got. For example, when I was at Skyscanner, I noticed how we had a very ad-hoc way of dealing with incoming bugs. I proposed to use a new process that I had previously seen work well at Skype. No one objected, so I went ahead with a simple bug backlog and grooming process. This change worked well, the team got more productive and I got positive feedback on taking initiative.
6. Start owning your career and be seek out opportunities for the next level
I did not think much of where I wanted my career to go for many years. I just went with the flow: learning what I could, getting feedback and acting on it so I would keep growing professionally. I didn't even fully admit to myself what I wanted to do next - like wanting play a lead role in the next, upcoming project. Still, I felt disappointment when someone else got that opportunity and felt I couldn't talk about this with my manager, as I never brought it up before.
I now regularly stop to think through where I am with my career, where I would like to go and talk this through with my manager and management chain. Doing this forces me to be honest with myself and results in productive conversations on the reality of where I'd like to go next, a reality check on those goals and actions I can take to get there.
This is also how I moved into engineering management at Uber. After tech leading a team for a few months, I told my manager that I would be interested in doing more of a management role, should there be an opportunity. We had a frank discussion on whether this was realistic. As with many internal moves, moving into management not only requires the drive and some level of experience, but also an opportunity to do so - none of which were available at the time. Months later, when there was an opening, my manager was already supportive and we kicked off the process to transition.
7. Invite feedback and be receptive to it
Transitioning to managing people and serving a team after years of writing code is a hard change. One thing that helped me get more ready is asking people for feedback. I did this whenever I had a conflict with someone, when I mentored someone or when I worked with a team in some way. I especially valued critical or negative feedback - not all people will go the extra mile to tell you flaws others know about to you. I digested this feedback and did my best to act on it.
Asking for frequent feedback made me a more aware of how others see me and motivated me to change for the better. I became more self-aware of my strengths and weaknesses. As the biggest impact, it pointed out some of my blind spots, bad habits and areas that I needed (and still need) to work on that are especially important when managing.
Opportunities are more plentiful in high-growth companies
When I graduated, I had no idea that I want to become a software engineer, even less being an engineering manager. Software engineering is this wonderful field packed with things to learn, problems to solve and paths that can be very different for any two people. The longer one is in this field, the more likely leadership and management opportunities naturally come up.
All things being equal, opportunities to take on more responsibility, to lead and to move into management do happen more frequently at high-growth environments. It's also a lot easier to observe and learn from how leaders in places like this. I left Skype to join Skyscanner as the third full-time employee in London, in the middle of explosive growth. The next hire was our SVP engineering, Bryan, whom I worked side by side to grow the office and teams. When I left for Uber a year and a half later, the London office grew over 10x and I departed with important lessons on growth and leadership, all experienced first hand.