Advent 2022: 16. Using a Beeminder Goal as an "I Should..." Inbox

Today’s Advent Calendar post is about using Beeminder to quickly capture all the “I should do …” thoughts I have, and to force me to convert them into actionable tasks.

In brief, I have a goal that I can rapidly access as a widget from the main home screen on my phone, and when I think “I should…”, I make a datapoint with a couple of words about the thought - just enough to remind me of it later. The goal is set up to force me to process the entries later (more on that in a minute).

Why don’t I just add the thought to a task list app on my phone? These thoughts often strike when I’m in the middle of something that I don’t want to be distracted from. The friction of adding a properly-fleshed out task to my task list would prevent me from capturing the thought at all.

So why not add just a couple of words to my task list and flesh it out later? Ah ha ha ha. I wouldn’t get around to editing the task later without external pressure. My goal has that pressure built in.

So here’s how I set up the goal:

  • I created a Do Less goal that allows 0 units per day. I call the units “shoulds”.
  • The Beeminder app widget (Android) is set up so that the default value for each datapoint is 1. I can do one tap on the widget, one tap on the comment field, write a couple of words and submit, then get back to what I was doing before.
  • The value of 1 means the goal would derail at the end of the day, so I have a strong incentive to process these shoulds every evening!
  • Processing them means writing out a proper task for each one, and then changing the value from 1 to 0.
  • The goal is now safe!
  • I have the Pessimistic Presumptive (PP) setting turned on so that I have to use the goal at least once per day. I have multiple “I should…” thoughts every day so PP isn’t a disadvantage. This is why I change the values from 1 to 0 instead of merely deleting the processed datapoints - if I deleted them all, then PP would kick in at the end of the day and I’d derail.

And that’s it. I’m basically just using the goal as an inbox that forces me to empty it each day.

If you’re on iOS then I think the Shortcuts feature would let you do something similar to the Android widget.

If you like to have all your goals green at the end of the day, this goal might annoy you since it’s always orange at best. You could make a green version fairly easily:

  • Create a Do Less goal that allows 4 units per day.
  • Don’t tick the checkbox for “Start with extra leeway”.
  • When the goal has been created, go to its Settings tab and look in the Graph Editor section.
  • The “Final rate” will be 4 - change that to 0.
  • Click the “Update Graph” button.
  • The goal will now have a flat red line at the value of 4, and it will be green when there are no pending shoulds.
  • If you enter only a few shoulds each day with a value of 1 each, then your goal won’t be at risk of derailing, but you would hopefully feel enough pressure to empty it at night to set it back to green.
  • You might want to set the default value in the widget to 5, which would mean a single should would turn the goal red.

If you’re liking this idea but don’t have the subscription needed for a Do Less goal, you could try it with a Do More set to a rate of about 1 per day. Each should could be entered with a value of -1 and then changed to +1 when you processed it. You may want to auto-ratchet the goal so that a single negative datapoint would always make it red.

As one final point, I also use this goal when I’m on my laptop so I have a small bash shell script there for rapid submission of datapoints. The script is called “i”, short for “increment”. It always uses +1 as the value. It takes the goal name as the first argument and the remaining arguments are the comment. So if I want to add a datapoint of +1 to my “should” goal with the comment “call Kenneth”, I can type “i should call Kenneth”. This gives me an unreasonable amount of enjoyment. :smiley:

Below is the bash script (for Linux/BSD/MacOS) with a placeholder Auth Token. See A Simple Introduction to Beeminder’s API for details about Auth Tokens and Beeminder’s API.


goal=$1; shift

curl -X POST$goal/datapoints.json \
  -d auth_token="AbC12-abcd1234efgHIJ" \
  -d value="$value" \
  -d comment="$comment"

See the comment from @clivemeister for a Windows version of the script.


This is just genius - and being able to type “i should call kenneth” is the icing on the cake!

Here’s the i.cmd file that’s the equivalent for Windows (since I use both, I had to do this!)

echo off
set goal=%1
rem would really like to use SHIFT here, but it doesn't affect %*, which is all the arguments together, so we have to do this
set comment=%2 %3 %4 %5 %6 %7 %8 %9
set value=1

curl -X POST ^
  -d auth_token="AbC12-abcd1234efgHIJ" ^
  -d value="%value%" ^
  -d comment="%comment%"

Awesome, thank you! I’ve edited the post to include a mention of your comment.

1 Like