Have you ever started to work on a task and suddenly you realized that said task requires some other little task(s) to be finished beforehand. That's yak shaving for you, the tl;dr version.
You've probably done this multiple times and you did even realize it.
Back in 90s a Ph.D. at MIT by the name of Carlin J. Vieri produced this term to describe
what you are doing when you're doing some stupid, fiddly little task that bears no obvious relationship to what you're supposed to be working on, but yet a chain of twelve causal relations links what you're doing to the original meta-task.
Let me give you an example, that you can relate to.
You're working on an older project. Let's say that you're ready to deploy, but you suddenly realize that you forgot to set up the Digital Ocean droplet. You start setting that up, but it dawns on you that you need a certain version of PHP. Before you start downloading and setting that up you realize that there are some security issues that need addressing with your droplet.
And thus you find yourself in an ongoing spiral of never ending little tasks that divert you from the main task. Another comparison would be something like side quests in an RPG type game.
Why do we do this?
I think it has to do with the human nature. We're not a species that does things instinctively. We don't know what things can come up at any point in time. At least that's how I see things. Any other thoughts on this?
Until next time, code long and proper!
Stefan
This post was originally published on stefancosma.xyz
Top comments (3)
Being young and poor (a long time ago - now I'm old and poor) I decided I would change the clutch on my car all by myself. This was covered in chapter 3 of the maintenance manual and it was only 3 pages long. I decided an hour or two would probably be okay. On Saturday morning I had a leisurely breakfast, got my tools out, opened chapter 3 and looked at the first step....
"Remove Engine and Gearbox as described in Chapters 1 & 2"
I think finding yourself in such "yak shaving" means there are some serious flaws with the infrastructure, design, or technical debt (your particular example). But I would agree that it is part of human nature to lose focus and instead of solving underlying or immediate problem, diverge onto bunch of smaller, possibly menial tasks.
For some reason this picture brings to mind words cohesion and coupling.
Sounds like something a perfectionist would do. This used to happen to me often until I realized that I was going too hard on myself.
A lot of big companies didn't start as secure or as well organized as they are today. They set out an MVP and built it with the most basic stuff they had at their disposal and built upon that as time went by.
It's not like you didn't know this already, it's just so easy to forget it. ;)