A "yak shave" — the performance of a task solely in order to continue one's "real work" — has traditionally been a pejorative term in the software and programming world. Much like "real life" yak shaves (fixing the garage door so you can get the car out so you can go to the store so you can make dinner, each task discovered only in service of the one it depends on), shaving programming yaks is typically not considered enviable work. It's all stuff you reluctantly attend to in order to get on with the thing you wanted to do in the first place.
Such a perspective makes taking stock of my professional life an equally grim business: the overwhelming majority of my technical work has been in shearing wooly yaks, some more cleanly than others: vast savannahs of code for extracting data from PDF documents, libraries for authentication and authorization, AWS APIs, byzantine dependency resolution, and tests-tests-tests; then there's tools everywhere I look, including more REPL guff than you can shake a stick at, contributions to programming languages, and too many little bits of glue code to enumerate in any comprehensible way. (Let's not speak of yaks kept away from the harsh lights of github and open source in general.) All of this was done in order to do other things. More often than not, I've let my hands linger far longer than necessary on those shears, rarely ever moving on to my original plans and projects.
Being busy is the most perfect form of procrastination, so that's one explanation. I also think the yak-shaving tendency is an affordance of modern programming, with its deep cravasses that are sooooeasy to slip into, only to emerge 15 years later with a lot of experience in
WS-$WHATEVER. Why did I learn about OpenId in the first place? No one knows. Why do I still remember the Swing APIs with such exactitude that I'm confident I could knock out a moderately-complex Java GUI without looking at docs? Please, let me find blissful forgetfulness.
It's too easy to gripe and grumble about this, though. We all have this experience of yak shaving, and occasionally regret for the time spent with such noble creatures, but I now think it's disingenuous to lament. These computers we pound and tap on are things of our own creation: we choose our own legacy through our use and abuse of them.
When I look back on the computering I've done, I'm much more forgiving of my follies than I used to be. I can't say I've accomplished what I originally set out for myself; but then, I can't judge the work that was done too harshly, either. Most of it works well, most of the time, and many have found good use in it. I can't ask for too much else, and I think I see now that hardly any other programmers (and perhaps, any other creative folk in general) are any different in this respect: we all struggle with whether we did good work yesterday, whether what we're working on now is what we want to be working on, and whether it's a stop on our path to something else, or a place where we might rest for a while.
Being at ease with this ennui puts the long years I hopefully have ahead of me in a much more pleasant light. It's easier to be more thoughtful about the work I plan for, as well as more forgiving of the yaks that lay in wait for me along the way.
I talked about all of that so I could tell you a little story:
While idly twittering recently, a friend asked if I was talking about one of my "pet" yaks (I keep a number of forever projects around the house, their foraging is good for the lawn and they keep critters at bay):
The idea and visual of a World Yak stayed with me. Half-serious as it is (anyone even vaguely familiar with the workings of these stupid machines would recognize the truth in the sentiment), I couldn't stop giggling about the visual. I eventually commissioned a wonderful artist to bring the meta-yak to life: