TagTime: Stochastic Time Tracking for Space Cadets (2011)
TagTime: Stochastic Time Tracking for Space Cadets

            
              
            
            
              This article is co-authored with
                Bethany Soule.
            
            
              If you want to
              (bee)mind
              how you spend your time (and
              oh
              do
              we
              ever!) then you need a time tracker.
            
            
              But there’s a big problem with time tracking tools. You
              either have to (a) rely on your memory, (b) obsessively clock in
              and out as you change tasks, or (c) use something like
              RescueTime that auto-infers
              what you’re doing.
            
            
              Well (a) is a non-starter, and (b) is hard if someone comes by and
              distracts you, for example. It can even be impossible. If you
              space out and start daydreaming about sugarplumbs
              [1], you can’t capture that. By
              definition, if you could think to clock out then it wasn’t
              spacing out. (And it might be a real problem you’re working
              on, rather than sugarplumbs [1], but
              either way.) Maybe we have attention deficit disorder or something
              but manual time-tracking never worked well for us. That leaves
              (c), software that monitors what applications or web pages you
              have open. That really seems to miss the boat for us. You might be
              hashing out an API design over email or working out an algorithm
              on paper. Or what if you’re testing your Facebook app, not
              screwing around on Facebook?
              [2] There’s no automated test
              to distinguish wasted time from productive time!
            
            The idea is to randomly sample yourself.
            
              We wanted something completely passive that doesn’t try to
              automatically infer what you’re doing. You might think
              “completely passive without automatic inference” is an
              oxymoron. But we hit on a solution: randomness. The idea is to
              randomly sample yourself. At unpredictable
              [3] times, a box pops up and asks,
              what are you doing right at this moment? You answer with
              tags each time it pings you. At first this yields noisy estimates
              but they’re unbiased and over time plenty accurate.
              It’s just a matter of getting a big enough sample size
              — collecting enough pings, as we call them. It doesn’t
              work for fine-grained tracking but over the course of weeks, it
              gives you a good picture of where your time goes.
            
            
              Here’s one of us (Dreeves) averaging two hours a week
              working on TagTime since it hit the
              dog food
              point, which was almost right away since it started as a very
              simple Perl script:
            
            
              
            
            
              More examples of things we track automatically with TagTime
              — including
              Dreeves’s time spent working on Messy Matters
              — are here:
              beeminder.com/tagtime.
            
            
              So you’ve arranged to have your computer periodically
              interrupt you while you’re working?
            
            
              We certainly appreciate the
              value of not being interrupted. We’ve been using TagTime so long — going on four
              years — that we don’t recall how much of an adjustment
              period there was, but we find it doesn’t interrupt our flow
              at all. We think the difference is that it’s not like, say,
              a pop-up email notifier that pulls your train of thought off in a
              new direction. It’s almost the opposite: it reinforces what
              you’re already focused on. It can even serve to get you back
              on track if your mind is starting to wander. “Oh yeah, this
              email is entirely unrelated to the work I intended to be doing.
              Whoops!”
            
            How much time do you waste on this?
            
              Funny you should ask. TagTime knows. Dreeves spends on average 15
              minutes a day (plus or minus 8 [4])
              answering pings, and Bethany spends 6 minutes (plus or minus 3).
              It goes to show that the time you spend answering pings depends
              somewhat on how much thought you put into it. The taxonomy Bethany
              uses is simpler than Dreeves’s, plus she spends about 10
              hours less at the computer per week (45 hours to Dreeves’s
              56), but Dreeves also had a smaller sample period where he used a
              tag specifically for answering pings (hence the wider confidence
              interval). With zero effort you can learn the amount of time you
              spend at the computer versus not (TagTime autotags pings you
              don’t answer with “afk”).
            
            
              You could also arbitrarily reduce the average amount of time spent
              on TagTime by reducing the rate parameter for the pinging Poisson
              process (i.e., how frequently it pings you), at the cost of
              increased variance in the time estimates. We have it set to ping
              every 45 minutes on average.
            
            
              Other interesting tidbits about Dreeves in particular, who, as we
              noted, is more obsessive about his tag taxonomy: He sleeps 6.7
              hours per night (when he wakes up he answers all pings he
              didn’t hear with the “slp” tag), spends 2 hours
              per week on
              Hacker News, and a bit
              over 20 hours per week with his kids.
            
            So how can I be my own Big Brother?
            
              We’ve open sourced the code on
              github, and if
              you know how to clone a git repository you can figure it all out
              just fine, which is to say it is not exactly user friendly. If
              you’re interested in hearing about development, and being
              notified if/when it is ready for consumption by normal people, you
              can
              drop us a line. There’s also a barebones implementation available on the
              Android Market. The source code for that is included in the TagTime git
              repository.
            
            Bonus Puzzle
            
              Suppose you frequently take the bus, arriving at the bus stop at a
              random time each day. The bus schedule states that, on average,
              buses arrive 15 minutes apart. But, paradoxically, you notice that
              you wait 30 minutes on average before catching a bus. How is that
              possible?
            
            
              Follow-up question: Could something screwy like that happen with
              TagTime? Suppose you get paid every time you get pinged while
              working. (Recall that pings ping per a Poisson process.)
              What’s your optimal strategy for maximizing your effective
              hourly pay rate? (For example, if you were God you would only
              start working for a split second before each ping pings and then
              immediately stop, thus earning an unbounded amount of money per
              hour of work. But you’re not God.) If you’re paid
              d dollars for every ping that pings while you’re
              working and the Poisson process has rate parameter
              λ, how much money can you make per hour of work?
            
            Further Reading and Resources
            
              
                Joel Spolsky has a brilliant article on
                Evidence-Based Scheduling
                which, in particular, proposes another solution to the problem
                of getting interrupted while tracking your time spent on a task.
              
              
                Alternatives to RescueTime:
                TimeAnalyzer and
                ProcrastiTracker are
                Windows-only and we haven’t tried them.
                ActiveTimer
                is Mac-only and we have tried it and it’s nice and simple
                and useful.
                WhatchaDoing
                is tantalizingly close to TagTime yet misses the boat. Finally,
                here’s another
                collection of alternatives to RescueTime.
              
              
                A related hack from psychology is the
                Experience Sampling Method
                in which you query people at random times about their emotional
                state.
              
            
            Addendum
            
              Congratulations to Andy Whitten for solving the puzzle. He gives a
              simple example where 4 buses arrive all at once, every hour on the
              hour. Interestingly, it’s also possible under the constraint
              that the bus interarrival times are
              i.i.d.: With high probability the next bus arrives within a split
              second and with low probability it arrives in an hour.
            
            
              The follow-up question is related to the
              waiting time paradox, and the
              PASTA property
              as pointed out by
              Vibhanshu Abhishek in the
              comments. The upshot is that
              memorylessness
              can be counter-intuitive but it has a very handy property for
              TagTime: There’s no way to game it. If you’re paid
              d dollars per ping and pings ping every
              1/λ hours then you’ll make exactly as much
              on average as if you were just paid an hourly rate of
              d/λ. (For example, if pings ping hourly and
              you’re paid $100/ping then your effective hourly rate will
              converge on $100/hour.) Exquisitely fair, in expectation!
            
            
            Footnotes
            
            
              [1] EDIT: That’s right,
              sugarplumbs. They’re a sweet carpentry device. Thanks to
              Winter Mason for
              noting the distinction from sugarplums, which we totally did not
              mean and would be far less interesting to daydream about. Winter
              thought he was earning the
              $20 typo bounty. Ha!
            
            
              [2] We’ve noticed another
              problem with RescueTime and its ilk, at least on Macs that
              don’t have focus-follows-mouse but do have
              “scroll-follows-mouse”: You can be scrolling around on
              a web page without having changed focus to it.
            
            
              [3] The key to making it fully
              unpredictable is to use a memoryless distribution. I.e., knowing
              exactly when you were sampled in the past tells you nothing about
              when you will be sampled in the future. TagTime achieves this by
              pinging you according to a
              Poisson process, which is to say that the amount of time between each ping is
              drawn from an
              exponential distribution.
            
            
              [4] That’s a 95% confidence
              interval, which is precisely computable by knowing the number of
              pings and the amount of time over which those pings were gathered.
            
            
              Illustration by
                Kelly Savage
            
            
            
              Tags: beeminder,
                time tracking
            
            
              
                Posted 2011 Apr 30.
                RSS feed for comments on this post.
                Both comments and pings are currently closed while we perform
                server maintenance.
              
            
          