You started out trying to create a simple Android app when you realized you needed a third party component. You went off to download the component and realized it needed a fix. Since it’s open source you decide to fix it yourself cause, hey, you write code right? To perform the fix you need work on Linux while your laptop has a illuminated fruit on its lid. After you install Virtualbox so that you can install Linux so that you can fix the 3rd party component so you can complete your project you realize you need to download the actual Linux appliance which sends you to Google where you find a link to a torrent. Your search for the best torrent client for OSX is successful and you manage to download the VM which comes in the form of a “.7z” file that your laptop can’t open. You then search Google for “best 7zip client OS X”. Does this sound like you? Hi, I’m Cliff. You’re here because you shave yaks for a living. I’m here because I need to introduce you to my pet Fuzzy, an animal I recently acquired with these two large horn things on the sides of his head. You thought you had a career as a software engineer but things took a tragic turn where people line up for miles at your door with these heavy hairy four-footed mammals each of which is overdue for a haircut.
What is Yak shaving?
Before you go on yet another Google search for the term allow me to elaborate. Yak shaving is the meta-work you encounter in your day job. It’s the work you need to do in order to begin the work you intend to do. It can often times nest itself in other meta-work. In other words, it can be the work you need to do in order to begin the meta-work you need to do in order to start the work you intend to do. This nesting can become several layers deep which is, I guess, why we call it yak shaving. If you’ve ever seen one of these animals you can probably imagine how an initial shave would only uncover the next layer of hair.
When do you stop shaving?
I’d written about yak shaving in the past but the question begs, “when does one stop shaving these animals?” It’s a valid question and rather interesting dilemma because you can easily find yourself unable to tear away from these animals after pulling out the clippers. It’s tough because you get attached… and who wants to leave poor Fuzzy half shaven? His backside is all exposed but he has all this hair up front! Professionally you may find yourself several layers deep in a problem before you realize you’re shaving a yak. At that point you feel you may have crossed the point of no return. This is the point where it costs more to start over with a different approach than it does to complete the task. You want to recognize the situation before it gets that far and put away the clippers! Stop shaving the moment you get a yak!
But how do you recognize a yak?
Sometimes you start with an innocent problem and a naive over-simplistic solution. The solution seems to fit the problem well and everything feels right. Take my example above. Use an open source component to plug a hole in your Android app. Ask yourself up front what happens if the component you’re using also has a hole. Be honest about what it takes to iterate (or change source, build, and test) the component. Sometimes these simple questions can reveal serious assumptions and flaws in your approach.
How do you stop shaving?
Honesty can help avoid the problem but transparency will pull the plug once you’ve started. That means you should constantly communicate your status and goals with your manager and team on every occasion. Managers have schedules and deadlines and don’t get along with these hairy beasts. They will often be the first to unplug your clippers. Divorce yourself from the problem. Early assumptions lead to attachment if only to validate the assumptions. You assume your idea will not introduce much overhead but as the overhead starts to increase you work harder just to validate your earlier (incorrect) assumptions. Being transparent about all the work you are involved in takes strength because you have to resist the urge to trivialize everything. However it allows you to see how far off track you’ve gone while inviting others to dig you out. Instead of saying, “alls I haff duh do is run a VM and do my my compilation there” be honest and say, “I need to download, install, and configure virtual box just to start the project since we have a Linux dependency”. This highlights how the simple act of running a VM has its own pre-requisites, downloading, installing, and configuring. It also gives you a moment to consider how each prerequisite can have its own prerequisites. Some of your colleagues may actually have simpler solutions or fixes for these pre-requisites. When things feel slow invite friends/coworkers.
Some of us have become so good at yak shaving that we have achieved hero status. In other words we can plow through a series of meta-tasks and nested meta-tasks and make it appear as a single everyday task. We do this by cutting corners where possible. Over time you tend to get a feel for which corners you can cut without it being overly obvious. Taking shortcuts like avoiding a separate project for the component you’re modifying are common. I’ve worked on a number of projects where 3rd party source was included in directly in the project. Another common shortcut is to skip a formal test cycle when modifying source code. These two approaches alone can reduce the time spent yak shaving by 80%. With enough practice you can easily become a yak hero.
In the end it helps to remember there is a cost associated with every choice you make during development. Do not under estimate these costs and do not try to play hero. A yak hero hurts his team tremendously as you merely delay the actual and unavoidable cost of implementation long enough for a team member to assume it. The hero looks powerful and important while the rest of the team that cleans up the hero-slack appears slow and doggish. If you want to suck at programming, play the role of yak hero and shave away! Focus on shaving only the face and clipping a bit around the ears. Your clippers may be dull but, hey, who all will know!