Throughout most of my career, I worked alone on complex problems. I excelled at working independently and it remains my preferred approach to this day. It comes with little surprise that I am much stronger working on my own than in sprawling teams. Starting around 2020, I had to begrudgingly accept this as an issue. While I had built a very successful product and was proud of what I had made, I was trapped. Since I developed it largely on my own, there was no one to take the torch and no natural heir. After struggling for some time, I accepted that I had to find a way to hand off large projects or else I’d never break free of them to build new things.
The first lesson I learned was that it takes time. A lot of time. I don’t think we make accurate or honest assessments of how long it takes to hire a new employee and grow them into key contributors. For complex concepts and projects, it can easily take up to or even beyond 6-12 months. Over the course of more than a year, I often spent eight or more hours a week working with new employees focusing on mentorship and training. That’s a huge commitment, and one not to be ignored. It’s where I found success with a relatively simple methodology that is a sort of poor man’s pair programming approach.
Note: What follows is what worked for me to hand off an existing complex project involving lots of ETL, geoprocessing, and statistical modeling. Building something new requires a different approach, read up on pair programming more for these cases, but, as always ymmv. This particular project was run on a six month cycle. This meant we had large gaps between iterations and stages. These weren’t two week sprints, they were bi-annual marathons.
I’m the driver, you’re the passenger
The driver’s job is to actually write and run code. The passenger’s job is to observe, pay attention, and ask questions. While driving, I’m focused on identifying unobvious assumptions, edge cases, and calling out domain-specific details.
We take turns driving
We share responsibilities now. I still take on some of the more difficult or important tasks, but it’s important to switch roles and be the passenger while letting you drive at times.
You’re the driver, I’m the passenger
You’re now fully in the driver’s seat and I’m merely a passenger. We may stay in this stage for a few iterations to build up confidence.
You’re now driving on your own
You’re now the owner. Before this, I was still responsible for any mistakes or problems. Now, you bear the responsibility. We’re both confident in your ability to work independently, we’ve demonstrated it over the last stages.
Before each stage, we both prepare by having materials ready, identifying if there are unobvious assumptions, and teeing up questions to kick things off. At each stage, we both need to be active and engaged participants. These aren’t performances to be watched and judged, it’s about knowledge transfer. Between stages, allow time to let knowledge crystallize and minds to recover. The time between stages is also great for creating or improving documentation. Remember that it’s overwhelming to be brought into a large existing project. Avoid marathon sessions spanning entire mornings or afternoons while focusing on sessions that last an hour or two at max. Most importantly, resist the urge to do the small things on your own, despite the reality that it would take less time, as it works directly against the long term goal of transferring ownership and responsibility.
In the end, this is about properly investing in people. It’s about committing to equipping them to do well and become key contributors in their own right. When someone new comes onto a team, they need mentorship and direction if you want them to grow into a truly impactful team member. Most importantly, they need the most precious currency of all: time. But not just their own. They need yours as well.