Skip to content

Shepherds

Published: at 12:00 AMSuggest Changes

Motivation

Building new systems is extremely energizing. You’re making a thousand decisions an hour, unconstrained by history or precedent.

Over time, as software begins to mature, it grows in sometimes strange ways — this is inevitable and good. Those weird cases and constraints represent early ideas colliding with the real world; we learned something, and the system improved.

Modifying large systems can be intimidating, especially for engineers who weren’t “in the room” when each of those decisions occured. At the limit, this will grow to include everyone, as our team expands and as pieces of our product are iterated, decommissioned, rewritten, and repurposed.

When we fear modifying our systems, progress slows as we retreat into overly-narrow incrementalism — and large changes take longer than necessary. One method at our disposal to reduce the fear of making changes is appropriate test coverage. Another method is our realistic local development system. This doc introduces a third method, Shepherds. Many of us already do this in some form, but this adds a name and an official recommendation to promote the practice.

So… what’s a shepherd?

A shepherd is an experienced guide capable of nudging complex or cross-cutting efforts toward timely, high-quality completion. Shepherds can be formal or informal. Shepherds are a valuable resource that can be called on to unblock, demystify, advise, simplify, or otherwise expedite initiatives that may otherwise be risky. With the help of a shepherd, team members who are new to an area or skill can take on stretch assignments to accelerate growth more easily.

Responsibilities of a shepherd

  1. Possess accurate and complete knowledge about most of the system, including high-level intent, past and future plans for changes, and implementation details, paired with the ability to communicate that knowledge effectively.
  2. Get involved early enough to provide thought partnership.
  3. Be responsive to the task/initiative lead.
  4. Provide thorough, timely, and constructive reviews and advice.
  5. Help your teammates level-up. This may be done by passing domain knowledge, improving docs and generally thinking of ways of helping your teammates, so that if they haven’t already, they may shepherd in the future.

Who should shepherd?

Examples:

Who should use shepherds?

Everyone, from time to time! Although shepherds can be super helpful when touching unfamiliar components, even experts can benefit from a second pair of eyes and a pre-wired high-context reviewer.

When do I need a shepherd?

(Non-exhaustive)

Working with a shepherd, in practice

Recognize the need

The ask

Working with a shepherd


Previous Post
Ownership and impact