Turkeys in Trees
It’s near Thanksgiving in the United States, and so it seems appropriate to be writing about turkeys. But today I don’t want to talk about the turkey on your plate, next to the stuffing and all the fixins. I want to talk about turkeys in trees.
It’s commonly understood that turkeys are flightless birds. I happen to live in a neighborhood that is home to a band of roving wild turkeys, and I can confirm they sure look like a fairly gravity-bound lot. So when I was out for a jog one day and spotted a bunch of them gobbling about high in the branches of a nearby tree, I was surprised. (This is an understatement. Real reaction: How the f_ck did that turkey get in that tree!?)
This is apparently a habit of these turkeys. I now frequently spot them up in that tree. But one day the mystery of how they got there was solved. It turns out these birds are not completely flightless, they just can’t fly very far or very high at one go. I watched as this awkward bird flapped up onto the roof of a low-slung bungalow near the tree. And from there, it made the final aerial leap up into the boughs, where it came to rest and presumably enjoyed the view.
This is an inspiring bit of thinking on the part of the turkey, which hitherto I had thought to not be a very bright animal. “I want to get there,” it thinks, “but first I will have to go there.” Baby steps. Incrementalism.
And this is the part where I bring it back to software (You hoped that was
coming, right?). Anyone who has dabbled in writing code understands the
principle of breaking problems down. But in practice, this is hard. Like,
really hard. You stare at that “quickstart” tutorial in the repo,
or try to digest the
man page. But you just can’t grok it. I
have been here many times.
When this happens to me, I make a todo list, usually in a fresh new text file. Sometimes, I get so micro that the steps are painfully obvious (“Open up text editor. DONE!"). But it gets me moving. And if I get stuck, it’s only on the tiny-step problem (e.g. “Import the data”), rather than freezing up on the whole project (“Make an interactive visualization of the timeseries”).
There’s a reason why this works. To borrow Kent Beck’s language
on software testing:
a green bar feels completely different from having a red bar.
Or as Sacha Chua put it in a post on “sequencing”:
If I focus on writing tiny chunks that start off as “just good enough” rather than making them as elaborate as I can, that lets me move on to the rest of the program and get feedback faster.
The nice thing about having the list is that at the end of the session, even if the only output I have is something very minimal, I can look back at the steps it took to get there and feel some sense of greater progress.
Recall the turkey: I may not be in the tree yet, but the fact that I am off the ground is a flippin’ miracle.