Have you yet stumbled upon the principle of “consistently applied small amounts of work can guarantee completion of large projects”? I have, and it’s worked out well for me – on days when I could pay attention to them, that is.
A couple times, I’ve successfully completed long-term projects by making sure to do only a little bit of it, but I do it every day. It helps a lot with the feeling you get when you approach a large project – say, cleaning up your desk after a few days of heavy-duty hacking. If you’re multi-discipline, and especially if you happen to use multiple desks like me, a desk can stay occupied for a while.
Can you do one minute of desk cleaning today? Sure doesn’t feel like much time, or much effort. In a week’s time, however, you might just have a clean desk. Cleaning discrete messes is where this concept applies pretty well – you couldn’t wash floors like this, but you could wipe off the dust from a few surfaces for sure.
Now, I want to make this a habit – use it on like, seven different things a day. I wrote a script to make it possible – here’s how it works for me right now.
Building Upon The Seen-Before
I relied on a few previously-discussed things for this one. Main one is the Headphone Friend project – a pocketable Linux device, streaming audio from my laptop as I walk around my room. As a reminder, the headphones also have a button that emits HID events when pressed/released, and I have a small piece of software that can map actions to combinations of short-medium-long presses of that button.
Another necessity was a bit of software – dodging my questing system “away from laptop = system breaks” mistake, I wanted to put everything into my headphones, even the task names, trying to reach a “flow” through a series of 1-minute tasks. Of course, I reused the old sound library, but I also needed TTS generation on the fly! I went for PicoTTS with a simple wrapper – it’s not the best TTS system, but it’s damn fast, and perfectly suited for a prototype.
For the button-to-action mapping script, I had to expose some sort of API, to avoid merging the button scanning code and the task switching code. After a little deliberation, I picked websockets – they work decently well, and they’re quite portable, so I could run the button monitoring itself on the Headphone Friend device, and the main software on my laptop, for prototyping purposes.
Now, the more interesting question – how do I build the algorithm?
Can Be More, Can’t Be Less
The main thing about the one-minute timers like these is that you can spend longer on the task if you really get into it, you just can’t spend less than one minute. So, the one-minute upper bound is not enforced – only the lower bound is, really, which means that a “next task” button is a requirement.
At the script’s core, I wrote a little state machine describing the “sprints”, and tied my tiny notification-sound-playback library into it. It goes through the five tasks I’ve defined, making a little “beep” after a minute has passed, and waiting for me to press the “next” keypress signaling that I’m done with the task. After five tasks are done, it stops, and waits for the “start” magic keypress sequence – maybe the next sprint is tomorrow, maybe it’s a couple days later, but I get there eventually.
So far, I’ve only had to modify the code a little bit – each task now has a name in the system, but also an actually TTS-pronounceable string, since the picoTTS model does mis-pronounce here and there. Other than that, the very simple prototype works. I’ve tried to upgrade it from picoTTS, compiling piper
that can do a good few different voices and languages, but I’ve been firmly stuck on cmake
intricacies so far.
Middle-Of-Project Lull
Currently, I’m starting with five tasks – kitchen counter cleaning, hardware desk cleaning, sorting the clothes (in whichever way they need sorting), and cleaning the floors in two rooms. That makes for five minutes minimum, and oftentimes, it’s really just five minutes – to me, feels like it’s important not to get into the flow too much, otherwise the five-minute blitz might become a twenty-minute one, and it gets into “kind a bother to do” mental territory.
The result is, my cooking and hacking surfaces are a little more cleaner and more ready to go on average, and it’s easier to get clothes washing done if there isn’t an unsorted pile to deal with already. I think I most enjoy the movement of it – it’s become a nice way to spend 5-10 minutes moving around the house, breaking the rut. I do need to add some sort of “stop”/”pause” mechanism – sometimes I get too involved in a particular task and could really use a break. My state machine isn’t yet involved enough for this, and maybe soon this might need an overhaul.
At the moment, I’m also looking to tie this into my questing system – I haven’t attached logging to this one yet, but since the questing system includes that, it’d be two-birds-with-one-stone approach. For the questing system, I’m still using the text file backend, which does limit things, but I’ve been meaning to add external action support to it anyway – tying task completion to quest progression is a no-brainer!
Currently, this script and I are in the honeymoon phase: it’s working but I’m waiting for it to fail in more ways, and seeing whether it survives long-term. Based on lessons I’ve been trying to pull from the questing system, I’m trying not to overstretch it – five tasks is enough. For now, it’s pretty nice to be on the island of success in a sea of older solutions that withered away. This time, I’m writing before the full end-conclusion phase, because it’s nice and reassuring when projects work out, and I’d just like to share in that a little bit.
I’ve been using a variation of this for years to trick myself into doing things I really don’t feel like doing – forcing myself to do at least ten minutes of whatever task. Inevitably it turns into an hour or more.
as a stay at home mom, this article just made me angry. or rather, caused the anger within me to rise to the surface
Greg, how stay at home life treating you?
Arya getting themselves prepared for the bad future from Manna… https://marshallbrain.com/manna1