Two Wrongs

Pomohoro: Combine the Pomodoro Technique with hledger and Timeclock for Productivity

Pomohoro: Combine the Pomodoro Technique with hledger and Timeclock for Productivity

I suck at many things. Two of the things I suck at are

  1. getting things done, and
  2. having any idea of how much time passes when I try to get things done.

I have no sense of time and no sense of productivity.

I wrote a program to solve this, and released it into the wild. You can download Pomohoro here. It tries to keep you focused on a task and it tracks how you spend your time, both in very simple ways. It only works with Linux at the moment, since that's what I use. It uses notifications, which you probably have support for if you use a reasonably "user-friendly" distribution of Linux.

Read the readme file (hey, that's a novel concept!) if you want instructions on how to install or use it. The super basic usage is to run

$ pomohoro start

when you start working, and it will sit quietly in the background and then send a notification after 25 minutes when you deserve a break. All the while it keeps a log of how much you've been working. But it can do more than that! To get a picture of what it can do for you, consult the readme.


This project started when I thought to myself, what if there was some sort of pomodoro timer (what is a pomodoro timer? See below) which automatically filled my timeclock log (what is a timeclock log? See below)? I looked around quickly for this, but didn't find it.

So I took a few hours to build it in Haskell, and I called it Pomohoro.

And to my surprise, it has been really useable.

It is a very simple program, but it has made me vastly more aware of how I distribute my time over school assignments. What makes it so good is that it does not cost me any extra energy to use. Setting a timer is so simple that I barely notice when I do it. And the rest sorts itself out on its own.

The Pomodoro Technique

If you don't know what the pomodoro technique is, here's a rundown of the basics: instead of saying to yourself "I'm going to paint the Mona Lisa!" and getting overwhelmed, you say to yourself, "I'm going to spend the next 25 minutes trying to paint the Mona Lisa. Then I'm going to take a break." By dividing tasks into 25 minute chunks, they feel much more manageable. Sometimes that's the difference between getting something done and not even making an attempt, for people like me.

The pomodoro technique also helps with the sense of time, because more than 25 minutes literally can not pass unnoticed when you set a timer for 25 minutes.

hledger and Timeclock

However, estimating how much effort I put in to each thing is still harder on a grander scale. How many hours have I spent writing the AI essay last week? No clue. So I want a way to track how I spend my time as well.

The great thing about this is that the pomodoro technique naturally lends itself to tracking your time. At the start of a 25 minute session, you say to yourself "I'm going to spend the next 25 minutes doing X". At that point, you may as well put in "25 minutes of X" in your time log. Of course, you want it to be slightly more intelligent and automated than that.

When I worked for a web development company, I used hledger to keep track of how much time I spent with each client. I really like using hledger for that; since it is originally an accounting application, it supports fairly advanced queries regarding how and where you spend your time, and you can even set up time budgets in advance, and include conversion rates between time and money should you want to charge someone for your time. But – big but – the shell scripts I used before to insert starting and stopping times in the timeclock file were a hassle to remember and use.

Now, Pomohoro takes care of this automatically for me, and that is really nice.

Closing Words

What are you waiting for? Go try it out!

I may write an article some time later on some of the architectural choices, perhaps with a Haskell beginner spin. Time will tell!