« Beeminder home

Beeminder Blog

A series of alarm clocks

A simple-seeming feature is now live: You can set custom deadlines on goals! Until now, you’ve had till midnight every day to make sure you’re safely on Beeminder’s yellow brick road. (Or for non-autodata goals you’ve had a grace period till 3am to get your data entered.)

As fanatic and highly akratic Beeminder users, typical evenings for us have, until now, involved scrambling to dispatch beemergencies and getting to bed much too late. Worse — and a problem that’s resistant to our usual solution of more beeminding! — is that with all the day’s deadlines at the end of the day, you can squander most of your working hours before you really hit your panic threshold.

We realized it would make a noticeable quality of life difference for us personally if we were scrambling every day to get on our roads by 5pm instead of by midnight. Even better, by picking each goal’s daily deadline you can get a pretty huge productivity boost: Get some things done before lunch, others by 5pm. Maybe fitness goals have to be done by sunset, for those of us who kept finding ourselves running around the block at 11:30 at night. Early birds may even want some things due early in the morning (though noon is the earliest for now; see Known Issues below). And of course there are many night owls who want to define their day to end at, say, 6am the next morning so they have the option to pull beemergency all-nighters as needed.

xkcd #1425

Now you may be wondering what took us so long to implement this. The reason is much less like this xkcd and more like a smallish mountain of technical debt. Though, it is more involved than it seems, as a quick glance at our technical spec may convince you.

Nitty Gritty

Night Owls vs Earlybirds

We know lots of you have been excited for this feature. Interestingly it’s for two distinct reasons: Some of you want to define your end-of-day to be the wee hours of the following morning so you can pull beemergency all-nighters. Some of you want your deadlines earlier to save your sleep schedule and/or social life.

The key thing to understand is that whatever deadline you set, Beeminder considers it to be tomorrow as soon as the deadline hits. You can still enter retroactive data, though if it’s an emergency day and the graph has already derailed then it’s too late. The data’s accepted but won’t undo the derailment. Regardless, any data timestamped after the deadline is displayed and plotted for the following day.

Akrasia-Proofing, aka, No Snooze Button

A tricky thing about choosing your deadline is preventing you from pushing the deadline back as it approaches, defeating the whole point. For now we’ve simply akrasia-proofed the field, meaning you can change your deadline but it takes a week to take effect. UPDATE: Our current solution is that if it’s within 6 hours of your deadline on an emergency day, it just doesn’t let you push the deadline back.

Caret Confusion

Because of the 3am grace period that we’d provided for getting your manually-entered data in to your goal, there’s been a long-standing confusion about adding data after midnight and before 3am. As part of the new arbitrary deadlines feature we made all goals default to 3am for their actual deadline. [UPDATE: Now midnight is the default for new goals. Regardless, you can now enter data right up to the deadline and there’s no grace period after the deadline.] That means that if you add data after midnight on a 3am-deadline goal, you no longer run the risk of derailing the goal. You can use a “^” to mean “today” or “right now” and it will do the correct thing (instead of remembering to use a “^^” for “yesterday”). In other words, for night owls, it’s not tomorrow until the deadline hits.

That also means that when the deadline passes it’s passed and there’s no longer gonna be a big hazy period where you maybe have time to get it done still. In short, no more loophole!

Bonus: Timestamps from the API no longer bizarrely offset

For people consuming the API, we’ve had a longstanding issue where the timestamps returned with datapoints were rather unfathomable, and often, if you’re in a timezone other then US/Eastern, completely different from what you passed in. We’ve got two improvements to offer: if you pass in a timestamp to the API, we use it as is (rather than contorting it as we previously did). We also return a daystamp — basically just the date, but taking into account the deadline and timezone of the datapoint — since from Beeminder’s perspective all we care about is the day that the datapoint counts for.

At the moment we haven’t converted timestamps from previously created datapoints — if that’s a thing you’re interested in, let us know! For the sake of tidiness we may run some updates in the coming the weeks to correct timestamps on old datapoints, or maybe that is something that should wait for a V2 of the API. And if these changes do break code you’ve already written, please let us know! We took a straw poll before releasing this and the consensus seemed to be “omg for the love of all that is holy just fix the timestamp business!” But if it does negatively affect you we’ll fix things.

Veritable Paradigm Shift?

I know, can we get over ourselves? The reason we’re so excited about this though, is that we view it as a big step closer to the holy grail of Beeminder as nannybot that tells you minute-by-minute what you should be doing. You can have deadlines staggered throughout the day so you’re satisfying the beest hour by hour all day long instead of screwing around all day and flying into a frenzy of productivity as midnight bears down. It’s the same problem Beeminder solves so beautifully at a larger timescale — forcing you to make progress day by day on long-term goals — now on a smaller timescale.

Known Issues

We came down to the wire on getting this deployed. We made an $810 bet with the daily beemail subscribers that we’d announce this in time for our big third anniversary post tomorrow, and we decided arbitrary deadlines needed its own post before that. So, here it is in the nick of time, but there are warts. That’s also why it’s tucked away in Terrifyingly Advanced Settings for now. (But by all means, put it through its paces and let us know of any other issues you find!)

Here’s what we know of at this point:

  1. You can’t currently have a deadline before noon. We’ll be changing this but for now the interface isn’t good enough to make clear the distinction between, say, a 6am earlybird deadline and a 6am night-owl deadline. I.e. all morning deadlines are of the night-owl variety.
  2. The smartphone apps may be confused about time to derailment and graph color (red, orange, blue, green) until we push new versions of them. UPDATE: Good news and bad news: we deployed a fix for the Android app which should hit Google Play in a matter of hours. (And done.) There may be a more severe bug with the iPhone app that causes crashes. Let us know if you see that! UPDATE: We’re back to just the iPhone app being confused about deadlines. FINAL UPDATE: Both Android and iPhone apps understand arbitrary deadlines now.
  3. Some autodata sources make this difficult by only giving us data at day granularity, which means we have to honor their notion of what the day boundary is. Or maybe we can work around it by adjusting the timezone in the external account. For now, you can only customize deadlines for non-autodata goals.
  4. Some of us are very used to the midnight/3am deadlines and we’re worried that people (including ourselves) may change deadlines and forget they’ve done so and accidentally derail. So we’re working on various ways to make the deadlines more in your face. And if you do accidentally derail because of this, definitely reply to the legit check to let us know!

UPDATE: Ongoing tracking of the aftermath of deploying this is on the forum.