Mixed TagTime + manual timer strategies

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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:

  1. Do not count any pings while a manual timer is running.
  2. 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).


Nice writeup! I agree with all the math here, though I worry about creative ways people may find to break TagTime if they go down this road. Like starting a timer, immediately getting a ping, and being all “what timer?” as they surreptitiously stop it.

Maybe there could be an additional principle or corollary about only starting a timer momentously or ceremoniously – like you have to say out loud, “I hereby forfeit all pings starting NOW”.

The main thing I don’t like about the hybrid approach is how it would mess up your your TagTime log, which ought to be the master file accounting for how all your time is spent. You could answer the pings and just not count them towards your Beeminder goal(s) when timing manually but that seems like a big headache.


I don’t see how using a manual timer makes anyone any MORE likely to lie to TagTime. The temptation to lie about what you are doing at the precise moment of a ping is already there; this is no different. In fact it seems somewhat harder to lie about this than about other things, since whether or not the timer is running when you get a ping is a fairly objective, external fact, whether you started it with a bunch of fanfare or not.

The thing about it messing up your data is definitely an issue. What I do is that for each tag foo that I might sometimes track manually, I have another tag called foo-m which I use when I get pinged while a manual timer is running. Of course it is only set up to send a data point to Beeminder for foo, not for foo-m. But when analyzing the data I can strip out the -m suffixes if I want to know how much I did that activity in total. You say this “seems like a big headache” but it is really not that bad.

Of course, there are other reasons you might not want to do this. For example, if you are prone to distraction, or forget to stop your timer when done, or any other reason that using a manual timer might not work well. In such cases you might want to e.g. put something in the fine print of your goal stating that all data points must come from TagTime.

For me personally, I really love the idea of TagTime and how it frees me from having to remember to stop and start timers all the time, but one of the biggest blockers for me to start using it for goal tracking was the high variance. When one of my goals gets down to the wire, it is just too stressful for me to not know whether I will get a ping in time or not. I suppose some people might find it exciting, but I don’t. So it has been a revelation to me that using TagTime for goal tracking doesn’t necessarily have to be so “all in” — I can actually have some control over the variance using manual timers. So I get the benefits of TagTime along with the peace of knowing that I have manual timing as a “safety net” for when things really get down to the wire.