TL;DR: I found traditional time tracking annoying because I forget to log activities and can't remember what I did at the end of the day. I tested a sampling approach where you record what you're doing when randomly prompted. Despite taking some time to converge, I find that this method captures more activities than trying to remember everything later. You can try it out at activity-sampler.pages.dev or with a Norwegian interface at prosjekttimer.pages.dev.
Time tracking is a staple of many large organizations. Managers want to know what their reports spend time on. Time tracking can be the basis for invoicing. In companies that do not bill by the hour, time tracking can still be desirable to analyze performance and manage resources.
I find time tracking annoying. I don't remember to register activities as I work, and when the day is over, I don't remember what I spent time on. Therefore, I wondered if I could use another method to track activities.
I understand that when researchers want to know what people spent time on, they use a different method. They give research subjects a pager or a similar device that beeps at set intervals. Subjects then write down what they are doing at that particular moment when the device beeps. By multiplying the total time wearing the device by the frequency of each activity that is noted, researchers can estimate what people spend time on.
This looks like a promising alternative, but I wondered about the optimal sampling interval to get time estimates that converge quickly to the true time spent on different activities. Ideally, I want a measure that is accurate to within a few percentage points within a few days of tracking, not months. Intuitively, a short sampling interval will provide an accurate estimate, but it may be annoying to be interrupted every 5 minutes to record what you are working on. Alternatively, a long interval of an hour or more may not converge fast enough, or may not converge at all if some activities last less than an hour and happen at fixed times. For example, if meetings happen during the first half hour of every day, they will not be recorded at all.
I tested several sampling strategies on a fictitious work schedule that lasted 60 days. The first challenge was creating realistic work schedules. A schedule is composed of different activities. Each activity is defined by two characteristics: the percentage of time spent on it and the length of each session. For example, meetings constitute an activity. I may spend 20% of my time on meetings, and each meeting may last from 30 minutes to an hour.
In my experience, the duration of each activity is not completely random, but is more likely to be a multiple of 15 minutes or so. For some activities, 5 or 10 minutes may also be typical.
I wrote a Python script to generate a 60-day schedule. I defined each activity as follows:
Activity name Percent time Allowed session duration (min) --------------------------------------------------------------------------- Administration 0.35 5, 10, 15, 20, 30, 45, 60, 90 Big project 0.25 15, 30, 60 Small projects 0.10 5, 15, 30 Meetings 0.10 60 Document review 0.10 5, 10 , 15 Efficiency improvements 0.05 15, 30, 45, 60 Recruiting 0.05 30, 60
The script picks the next activity until the minimum workday duration of 7 hours is satisfied. The script picks the activity that is furthest from its target percentage of time. The script assigns a random duration from the allowed session durations. A daily schedule looks like this:
Day 4 ------------------------------ Admin 60' Meetings 60' Big Project 15' Document review 15' Recruiting 60' Big Project 30' Document review 10' Big Project 15' Admin 30' Big Project 60' Document review 5' Small Projects 15' Document review 15' Efficiency improvements 15' Admin 60' ------------------------------ Total time: 7h and 45'
This looks good enough to me. I spend a lot of time during the day doing random things, like talking to colleagues in the corridor, answering emails, or reading the news. These activities end up being registered as administration or another activity. So this schedule is not implausible. At least it captures the fact that a typical day is varied and many activities have short durations.
After only five days of simulation, the percentages of each activity in the schedule are quite close to the target percentages, and after 15 days, they are identical.
Activity Target Day 5 Day 10 Day 15 --------------------------------------------------------------- Admin 0.35 0.33 0.34 0.35 Big Project 0.25 0.24 0.24 0.25 Small Projects 0.10 0.10 0.10 0.10 Meetings 0.10 0.11 0.11 0.10 Document review 0.10 0.10 0.10 0.10 Efficiency improvements 0.05 0.06 0.05 0.05 Recruiting 0.05 0.06 0.06 0.05
The first strategy is to sample at fixed intervals. I tested intervals ranging from 15 minutes to 90 minutes. The estimated percentages for each sampling interval are as follows:
Activity Actual 15 30 60 90 ---------------------------------------------------------------- Admin 0.35 0.33 0.32 0.32 0.32 Big Project 0.25 0.25 0.26 0.26 0.26 Small Projects 0.10 0.10 0.11 0.10 0.10 Meetings 0.10 0.10 0.11 0.11 0.11 Document review 0.10 0.10 0.11 0.10 0.10 Efficiency improvements 0.05 0.05 0.05 0.06 0.06 Recruiting 0.05 0.05 0.05 0.05 0.05
The results are quite close to the actual percentages, but there is some deviation, even for short sampling intervals. The reason is that activities with a duration shorter than the sampling interval can be missed. Even with a sampling interval of 15 minutes, which I would consider annoying and impractical, we miss activities with 5-and 10-minute durations. Another problem occurs with brief activities that have a fixed time, such as daily morning meetings. If the sampling interval is longer than the meeting duration, no meetings will be recorded at all.
Another sampling approach is to use random intervals. I implemented this strategy using a Poisson distribution. The parameter λ of the distribution is the expected number of events (samples) in a given interval. I expressed λ as the average number of samples per hour, and I chose λ values equivalent to the same intervals as before. The results seem slightly better:
Activity Actual 4 2 1 0.67 ---------------------------------------------------------------- Admin 0.35 0.34 0.36 0.35 0.35 Big Project 0.25 0.23 0.25 0.23 0.23 Small Projects 0.10 0.11 0.10 0.09 0.09 Meetings 0.10 0.11 0.09 0.09 0.09 Document review 0.10 0.10 0.10 0.11 0.11 Efficiency improvements 0.05 0.05 0.05 0.06 0.06 Recruiting 0.05 0.05 0.05 0.09 0.09
I generated a work year of daily schedules and implemented sampling with λ=1 (one sample per hour on average) to see how percentage estimates converge to the actual time fractions.
I was surprised by how long it takes for the fraction estimates to converge to the actual values. Eventually we see that Administration comes close to 0.35, Big project approaches 0.25, Small projects, Meetings, and Document review hover around 0.10, and Efficiency improvements and Recruiting come close to 0.05, but it takes half a year, and for some activities, there is still a significant error after a whole year.
This example may be somewhat pathological. I purposely created activities with characteristics that make them difficult to track, such as occurring sporadically (Recruiting) or having short durations and high total fraction (Administration). Additionally, this particular example may have been extremely unlucky. After playing around many times, I typically get a decent approximation after 60 days (approximately 3 months).
I sampled the same yearly schedule with fixed 1-hour intervals (which is equivalent to λ=1) for comparison, and the results were clearly worse. In that case, the estimate for Administration gets stuck between 0.31 and 0.32 instead of 0.35:
Bad as it may seem, random sampling with λ=1 seems to work for me. After using this system for a while, I notice that I am recording more activities and greater variety than when I just tried to remember what I did at the end of the day.
I asked Claude.ai to code a web app that implements random sampling to track time. As long as you keep the tab open, the app will send you notifications at random intervals to record the current activity. The app uses local browser storage, so no data leaves your PC. You can try it out at activity-sampler.pages.dev or with a Norwegian interface at prosjekttimer.pages.dev.
Last updated: 2025-07-25