“Yak shaving,” well-known among a certain class of nerds, refers to artificial dependencies that you insert before your ultimate objective, distracting you and derailing you from getting the job done. My favorite sample yak shaving is on Seth Goden’s blog from 2005.
Yak shaving would be: I want to use the lab power supply on my workbench, but my CupCake is hooked up to it, and I haven’t finished getting the CupCake’s aging extruder motor to work, so suddenly I’m spending the weekend working on the CupCake, so I can get it fixed and move it out of the way, so I can use the power supply under it to do … whatever it is that I was going to do. (This is a fictional, but relatable, example.)
Some time back, Cort said to me:
Doing technology work is often like going out to mow your lawn, and you think it’s going okay, but partway into it you discover there’s a whole ‘nother lawn under your lawn, and now you have to mow the one underneath before you can mow the one you thought you were there for. And then sometimes you start mowing the lawn under your lawn and you find out there’s another one under that, too.
A lawn under your lawn is different than yak shaving. A lawn under your lawn is an actual dependency that has to be resolved before you can do what you set out to do and that was hidden until you got started. It is running into a technical constraint that you didn’t know was there and that is of non-negligible size, often as large as or larger than the effort you knew was going to be required for your original objective. It’s the reason that as I get older and more experienced, I’m more and more cynical about learning new technologies — because there are more and more lawns under them that are not documented in the howto, or sometimes anywhere.
Last week I decided to print a downloaded 3D model in ABS, and that the printer most likely to succeed was the secondhand da Vinci 1.0a that I bought specifically for printing ABS, because it has an enclosure and because it was designed for ABS. I hadn’t worked with it before and I anticipated some effort to get it going; but it surprised me by being pretty close to working and just needing some fine-tuning on the bed leveling. (A pessimist’s surprises are always pleasant.)
I manually leveled the bed and then tried to use the “auto-leveling” [upcoming post explaining why the scare quotes] to get the best first layer possible. After getting inconsistent results from one auto-leveling run to another, I decided to put in the maintenance effort to improve the consistency of the probing.
I thought I had an idea how large that lawn was; but underneath that lawn were:
- While running repeated auto-leveling cycles to test my work, the da Vinci suddenly became non-communicative and after power-cycling was bricked. I had to learn how to build and reinstall the custom repetier-firmware fork for the da Vinci printer, which was a whole new project not on my schedule for this weekend.
- In a mini-lawn underneath that, I had to take a detour to learn how to modify a board definition under the Arduino IDE.
- Thaaaaat is not the same version of the custom repetier-firmware that the previous owner had installed on the printer, and the auto-leveling probe routine works differently and returns results in a different format. I’m having trouble finding any documentation about it, so I can’t even tell how big this lawn is.
There went an entire weekend that was supposed to be spent printing parts.