I wrote the book on developer marketing. Literally. Picks and Shovels hit #1 on Amazon.

Get your copy
Engineering and DevOps

Yak shaving

yak SHAY-ving

A series of small, seemingly unrelated tasks that must be completed before the original task can begin.

Yak shaving is when you start working on task A, but first you need to do task B, which requires task C, which depends on task D. Four hours later, you are installing a new version of OpenSSL on your laptop and cannot remember what you originally set out to do. The chain of prerequisites felt logical at each step, but the end result is absurd. It is a cousin of scope creep.

The term comes from a Ren & Stimpy episode and was popularized by Seth Godin. In engineering, it describes the frustrating experience of needing to fix or set up tangential things before you can do your actual work. Want to add a feature? First, update the dependency. Updating the dependency requires updating the build tool. Updating the build tool requires updating Node.js. Updating Node.js breaks three other projects.

Not all yak shaving is avoidable. Some prerequisite chains are real. But when you find yourself three levels deep in prerequisites, stop and ask: is there a shortcut? Can I work around this dependency? Can someone else handle the prerequisite while I work on the original task? Awareness is the first defense.

Examples

A developer needs to fix a one-line bug.

The bug is a typo in a configuration file. The developer clones the repo. The build fails because the project requires Node 18 and they have Node 16. They install nvm to manage Node versions. Nvm requires updating their shell configuration. Updating the shell config breaks their Python virtualenv setup. Two hours later, they have fixed their development environment but have not touched the one-line bug.

A team needs to add a simple API endpoint.

The new endpoint requires a database query. The database driver is three versions behind. Updating the driver requires updating the ORM. The ORM update changes the query builder syntax and breaks 40 existing queries. The team spends two weeks updating queries instead of building the endpoint. They could have added the endpoint with the old driver version and scheduled the upgrade separately.

An engineer automates a deployment process.

The goal is to write a deploy script. The script needs to run SSH commands. The SSH library requires a specific version of libcrypto. Installing libcrypto requires updating the OS package manager. The package manager update requires a system restart. After the restart, Docker is not running. The engineer fixes Docker, reinstalls the SSH library, and finally writes the five-line deploy script.

In practice

Read more on the blog

Frequently asked questions

How do you avoid yak shaving?

Recognize when you are two or three prerequisites deep and stop. Ask: do I really need to do all of this, or is there a shortcut? Can I use a workaround for now and fix the prerequisite chain later? Can I ask a teammate to handle the blocker while I work on something else? Docker and containerized development environments help by standardizing prerequisites so you do not waste time on setup.

What is the difference between yak shaving and bikeshedding?

Yak shaving is doing a chain of prerequisites to complete a real task. The work is often necessary but distracting. Bikeshedding is spending time on trivial decisions instead of important ones. Yak shaving is 'I need to fix this before I can do that.' Bikeshedding is 'let us debate this instead of deciding that.' Both waste time, but for different reasons.

Related terms

Picks and Shovels: Marketing to Developers During the AI Gold Rush

Want the complete playbook?

Picks and Shovels is the definitive guide to developer marketing. Amazon #1 bestseller with practical strategies from 30 years of marketing to developers.