Say you are tracking time spent on a goal and you really need one more ping’s worth of time (say, 45 minutes) to avoid derailing. What should you do? There are actually several strategies you can employ, all of which are mathematically sound. It just comes down to how much variance you want/are able to tolerate. I’ve been thinking about this recently and thought it would be worth summarizing the results here.
Start working, and stop as soon as you get pinged (even if you were only working for 3 minutes). It might feel like “cheating” to stop as soon as you get pinged, but it’s not: the times when you get lucky are balanced out by times when you get unlucky and have to work for, say, 90 minutes before getting pinged. If you always follow this strategy, on average you will do 45 minutes of work for every ping.
Sometimes you have to get 45 minutes of work done by midnight, and it’s 11pm, and you can’t afford the chance that a ping might not come. So you might just start a manual timer. As I argued here: Ping caught me while daydreaming for a few seconds. Should I tag? this is also perfectly OK, as long as you commit to not counting any pings that do come while manually timing.
The following hybrid strategy works as well: pick an amount of time t, and start working. If a ping comes before time t, count the ping and stop working. On the other hand, if no ping has come by time t, then switch to a manual timer and do 45 more minutes of work (you do not get to count the time t of work already done!), ignoring any pings that come while the manual timer is on. This still gives you the chance to get lucky and work for less than the needed time, but limits the maximum amount of time you will need to spend (in particular the maximum is t + 45). If you believe that strategy 1 is OK then you must believe this strategy as well; here’s why. Suppose you do t minutes of work without getting a ping. At this point if you just keep working until getting a ping, as in strategy 1, you still have to wait another 45 minutes on average, because of the memorylessness of the exponential distribution. And doing exactly 45 more minutes of work (as in strategy 3) is equivalent to doing another 45 minutes of work on average—it just has a much lower variance. As an aside, note that strategy 2 is really just a special case of this strategy, with t = 0.
In fact, you don’t even have to pick the time t in advance. Just start working, until you either get a ping (in which case you can stop) or you get frustrated at the lack of pings, in which case you can switch to manual timer mode (starting from 0).
This all generalizes readily to the case of needing multiple pings. You can even start out going by pings, then start a manual timer, then stop it and continue counting pings, and so on. You just have to follow these two principles:
- Do not count any pings while a manual timer is running.
- A manual timer always has to start from zero. You do not get to count any previous time spent while waiting for pings.
As long as you follow those two principles, really anything goes! The memorylessness of the exponential distribution really gives very strong guarantees about not being able to game the system.
Edited to add: here is an example of a strategy that is not allowed. Start a manual timer and start working. If a ping comes, count the ping but reset the timer; if you finish working without getting a ping, submit the current timer value. It might seem like this is OK since you only ever count one thing, either a ping or a timer value, but this violates principle (1) above. We can see that this is bogus by considering how much time you will have to spend working, on average, to count 45 minutes towards your goal: the maximum amount of time you might spend is 45 minutes (if no pings come while the timer is running), while you might get lucky and have to do less (if a ping comes), so the average is going to be less than 45 minutes. Definitely bogus. Intuitively, the problem is that you are willing to count either a ping or the timer, whichever is more favorable to you, which creates a bias.
Edited to add II: this only works with the Android version of TagTime! See the discussion here: universal ping schedule and custom midnight . The issue is that the desktop version of TagTime assumes that the ping data is the absolute ground truth for any beeminder goals it is linked to, and will delete any data points that do not correspond to pings, so it is impossible to add the results of using a manual timer. The Android version of TagTime, however, is simply a tool for sending data points to a Beeminder goal, and does not care whether that goal also has data coming from somewhere else (such as a manual timer).