La technique Pomodoro

Cette technique Pomodoro (site en anglais) consiste simplement à se concentrer 25 minutes sur une tâche et puis à prendre 5 minutes de pause, et recommencer :

  • choisir une tâche à accomplir
  • démarrer une minuterie pour 25 minutes (le Pomodoro étant un minuteur qui ressemble à une tomate)
  • travailler sur la tâche jusqu'à ce que votre Pomodoro ou minuteur sonne
  • prendre une courte de pause (5 mn)
  • chaque 4 Pomodoros (ou Pomodori plutôt) prendre une pause plus longue

Comme je le disais dans le précédent billet le format 25 minutes/5 minutes, me paraît trop court pour mon façon de travailler. Je fais donc plutôt un Pomodoro de 50 minutes puis 10 minutes de pause.

Mise en oeuvre via org-mode

Précédemment j'utilisais Workrave pour mettre en oeuvre la méthode Pomodoro. Mais maintenant je peux faire du Pomodoro directement avec mon outil de gestion de tâches/temps (le module org-mode d'Emacs).

Voici le paramétrage pour cela.

Lorsque je travaille sur une tâche je déclenche toujours l'horloge (fonction org-clock-in) que j'arrête (org-clock-out) à la fin du travail sur la tâche. Cela me permet de voir le temps passé sur chacune de mes tâches.

Pour la partie Pomodoro je vais donc utiliser en plus le module org-timer, qui permet de déclencher une minuterie, avec un peu de paramétrage pour automatiser au maximum et rendre l'opération non interactive et transparente d'un point de vue utilisateur. En effet normalement l'appel à la fonction org-timer-set-timer est interactive, il faut indiquer le nombre de minutes de la minuterie, par exemple :

How many minutes left? 30

Quelle configuration mettre en place pour le Pomodoro ?

D'abord il faut que le module org-timer soit chargé en même temps que org-mode. Pour cela il faut ajouter org-timer à la variable org-modules, par exemple dans le fichier .emacs:

(add-to-list 'org-modules 'org-timer)

Ensuite, affecter la durée d'un Pomodoro comme valeur par défaut du timer, par exemple pour 25 minutes : :

(setq org-timer-default-timer 25)

Ensuite, je configure la fonction org-clock-in pour que lors de l'appel de cette fonction la minuterie se déclenche avec la valeur par défaut, sauf si une minuterie est déjà en cours. Voici le code pour cela :

(add-hook 'org-clock-in-hook '(lambda () 
      (if (not org-timer-current-timer) 
      (org-timer-set-timer '(16)))))

Je modifie également le comportement de la fonction org-clock-out :

(add-hook 'org-clock-out-hook '(lambda () 
      (setq org-mode-line-string nil)))

Si on veut on peut aussi s'arranger pour que par exemple lorsque la minuterie arrive à 0 (fin du Pomoro) un message s'affiche avec le système de notification graphique avec par exemple :

(add-hook 'org-timer-done-hook '(lambda() (start-process "orgmode" nil "/usr/bin/notify-send" "Orgmode: Il est vraiment temps de prendre une pause")))

Avec cette configuration je peux tout simplement :

  • Aller sur la tâche à laquelle je veux m'atteler
  • Taper I pour déclencher l'horloge. Si une minuterie n'est pas en cours alors elle est démarrée avec pour valeur 25 minutes, si une minuterie est déjà en cours celle-ci se poursuit
  • Une fois le travail fini sur la tâche je tape O pour arrêter l'horloge
  • Je vais sur la tâche suivante et je recommence le processus
  • Lorsque la minuterie atteint 0 un message s'affiche m'indiquant qu'il est temps de prendre une pause

Un grand merci à Bastien Guerry pour avoir modifier org-timer suite à mes suggestions.