Don't Shave That Yak!

10 Apr, 2008

According to CATB, the act of shaving a Yak is “Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you’re working on.“.
The first time I read about the term was on this blog, but that was a long time ago. I was only recently that I noticed that a) I was doing it again, and b) some of my collegues where unfamiliar with the term. Therefor, I decided to (also) blog about it.

The example on Seth Godin’s blog is a perfect example of what Yak Shaving is:

Yak Shaving is the last step of a series of steps that occurs when you find something you need to do. “I want to wax the car today.”
“Oops, the hose is still broken from the winter. I’ll need to buy a new one at Home Depot.”
“But Home Depot is on the other side of the Tappan Zee bridge and getting there without my EZPass is miserable because of the tolls.”
“But, wait! I could borrow my neighbor’s EZPass…”
“Bob won’t lend me his EZPass until I return the mooshi pillow my son borrowed, though.”
“And we haven’t returned it because some of the stuffing fell out and we need to get some yak hair to restuff it.”
And the next thing you know, you’re at the zoo, shaving a yak, all so you can wax your car.

My experience

I happend to me last week, when I wanted to create a Grails presentation. For giving the presentation, I figured it would be nice to have a nice frontend, and since my designer skills are not that great, I decided to look for an alternative. I found several, of which ExtJS appealed the most to me. However, to use it, I thought, let’s build an Ext scaffolding mechanism to easily generate my UI.
When searching the Grails mailinglist, I found several people working on it (and none was finished), but I also found ExtTLD, a Taglib based framework for generating Ext user interfaces. It’s based on JSP Taglibraries however, which Grails doesn’t support yet.
So, in order to create a (one hour) presentation, I first have to implement JSP support into Grails! While this might be a great opportunity to learn and contribute to Grails, it’s way off my original plan. So, while this detour might provide some great opportunities to learn, it will also take me much (much!!) longer to reach my original goal, with the danger of not reaching it at all!

Sounds familiar?

If this situation might sound familiar to you, these are the things I (try to) keep in mind when picking up a project:

  1. Reflect
  2. Discuss

Reflecting can only be done when you allow yourself some time of the project you’re working on. Go for a walk, go sit in the library, anything will do, but try to approach your project/task/problem from a little bit of distance. It will make things much more clear and allow you to choose the right approach (look for alternatives, or dive in) more easily.
People who are also not directly involved in the project at hand can also help you pick the right approach by asking questions like ‘Did you think of this’, or ‘why not take this approach’. Even explaining things to other persons will make things much more clear, and, for me anyway, made me reflect of the approach I was taking.
My original approach would likely result in chaos and not getting any things done! Therefor I decided to do things in a more agile way: decide what I can accomplish in the limited time I have, and try to implement that. If I find a way to improve it later, that will be great, but I first need some working software which will “scratch my itch”! After that, and if necessary, there might be plenty of time to refactor.


So, if you ever find yourself shaving a Yak, it might just be time to take a step back, get some fresh air and reflect if the approach your taking is really the best way to go. If it is, than go for it, but if it isn’t, it might be the right time to look for easier alternatives!

Newest Most Voted
Inline Feedbacks
View all comments
Lars Vonk
14 years ago

Nice post Erik, sounds very familiar indeed. When I find myself shaving Yaks I always lose interest in the original problem I was trying to solve and in finishing shaving that Yak. So if you see any half shaved Yaks out there they are probably mine…

14 years ago

No half shaved yak out there… Perhaps because we intercepted this:
A mission impossible taperecording: “Good morning Mr. P. Your mission, should you decide to accept it, is to infiltrate the Kakkini tribe in eastern Kakkinistan. You will take the undercover role of yak shampooer, using a traditional soap made from fesh river water and dung. During your mission, you will also be required to shave the yaks, as it is yak shearing season. It is absolutely not recommended to leave Yak’s half shampooed or half shaved as this will blow you cover too.
A tradition among the men of the kakkini tribe prior to the shearing season is a ritual that involves getting what is known in Hollywood as a “Brazilian wax,” which is considered a necessary purification rite before the shearing commences. As no self-respecting kakkini male would be seen dead with a furry one either it is absolutely required to have this defuzzing treatment first.
The reason for this mission is to discover the secret of early baldness.
As always, should you be caught or killed, we will disavow any knowledge of your actions. This tape will self-destruct in 5 seconds”


[…] other things, would have consisted of mocking a webservice call I remembered something about shaving yaks. Why would I create an automated testset for the entire service, while I am actually working on […]


[…] and where kaizen comes from Filed under: Agile — lvonk @ 8:48 am Tags: Agile, lean, twi Yak shaving can lead to useless work, but sometimes it can lead to very interesting facts… like finding […]


[…] on February 27, 2009. Filed under: Groovy | Tags: dsl, Groovy, powerpoint | I’m really not shaving a yak here, but I created a PowerPoint DSL to give a presentation about DSLs! Let’s jump to the […]

Wilfred Springer
13 years ago

In case you need it: the shaving yak action figure:

Explore related posts