Notes on technical mentorship

Sun Feb 21 2021

tags: draft public software engineering

Introduction

I thought Richard Artoul's post From coding bootcamp graduate to building distributed databases on HN today was excellent.

What can I learn from it and how can I maximise my own technical mentorship?

Take responsibility for your career trajectory

At some point in your career you’ll have to start taking responsibility for your career trajectory. The key insight is that you should make decisions about what projects to work on and which teams and companies to join strategically, not tactically. Think long term.

In the grand scheme of things, a 10% to 30% difference in compensation for a few years is small in the grand scheme of your career. After my first two years at Uber I could have switched companies for an easy 30% to 40% boost in my compensation, but instead I made a strategic decision to position myself on a team where I was paid “below market”, but where I was developing skills that I would leverage to achieve a 3x jump in my compensation later.

In particular, there are two areas that you should pay particular attention to:

  1. Finding good mentors
  2. Developing a valuable and unique skill set

Do whatever it takes to find good mentors

Nothing will accelerate your growth faster than spending all day working with other very good engineers. The moment you start to feel like you’re not learning from the engineers around you is the moment you should start looking for a new team.

Keep in mind that when I use the term “mentor” I mean engineers that you work with everyday, participate in design discussions with, and who review your code on a regular basis. This is very different from a “mentor” that you solicit career advice from once a month over coffee.

There is no exact formula for finding good mentors. The key is having the humility to recognize those people when you meet them, and to be willing to make sacrifices to be around them.

If you work at a large company, this process shouldn’t be too difficult. Start asking around and try to identify a high performing team with very good engineers doing impactful work, and then do whatever you can to start working with them. Offer to help out on their projects on your own time, or if you’ve been at the company long enough and have built up some social capital, try and transfer to that team. Your manager may not be happy about it, but hiring is hard and the manager of the team that you want to join will likely extend the necessary political cover to make the transfer happen if they think they can get a coachable and motivated junior engineer with a proven track record “for cheap”.

In my case, I was working at Uber and had been working on the same team for 18 months and was stagnating technically. I told my manager that I was going to start looking for a new team and then I spoke with the managers of 15 different teams at the company. The team that seemed to have the most skilled engineers doing the most technically interesting and impactful work was located in New York, a city I had no interest in moving to, but I flew to NY on my own dime and spent 3 days working with their team on a small task. After meeting the team and seeing how skilled they were, I knew I had to move to New York even though I didn’t know anyone there. In hindsight, that decision completely altered the trajectory of my career and I have no doubt that I wouldn’t be where I am today if I hadn’t prioritized technical mentorship over everything else that was going on in my life at the time.

Obviously dropping everything and moving across the country isn’t an option for everyone, but if your goal is to get dramatically better then finding mentors should be one of your top priorities.

It’s also worth emphasizing that I interviewed with 15 different teams. That’s a lot of opportunities to investigate! For context, after I graduated from my bootcamp I had 3 onsite interviews before landing at Uber. If you assume that opportunities follow some kind of power law distribution such that some opportunities are significantly more valuable than others, then going through this exercise whenever possible will likely lead to much better outcomes. If you then factor into the equation that these types of decisions compound over the lifetime of your career it starts to seem grossly negligent to not take this exercise seriously everytime you’re gearing up for a major change.

How to find good mentors if I'm not in a large company with very good engineers?

If you work at a large company, this process shouldn’t be too difficult. Start asking around and try to identify a high performing team with very good engineers doing impactful work, and then do whatever you can to start working with them.

In hindsight, that decision completely altered the trajectory of my career and I have no doubt that I wouldn’t be where I am today if I hadn’t prioritized technical mentorship over everything else that was going on in my life at the time.

In his telling, technical mentorship is very important. It's great that he was at Uber. I am not at Uber. What can I do instead?

Here's Atul Gawande on finding a coach for his surgery (got his old professor to observe his surgeries) Personal Best This is bootstrapping technical mentorship, in a way. What can I learn from this?