Yak Shaving
A chain of prerequisite tasks that stands between you and the task you meant to do.
Yak shaving is working through a chain of prerequisite tasks, each a genuine dependency of the last, until the original goal is buried several layers down and the current task — say, shaving a yak — bears no visible relation to it. The term was coined by Carlin Vieri at the MIT AI Lab in the mid-1990s, after a segment at the end of a 1991 episode of The Ren & Stimpy Show announcing "Yak Shaving Day" — a Christmas parody with diapers hung instead of stockings, rubber boots stuffed with coleslaw, and a shaven yak floating past in an enchanted canoe. There is no chain of favors in the cartoon: it supplied an absurd image, not a structure. The chain-of-prerequisites sense comes from a 2000 post to an MIT mailing list by Jeremy H. Brown, working from a stalled thesis reference back through an aging email client, a text editor, and a run of dependency upgrades. The joke lands because every step was necessary; the absurdity is visible only from outside the chain.
The hard part is telling a genuine dependency chain from avoidance wearing its clothes. A real chain has a property the avoidant kind lacks: each task, once done, is consumed by the next, and skipping it produces a concrete failure rather than discomfort. Avoidance generates open-ended busywork — reorganizing a config, upgrading an unrelated dependency — that could be deferred without the original task ever failing to start. The tell is whether you can name, before starting, what the new task unblocks; Rubber Duck Debugging applies the same test to a stuck fix rather than a stuck plan.
Timeboxing is the practical control: fix a budget for the detour and re-evaluate at the boundary rather than letting the chain decide how deep it goes. If the budget runs out and the task is still unreachable, that is information — either the Technical Debt underneath is worse than assumed, or the chain has become a way of not starting.
The chain is sometimes literal: a Package Manager resolving a dependency of a dependency, or a Monorepo change blocked until an unrelated package upgrades first, is yak shaving with the prerequisites explicit in a lockfile rather than discovered one surprise at a time.
See also5
Reproducible Case
The smallest set of steps that reliably produces a fault, and the unit of real debugging.
Method27 connections
Root Cause Analysis
Escalating past the visible symptom until you find the layer that actually produced it.
Method49 connections
Fermi Estimation
Reaching a defensible order-of-magnitude answer by decomposing a question into estimable factors.
Method24 connections
Deprecation
Marking something as superseded and scheduled for removal, without removing it yet.
Method20 connections
Refactoring
Changing the structure of code without changing what it does, in small verified steps, so that the next change becomes easy.
Method11 connections
Linked from4
- RefactoringMethod
Changing the structure of code without changing what it does, in small verified steps, so that the next change becomes easy.
- RicingMeaning & Society
The hobby of customizing a computer desktop's appearance into a coherent look, and the online culture of sharing screenshots and configuration files.
- Rubber Duck DebuggingMethod
Explaining a problem aloud, in full detail, to a listener who cannot help — and finding the fault while explaining it.
- Sunk Cost FallacyMethod
Continuing an effort because of what has already been spent on it, rather than what remains to be gained.