I recently started building a Django application to track certain information about the podcast I listen to, and I thought I could have a working prototype done in about two weeks. I then spent the two weeks learning about federated identity and authentication, social media integration, and the variety of Python and Django modules available to save me time in implementing these features, none of which were required for the prototype I initially wanted to build.
This has led me to think about Yak Shaving quite a bit. Yak Shaving is when you find yourself doing something apparently unrelated to your goal because you’ve convinced yourself, appropriately or not, that it is a dependency needed to accomplish your goal.
I don’t remember exactly where or when I first heard the concept, but it must have been around 2005, and I’ve found myself repeatedly going back to it over the last decade or so.
Like any jargon, with the right audience, this term can speed communication. On my team, it’s not uncommon during a standup meeting to hear an engineer summarize things, saying they’ve been working on a problem and Shaving Yaks, rather than waste time on detailing the exact set of package interdependencies that is giving them issues.
More useful, though, the idea of Yak Shaving is a good reminder step back and examine the stories I’m tell myself about why I do the work I do. (I should say, I’m not always mindful in this area, and my efforts are sometimes a post hoc analysis.) Going back to my application example:
- I wanted to track some personal metadata about podcasts.
- So I decided to write a prototype application to solve the problem.
- So I chose Django, because I also wanted to refresh my knowledge of the technology.
- Then I told myself I would need authentication to secure the data.
- Then I told myself that I didn’t want to manage with local accounts and passwords.
- So I researched Django authentication, and implemented twitter authentication.
- Then I thought that it would be useful to integrate Facebook and Google authentication as well, in case users wanted other options.
- Then I had to deal with mapping multiple social accounts to individual users…
Looking at this chain of decisions and choices, it started out fairly good, but by the end I’ve given myself work that in no way aligns with my initial goal (though it seemed like a good idea at the time.) Around step 5 I should have asked myself “Am I providing value and moving towards my goal, or just shaving random yaks?”
In my personal head canon, I’ve extended idea of Yak Shaving a bit, to provide a short hand for my relationship to work:
- For the wool merchant, shaving a yak isn’t Yak Shaving. They need yak hair to make wool, to sell. It is the work that must be done, directly aligning with their goal.
- For the monk, planning to meditate at a mountain top monastery to achieve enlightenment, having a good warm robe will be needed, so they need wool to make one. In this case chopping wood, hauling water, and shaving yaks are all things that need to be done, and support their goal in valid, but in indirect ways. This is Yak Shaving, but it is the good kind.
- For the tourist, who is just visiting and wants some good pictures and souvenirs, shaving a yak would be a waste of time, not aligned directly or indirectly with their goals. They would do better to buy something from the merchant, and skip the unneeded Yak Shaving.
Having a simple short hand for these roles helps identify them, and to avoid being the tourist.
Note: Yes, I know the actual etymology of the term comes from a random list of tasks from a Ren and Stimpy episode.