TODO Queue Smoothing

I recently overhauled my approach to TODO lists in a way that solved several problems for me, so I figured I’d write about it here.

Old Way

Previously I had a todo list based on a set of recurring TODOs, with the logic that once I complete an item it pops back up on the list N days later (N can be different for different items).

(this is just an org-mode agenda with scheduled items with repeaters, for those who are familiar)

I enforced working on items with beeminder via a goal that required that I do three items from the list each day.

This setup had a number of downsides:

  • the items varied wildly in effort, which means I was incentivized to pick the three easiest items, which in turn meant the remaining items tended to be harder, so I’d eventually get to the point where there’s only difficult items left
  • except also the rate of three per day wasn’t quite enough to ever exhaust the list, so what actually happened was a lot of the more difficult items languished
  • I was reluctant to add new items, because this would exacerbate the previous point
  • I was also reluctant to increase the goal rate from 3 to 4, because that would make the problem of “lots of hard things on one day” even worse
  • due to the above reasons, I couldn’t reasonably use the system to track one-off items

New Way

The key insight I had is that I should instead enforce (via beeminder) completing a particular percentage of the list, oldest items first.

The fixed-percentage-of-the-list component addresses the issue of calibrating the work rate to the workload, and using a percentage like 33% protects me against the situation where many items all show up on the list on the same day. It smooths the rate at which items are removed from the queue.

Actually a bit more complicated

The mechanism above doesn’t address all the problems I listed earlier, but this refinement does:

  • all my todo items (repeating or not) get effort estimates, and based on this they’re partitioned into three buckets – small, medium, and large
  • small items are things that are virtually no effort, and I’m required to complete all of them every day (i.e., the rate is 100% actually, not 33%)
  • medium items take 3-10 minutes each; I have to do 33% of these per day, but if have an off-routine day (a concept I’ve formally defined for myself and use elsewhere in beeminder to excuse myself from doing things) then I don’t have to do any
  • large items take 11-30 minutes, and I have to do 33% of these but only on the weekend (when I usually have more time), and just as with medium items I have an excuse for off-routine days

The upshot of all this is that the work I’m required to do each day is much more consistent, and as a result I have significantly less anxiety about it (no worrying about outlier days with too much to do, and no worrying about things languishing) and I get a lot more done (especially since I no longer have days where I just pick three easy items and then quit).

3 Likes

Very interesting! Is there any automation involved in calculating what percent has been done and/or in calculating the weighted fraction to send to beeminder goal? Does the beeminder goal expect 1/0 values or fractional values, with a rate of 0.33 a day?

I was about to say that Beeminder data entry can handle fractions, at least in the advanced view. But then I tested it and it seems that I’m wrong. Easy UVI, @dreev?

If you can twist your brain into thinking about fractions of an hour or minute, then it does accept 0:20 for 0.333

I’ve got several goals that are fractionally beeminded, thanks to the custom aggregation method of truemean. This means that every day I enter a zero for each relevant item, and change it to a one when completed. This would be hellishly manual except that I’ve got a script to help.

In my case, the list of tasks is the same every day, but I can imagine hooking something similar to a todo app and driving the data that way.

My current use cases are to ensure that I do a certain amount of stretching every day (items are body parts) or do at least some of the things that keep me sane (e.g. go for a walk, experience a variety of languages, etc).

2 Likes

I do have some automation for tracking what needs to be done and what has been done, but the beeminder part is actually the simplest – it’s just an edge-skating 0-or-1 goal, with a slope of 1-per-day. So I either finish everything for the day or not, and all the slack is in the fine print.

2 Likes