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 favours 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 ageing 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 — reorganising 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 also4
Hand-picked in the note itself — the neighbours worth reading next.
Reproducible Case
The smallest set of steps that reliably produces a fault, and the unit of real debugging.
Method25 connections
Root Cause Analysis
Escalating past the visible symptom until you find the layer that actually produced it.
Method43 connections
Fermi Estimation
Reaching a defensible order-of-magnitude answer by decomposing a question into estimable factors.
Method21 connections
Deprecation
Marking something as superseded and scheduled for removal, without removing it yet.
Method15 connections
Linked from1
Notes elsewhere in the wiki that reach for this one.