April 4, 2008

Tracking Tomatoes

I’m spending again some time to improve my time tracking process. The last step I’ve implemented is a feature I was missing before: it’s good to have the number of tomatoes spent on a given task, but how about when that tomato was consumed? This is a nice to know for me to understand the amount of context switching and why there are “holes” during the day when I’m not working tomatoes.

The idea is simple: when I assign a tomato to a task, I’d like to assign a timestamp and an optional description. I can then parse those timestamps and render some useful information on a report. It’s very important that registering the tomato, the timestamp and description is done as fast as possible so I don’t waste too much energy for tracking. If this pre-requisite is not true, I’m spending too much on tracking than the core business and of course I don’t want that

So it turned out that the process is not really different than before. The whole infrastructure is based on OmniOutliner and QuickSilver. QuickSilver is just the interface I use because I don’t want switch countinously between applications. OmniOutliner is organized so that I have projects containing user stories at the top and tasks directly below. This is how a typical session works:

  • I first select the line corresponding to the task I’m going to work next
  • Then I start a countdown timer of 25 mins (I’m currently using this)
  • When the timer’s up, I don’t touch the keyboard and I take my 5 mins break
  • When I’m back, I reset the timer and open QuickSilver to enter the description for the previous tomato spent
  • Start the countown again…

So here’s the nice AppleScript enabling the tracking (I had to split lines with a “_”):

using terms from application “Quicksilver”
on process text tomatoDescription
tell application “OmniOutliner”

tell document “projects-planning.oo3”
if selected row exists then
set selectedRow to first selected row
set newTomatoRowId to id of (make new row at_
end of rows of selectedRow with properties_
{topic:tomatoDescription})
select row id newTomatoRowId
set value of (cell “TStamp” of row id newTomatoRowId)_
to (the (current date) as string)
set value of (cell “Act” of row id newTomatoRowId)
to (“1” as integer)
else
display dialog “Please select a row.” buttons {“OK”}
return
end if
end tell

end tell
end process text
end using terms from

To activate this script, you need to save a file (for example tomato.scpt) in the ~/Library/Application Support/QuickSilver/Actions directory and restart QuickSilver. Then you can just open QuickSilver, type ‘.’, type the description text for the task and the script will do the rest. Of course there are some customization you have to do. I’m using names of specific columns and specific types from OmniOutliner.

You can download the script and the omnioutliner template if you want.

Tomatoes and GTD

If you’re using GTD you may want to integrate the Tomato technique in your process. The values added are many and important:

  • Learning how to estimate tasks and measure the actual effort taken. Why you want to do that? Because then you can plan accordingly and put priorities on tasks based also on the estimated effort.
  • Knowing how long you estimated a task is like a game. You’ll try to be consistent with the estimate and this will help you keep your focus without distractions.
  • Rhythm: the tomato sequence and breaks make your working day sustainable