Nate Meyvis

How to ramp up

When you start work as a software engineer on a new team, you might be told to ramp up in any of these ways:

I've tried all of these, and both succeeded and failed at actually ramping up. I'm now convinced that the best way to ramp up is to prioritize learning your team's system, and to do that by learning your team's data and how it flows through the system.

  1. Figure out what your team's most important data is

Your team probably processes and stores data, and this data is probably the core of what your team does. (Sometimes--e.g., for some R&D teams--this isn't true, but if you're in any kind of "normal" software engineering job, it probably is.) Figure out what it is.

  1. Learn how to access that data

This usually means figuring out which database holds that data, and how. Actually go look at the data. (Good luck with permissions, which are almost never both correctly managed and readily intelligible for a new team member.) Make sure you're looking at the real data, not an obsolete or redundant store.

Understand how every important aspect of the data is stored in the database. On the happy path, there is a single database table, and every feature of the data is stored in an intelligible and consistent way in a well-named field on that table. This happy path is rarely achieved--your job is to figure out how the data actually looks in storage.

  1. Learn the data flow

Find the answers to these questions:

If there is a most common input source for this data, track the code from its origin to the persistence layer. If you can actually generate data in a test environment and verify that you are correct (by, e.g., inserting log lines or making trivial changes to a checked-out version of the code), that's even better.

  1. Build out your knowledge

At this point, you should know the very happiest path your team's data can take: the most important data, from its commonest input source, to its main data store, to its most important outputs. Think of it as the best possible skeleton. Now, build it out:

Why this is better than the standard advice

This approach overlaps with, but is very different from, most standard advice.

Why not start by reading documentation for a while?
Why not start by picking up a starter ticket?

To be clear: doing starter tasks is great, especially as a way to learn unfamiliar tooling for writing, submitting, and incorporating code. I recommend it. But they're overrated as a way to learn about the system you're working on, and it's deceptively easy to complete starter tickets without getting much closer to being a fully productive team member.

Why not start by having a teammate explain the system to you?

This is a great thing to do! But:

My second-favorite ramp-up method

My second-favorite ramp-up method, which can be done in parallel with the above, is to read every single pull request (or whatever your analogue of a pull request is) on your team. Figure out basically what is going on in the PR and why it is necessary. Knowing a little bit about where the current work is (and where the current problems are!) is likely to help you far out of proportion to the time this takes.