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 yaks?”