For almost ten years, I’ve used a mixture of GTD and time tracking to manage my work and personal commitments. Although these systems are pretty reliable, I still procrastinate over some projects. Often these tasks are not particularly difficult or unpleasant; there’s just an ineffable quality that makes them easier to put off until later and later and later and later…

Once something has fallen down the procrastination hole, all the todo apps, calendar reminders and lifehacks on the internet won’t help get it going again. Skinner’s law, on the other hand, might:

“If procrastinating on an item, you only have 2 options:
Make the pain of not doing it greater than the pain of doing it.
Make the pleasure of doing it greater than the pleasure of not doing it.” @george__mack

You can defeat procrastination with the carrot or the stick and I’ve found that money works well as either.

The Stick: Beeminder

On long term projects I use Beeminder as a productivity stick. In a world of increasingly complicated productivity systems, it’s refreshingly simple to explain.

  1. Give them your credit card number
  2. Define a goal that can be measured in increments like “minutes per week”, “miles per day” or “todos completed”.
  3. Record your progress through the site, app, API or numerous integrations.

Fail to record consistent progress and Beeminder charges you increasing amounts for each lapse.

Beeminder graph of progress towards a goal
Beeminding my exercise in minutes per day. If the data-points drop below the red line, I pay them $5

Over the years, I’ve used Beeminder to keep me on track with exercise goals, practicing Spanish, learning Python, eating more fruit and spending less money. It’s a great tool for reinforcing flagging willpower and I highly recommend it.

The Carrot: IFTTT & Monzo

The more pleasant approach is the carrot: a reward that pays out when progress is made. There are todo-apps that add a gamification layer where completion is rewarded with level-ups, but unless you’re dedicated to the game it’s a weak incentive. Beeminder convinced me that cash is a much stronger motivator. With this in mind, I built a system that pays me money for working on my procrastination-projects.

For a cash source I use Monzo, a relatively new, internet only bank. Their API doesn’t allow movement of money between people, but we can transfers between “pots” inside an account. I’ve set a pot called “Carrots” thats will gradually collect my reward payments.

To trigger reward payments, I originally used a self-hosted set of webhooks that Beeminder called whenever progress was added to a goal. The webhooks figured out the appropriate cash reward and handled the transfer in Monzo. However, I found Monzo’s authentication tokens to be extremely short-lived and the overhead of automatically managing them too much of a faff.

Luckily, IFTTT integrates with Monzo, exposing the move-between-pots action and making the authentication their problem rather than mine.

When a datapoint is added to Beeminder, move money into a pot on Monzo

With IFTTT we also get a wide range of possible triggers. Good options might be whenever a run is added to Strava or a task is completed in Asana, but the Beeminder integration works for me.

Fancier carrots with IFTTT Pro

Towards the end of last year IFTTT added a $3.99/month tier that includes a JavaScript editor for more fine-grained control of applets.

IFTTT Pro's workflow screen
IFTTT Pro's workflow with a new filter step

Inside the “Filter Code” step we can interact with our applet’s parts as JavaScript objects and methods

I use in two ways:

  1. To set a minimum qualifying amount before any payment is made
  2. To scale rewards when more progress is made.

For example, I have an applet that pays when I record a run in Beeminder. With the basic applet, a five-minute jog around the block pays the same as an hour in the park. With IFTTT Pro’s filter step, I can ignore runs of less than 15 minutes and pay greater rewards for longer runs.

let minutes = parseInt(Beeminder.datapointAdded.DatapointValue)

if(minutes < 15) {
} else {
  let extra = minutes - 15
  let extraReward = (extra * 0.02)
  let baseReward = 0.5
  let reward = (baseReward + extraReward).toFixed(2)

This gives me a productivity carrot that has been genuinely useful. It’s much easier find motivation to work on a project when I know it’ll have the side effect of putting money into a pot I can spend on treats guilt-free.