Tutorial: how Nicky ends completed goals early (if there's enough buffer)

Hi! I’ve promised a tutorial on this before, I think, and I’ve definitely promised it today.

The standard use-case for me with my reading goals is that I have a set total to reach (the last page of the book) and a set pace (5 pages/day)… which I actually expect to exceed frequently. Sometimes I exceed it by a lot, and finish a book long before the actual slope of the graph reaches the end-total.


Now I want to archive this goal so it won’t get in my way all the time when I want to see more important (active) goals. How?

So this method is, step-by-step, how I would deal with this goal. For those with slightly different use-cases, you’ll have to handle it slightly differently, perhaps – but the principle should hold good. Basically, what you need to do is change the goal so that the end total is required today.

For our purposes here, I’ll use the visual graph editor, because not everyone has access to the non-visual one (and this one is likely to hit Beeminder itself in the foreseeable future).

I’ve opened this goal in the editor, and made sure I’m on the “graph editor” tab. On the right, I can see a set of rows that define what the graph looks like.


Each row tells you the date on which a segment of the line ends. The middle column, value, is telling that a point on the line is [X] on the y-axis at that date – e.g. the 2nd row, 2022-02-08 - 57 means that on 8th Feb, the line was at 57 on the y-axis. The third column tells you what slope ended on a given date: on 9th Feb, the rate of 5 ended.

What I need to do is tell the graph that it ends today. To do that, I need to make sure I remove any segments that would come after the end, so the line on 2022-02-14 has to go.

I want to make sure that in changing the final row, I don’t accidentally edit myself to have a really steep slope in the past – that could instantly derail me! So I check that there’s a row on 2022-02-09 that has the current rate, 5. That means that the slope running from the previous row’s date to 9th Feb will stay at 5, no matter how long that gap is.

Then I look to the final row, “goal date”. I want to make that today. The value of 259 is correct, and then the daily slope segment will get greyed out.


That produces a preview showing this:


Which is correct: that shows that the yellow-shaded area ends today, and the graph’s got a smily face on it, so it’s all done! I need to click the submit button, and then we’re all good. The goal will end at the next deadline, and let me archive it.

This method should be adaptable to other types of goals. Say you have a goal of completing a course by working on it for an hour a day, and now you have. You’re well above the line, so you should be able to edit the goal to end at that point, today. You’d set a row with today’s date, whatever that is, and make sure that’s set to your previous rate (1, in this example). Then you’d go to the final road row, set it to the current date, and set your current cumulative total as the value.

The only problem is that this method only works if it’s making your goal harder, and currently Beeminder only recognises that you’re making the goal harder if the original implied end-date is outside the akrasia horizon.

I’m sure it’s not perfect and won’t suit all use-cases, but it’s a useful tool for some!


If I am not mistaken, it should be possible to do it in two stages, even if the end-date is within the akrasia horizon: first, you’d add a flat stretch (with a zero rate) from the current end-date to some distant future date, and then (after submitting that new graph), you’ve reduced the problem to one that can be solved with the above-described method.

1 Like

Huh. I’ll have to try that next time I’m stuck with one I can’t end myself, and see if it works! Thanks for sharing the idea!

Nice write-up!

My issue is that I’m lazy and if it’s possible to save time, I’ll try to do so. While not meant for this use-case, at various times I’ve tried to use ratcheting to end a goal early. Inserting plea to add ratcheting in the visual graph editor’s sandbox so we can get a better feel of how it works.

I’m not keeping score, but it sometimes works and sometimes doesn’t (e.g. converts a goal that should reach 0 to one that should reach a negative number), so I’d have to bother support. Since I only ever have one shot of trying the ratchet and this situation doesn’t happen every day, I haven’t worked out all the parameters.

From hazy experience, maybe it works on domore and fails on doless. I think I had more succes with ratcheting to 1 safe day than ratcheting to 0, but maybe I’m cargo-culting. Of course I always forget to do the safe step of first ratcheting to 7 days to see how the graph responds.

It absolutely used to work because it used to suck the road ahead up like spaghetti, so you could drag the end-date closer. Now it only changes where today’s point on the line is on the y-axis, so I’m not actually sure if there are any situations in which it works… :thinking: I wouldn’t have expected there to be. The method in this thread is actually how I fixed the fact that ratchet didn’t work anymore.

1 Like

Update, since I just got a like notif in this thread and it made me remember: zzq’s idea of adding a flat stretch with a zero rate did seem to work!