rewrite status: April 2020 – (Productively) Sidetracked
Hello there! This is a semi-regular update on rewrite—my attempt by (that’s me!) to build a best-in-class research writing environment: reference management, note-taking, authoring, and publishing. You can always unsubscribe either via this link right here or the one at the bottom of the email. Thanks for following along with this project!
It’s been a couple months since a proper update, so I figured I’d let you know what I’ve been up to. The short version is: I’ve been both blocked and also sidetracked.
I was blocked for a while because my wife came down with a thankfully-mild case of Covid-19 back in March. “Mild” meant that we never had to go to the hospital, but she was sleeping 16–20 hours a day every day for two weeks. That meant I did nothing outside of my absolutely-required responsibilities: doing my day job, taking care of our daughters, and keeping the household running. Zero progress on the app for those two weeks… and not much for the week after that.
Beyond that, I’ve gotten sidetracked in what I hope will have been a productive way, but sidetracked nonetheless. I started work a couple months ago on the web user interface for this, and I’d made some real progress! I wrote in the January update:
The net is that the next time I send you one of these updates, I expect the web version to be as far or perhaps even further along than the native version. There will be screen shots!
There are, sad-to-say, no screen shots. There’s a phrase in software development to describe what happened to me—yak-shaving:
yak shaving is 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.
I started out trying to figure out how I was going to handle visual styling in this particular web app. By the time I was done, I was deep in the hole of figuring out how I could make a Rust-to-WebAssembly and Elm pipeline talk to each other in a reliably well-typed TypeScript interface, with automatic rebuilds for the TypeScript interface any time either side of the interface changed. And when I finally caught myself, I realized—to my horror—two things:
- This yak-shaving project had resulted in my making actually no progress on the original task.
- The things I had gotten myself wrapped around the axle doing I actually don’t need to do in the browser at all.
This is a thing that happens when you’re writing software if you’re not careful, and sometimes even if you are. I had gotten so far into the specific details of this Rust-WebAssembly-TypeScript-Elm interop story (and for reasons that will be good later!) that I forgot what I was trying to get done, and forgot a critical lesson about managing the complexity of web user interfaces: do everything you can on the server, even in rich apps. (Perhaps most embarrassingly: I am always reminding other engineers in my day job about that latter point.)
Now, it wasn’t a total loss. I learned an enormous amount in the doing, and those pieces are things I will use later. But I didn’t need them just for getting this thing up and running. I will cross that bridge when I actually get to it (and will delay getting to that bridge as long as possible, because it’s a big river to cross, bridge or no!). And now I’m back to getting that original task done, and hopefully in just a few weeks I will have something good to show you.
I hope this was an illuminating peek behind the curtain at how things can go all too easily on this kind of side project. I hope that if any of you are tempted by this kind of thing on side projects of your own in the future, this little story might help you stay focused.
Another email soon, actually with screenshots of a web UI!