Jacob Kaplan-Moss

All I Need to Know About Engineering Leadership I Learned From Leave No Trace

Sumana challenged me to apply the principles of Leave No Trace to engineering leadership, so here we go:

1. Plan Ahead and Prepare

Obvious. Good leaders in any context plan and prepare for their adventures.

2. Travel & Camp on Durable Surfaces

Translation: Choose Boring Technology.

Sustainability in the outdoors requires travel on durable surfaces (rock, gravel, established trails and campsites, forest loam) to avoid overly impacting fragile ecosystems. In software, we also think about sustainability, but in a different sense. We’re less concerned about impacting fragile ecosystems1; instead, we choose “durable surfaces” (aka proven technology) because they’re well-understood and predictable. This is turn helps engineering itself be more sustainable: constantly switching technology because something new didn’t pan out (or, worse, because something shiny new showed up) is exhausting.

3. Dispose of Waste Properly

Translation: pay down technical debt; clean up old software before introducing new things. Most companies reward “shipping” more than they do cleanup or decommissioning deprecated or unused software. Good engineers understand that removing cruft and paying down technical debt is just as important as launching new things. Clean up after yourself, both in the woods and in your Git repos.

4. Leave What You Find

Translation: “contribute upstream”. When you use open source, don’t “take it with you”; offer back any improvements you make to the community (even if the license doesn’t strictly require it). Same goes for internal software: if you work on something maintained by another team, offer improvements and bug fixes back to that team (rather than working around them in your own code).

5. Minimize Campfire Impacts

Translation: prevent and mitigate data breaches, particularly those that impact end-users.

In the wilderness, we avoid or are very careful with fires to protect the ecosystem from wildfires. A wildfire amplifies a small mistake into impact at a massive scale. In software, the same is true of security issues – particularly data breaches. Data breaches often don’t impact the authors of the vulnerable software, but they often do cause lots of pain for thousands or millions of people who just wanted to buy a pizza or whatever. So, just like we’re very cautious of fire impacts in the woods, good engineers aim to be very cautious around security issues.

6. Respect Wildlife

Translation: Chesterton’s Fence: “don’t destroy what you don’t understand”.

We respect wildlife in the wilderness because we’re in their house. We don’t fully understand the complexity of most ecosystems, so we seek to minimize our impact on those ecosystems since we can’t always predict what outcomes our interactions with nature might have.

In software, many disastrous mistakes stem from not understanding why a system was built the way it was, but changing it anyway. It’s super common for a new leader to come in, see something they see as “useless”, and get rid of it – without understanding the implications. Good leaders make sure they understand before they mess around2.

7. Be Considerate of Others

No translation needed.


  1. Though, there’s that too! Think about a single maintainer of a suddenly-popular open source package, overwhelmed by an influx of bug reports and feature requests. ↩︎

  2. Find out, then fuck around. ↩︎