timewarrior, la gestion du temps pour les amoureux de la CLI

closeCet article a été publié il y a 3 ans 1 mois 22 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Au travail, nous sommes toujours plus pressés de saisir correctement le temps passé en actions clients ou internes. Pour ça, il faut disposer d’un minimum d’outils pour le mesurer, et c’est un choix sur lequel nous sommes libres. J’avais déjà un outil graphique qui faisait le taf, mais pendant l’année 2020, j’ai cherché un remplaçant, et mon dévolu s’est jeté sur timewarrior.

Quand je dis qu’on est libre, c’est qu’on a aucun outil recommandé, proposé, standardisé. On a donc toute latitude pour trouver l’outil le plus adapté à notre personnalité, tant qu’il permet de remplir ce besoin de traçabilité renforcée. Étant sysadmin, linuxien de surcroit, j’ai cherché quelque chose de minimaliste et efficace. J’utilisais jusque là un outil créé en interne par un collègue de longue date, écrit en Qt4, non maintenu, mais que j’avais réussi à compiler moi-même sur ma VM Ubuntu, et que j’ai transféré sur ma Manjaro.

Son fonctionnement était diablement simple, c’était un gestionnaire de chronomètres, avec possibilité de prises de notes. Un champ texte pour dire sur quoi on bosse, on clique sur démarrer, et la liste affiche un nouveau chronomètre avec le contrôle start/stop. Démarrez un nouveau chrono, celui en cours s’arrête, et on peut rebasculer comme ça sur toutes les tâches. Chaque chrono s’accompagne d’un champ pour prendre des notes, pratiques pour saisir le compte rendu en fin de journée.

L’aspect non maintenable m’embêtait un peu, mais ça fonctionne du feu de dieu, et je n’ai pas ressenti le besoin urgent de changer lorsque j’avais viré ma VM pour basculer full linux. 2020 est passé par là, et j’ai commencé à me renseigner sur des alternatives qui seraient plus solides à long terme. Et puis le blog de Redhat m’a présenté timewarrior.

Timewarrior, la gestion du temps en ligne de commande

La plupart des alternatives que j’avais trouvé s’avéraient être des gros lourdingues de la gestion de projet, autant dire que j’étais pas fan. Il me fallait quelque chose d’épuré, à l’image de l’outil actuel, et multiplateformes. Ceux qui s’en rapprochaient fonctionnaient en mode web, via le navigateur donc, sauf que la plupart du temps, hébergés aux USA.

Autant dire que la découverte de timewarrior a été une très plaisante surprise : certes pas graphique, pas de prise de note, mais un système de chrono avec tags, historique sur au moins un an si on veut, et la possibilité de les manipuler après coup quand on se foire parce qu’on a oublié de changer d’activité. L’utilisation des tags permet de faire des statistiques sur plusieurs jours pour additionner le temps passé sur une même activité, ou plusieurs activités pour un même client par exemple.

Et oui, techniquement, on peut dire que timewarrior est multiplateforme, car désormais avec le Windows Subsystem for Linux (1 ou 2), il est très facile de se l’installer ailleurs que dans un Linux natif.

WARNING : en le testant sur mon Ubuntu 18.04 WSL, j’ai rencontré des bugs dans la version 1.0.0. J’ai désinstallé cette version pour faire une compilation manuelle de la version 1.4.2 en suivant la doc (ça a pris moins de deux minutes installation finale comprise). Les bugs ont disparu 🙂

La prise en main très, très basique est rapide : start, stop, continue, delete, tag, untag… les commandes sont faciles à taper, l’outil lui-même s’appelle timew, ce qui est plus facile à taper (même avec l’autocomplétion), bref, on rentre vite dedans. Mais dès qu’on rate un truc, qu’on oublie de lancer un chrono, et qu’on doive retoucher son historique récent, ça devient vite sport, et la documentation n’est pas forcément toujours super clair sur ce qu’il est possible de faire. Ceci dit, pour plusieurs aspects elle m’a quand même permis de m’en sortir, donc même si je ne vous le répéterai pas toutes les deux minutes, si vous vous posez une question pendant la lecture de la suite, la documentation sera probablement la réponse.

Les usages simples

  • On démarre une journée : timew start "Premiere tache" clientA
  • Deux heures après, on passe à la suivante : timew start "Deuxieme tache" clientB
  • Celle-ci n’est pas terminée à l’heure du déjeuner : timew stop
  • Reprise après le repas:  timew continue
  • Début de la réunion client en cours d’après midi : timew start reu_client clientX projetX
  • Fin de la journée : timew stop

Si c’est votre premier start avec l’outil, il vous demandera de créer la base de données locale, acceptez.

Voilà le résultat :

Je rêve d’une telle journée aussi simple et pourtant bien remplie. On peut en voir le résultat avec la commande summary :

On voit chaque tâche avec son début, sa fin, ses tags. Les tags sont particulièrement pratiques dans timewarrior. Par exemple, le boulot sur la deuxième tache a été coupée par le repas du midi, si on veut faire le total de ce boulot, il suffit d’ajouter le tag au summary :

Petit aparté sur les tags, il n’est pas possible d’avoir un tag avec uniquement des numéros, parce qu’il essaie de traduire ça en temps. Ensuite, si vous saisissez plusieurs mots sans plus de formatage, chaque mot sera un tag indépendant. Si vous voulez avoir un seul tag avec tous les mots, utilisez soit des guillemets, soit remplacez les espaces par des underscores. Aussi, évitez les accents dans les tags, ça donne des comportements bizarres par la suite.

timew continue permet de démarrer une nouvelle tâche en reprenant les tags d’une tâche précédente. Si on ne met rien c’est la dernière en date qui est reprise, mais on peut aussi spécifier une autre tâche passée.

Il est possible d’ajouter des « hints », des options au résumé. Par défaut toutes les commandes s’appliquent à la journée en cours. Pour afficher le résumé de la veille, on ajoute :yesterday. Si on prévoit de retoucher les tags ou les intervalles, il est nécessaire d’avoir l’identifiant de la tâche, et c’est :ids qui permet de les afficher, je le mets quasi systématiquement.

On va garder cette journée de base pour se pencher sur des actions plus poussées qui reflètent un peu plus une vraie journée de boulot.

Les usages plus poussés

Imaginez qu’en fait, vous avez commencé la deuxième tâche un quart d’heure plus tôt, et que vous avez oublié de démarrer votre deuxième chrono au bon moment. On cherche donc à réduire la première tache de 15 minutes et déplacer le début de la deuxième tâche en conséquence. Commençons par réduire cette première tâche :

je refais un petit summary pour vérifier la présence du « trou » :

Pour déplacer le début de la tâche, plutôt que l’instruction move, qui va conserver la durée totale, et donc déplacer aussi la fin (je conseille donc move pour la tâche en cours plutôt qu’une tâche passée), on va plutôt la modifier :

Vous l’aurez compris, dans plusieurs commandes demandant de manipuler les intervalles, on peut spécifier le temps précis à la seconde !

Un autre problème qui m’est déjà arrivé plus d’une fois, éteindre le PC en fin de journée sans faire de stop. Dans ce cas, la tâche est considérée comme toujours en cours et quand on démarrera le matin, la tâche qui aura duré toute la nuit s’affichera de manière spéciale : pour rappel l’affichage standard ne concerne que la journée en cours. Si on affiche le résumé la tâche semble démarrer à minuit. Attention, c’est un piège ! En effet, si on affiche le résumé de la semaine, on voit que la même tâche court sur deux jours, avec le même identifiant. Il ne faut donc pas simplement supprimer cette « mauvaise » tâche, il faut simplement la traiter. Les commandes modify ou shorten seront là pour vous aider.

Autre oubli, carrément, une tâche complète à la suite d’un appel à l’aide d’un collègue qu’on a oublié de noter. Admettons par exemple que notre deuxième tâche a été entrecoupée le matin d’une vingtaine de minutes au téléphone. Vu qu’on doit insérer une tâche au milieu, on commence par couper l’existante en deux. Ça tombe bien, y’a une commande pour ça :

On modifie ensuite les deux tâches nouvellement créées pour faire de la place, avec shorten/modify une fois de plus. Pour ajouter une nouvelle tâche au milieu, pas possible de faire un start dans le passé, on se prendrait une erreur de chevauchement d’intervalle (il va prendre la nouvelle tâche à l’heure de début, mais entre deux, il y a déjà d’autres tâches). On va donc réafficher le résumé :

On voit bien notre « trou » entre 10h46 et 11h06. Et c’est la commande track qui va permettre de faire le boulot, en lui indiquant le début et la fin de notre nouvelle tâche  :

Dernier cas que je vais vous présenter qu’il m’arrive aussi de faire, démarrer un chrono parce qu’on pense travailler sur un truc, démarrer un autre truc, et au bout de 20 minutes, se dire « merde, c’est pas la bonne tâche », et de juste faire un start ou un continue pour reprendre des tags existants. Il reste donc une tâche avec des tags qui ne correspondent pas parce qu’on a pas vraiment travaillé dessus ! Pour expliquer comment s’en sortir simplement, j’ai modifié le boulot de l’après-midi pour dire que j’avais fait quelque chose avant le meeting que je n’ai au final pas fait puisque j’ai continué ma tâche d’après manger. J’ai plusieurs possibilités, supprimer cette tâche (delete) et déplacer la fin (modify end), mais il y a une autre manière de faire, ce qui me permet de montrer ce qu’on peut faire avec les tags. On commence par supprimer les tags de la tâche fantôme :

Dans le résumé, on a désormais deux tâches avec les mêmes tags. C’est le même boulot, donc autant les fusionner :

Si les tags sont différents, il les regroupe dans la tâche nouvellement créée. Et on remarquera au passage que le total reste identique malgré toutes ces manipulations.

Un peu de sucre dans le résumé ?

Le résumé texte est parfait pour pratiquer la saisie en fin de journée de ce qu’il reste à renseigner. On peut toutefois avoir besoin d’un visuel différent. Par exemple, le résumé par défaut ne peux pas faire de statistiques sur tous les tags, il faut les saisir un par un. c’est lourd, fort heureusement, il existe un plugin qu’il faut activer pour pouvoir faire ces statistiques. la doc pour l’activer est assez claire, et voilà ce que ça donne :

<à bidouiller à partir d’un rapport de tags du laptop pro>

Autre élément un peu plus sympathique mais qui demande un peu de taf pour être réellement exploitable, la possibilité d’afficher un graphe, à savoir une vue « calendrier » des tâches, sur la journée, la semaine, le mois… Le seul souci, c’est la vue par défaut :

On le voit, il prend de minuit à minuit, deux lignes de caractères pour une journée, et le nombre de caractères par intervalle est aussi assez court. Ce coup-ci, il faut un peu d’huile de coude, et j’ai pas mal tâtonné pour arriver à un affichage intéressant. On peut commencer par tester des modifications directement en ligne de commande :

Une fois qu’on considère avoir des réglages intéressants, on peut aller dans le fichier ~/.timewarrior/timewarrior.cfg pour graver les réglages dans le marbre, perso, j’ai ajouté les lignes suivantes :

On voit qu’il faut indiquer les paramètres pour chaque type de graphe, je me suis limité à ceux que j’utilise le plus, hours=auto permet de masquer les heures non travaillées, c’est pratique, ça élargit d’emblée et permet d’élargir les cellules (6, ce qui permet d’avoir des tranches de 10 minutes), sur 6 lignes pour la journée. Les couleurs étant limitées (une même couleur sera affectée aux tâches avec les mêmes tags), ça permet de voir les tags.

Le même avec une souris ?

Une interface graphique aura certainement plus de possibilités d’organisation et de retouches. Perso j’ai plus vite fait d’appuyer sur F12 et de faire un start que d’ouvrir un onglet de navigateur sur mon outil, attendre qu’il démarre, et ajouter une nouvelle tâche. Mais bon… Certains collègues m’ont montré leur usage de l’outil Toggl Track, qui bien qu’hébergé sur GCP a été développé et est opéré par une société en Estonie. Il est possible de l’utiliser gratuitement, et pour ceux qui voudraient aller plus loin, les fonctionnalités associées sont réservées à un abonnement. Et pour les entreprises qui voudraient se baser fortement sur les outils de la société, là, il est préférable de les contacter directement.

La surprise de ne pas voir de société US directement sur le développement de l’outil (seulement son hébergement), ne suffit pas à m’empêcher de dire qu’on a pas besoin d’une entreprise qui collecterait toutes ces données. Pour ça, il existe une autre solution, traggo. Open-source, auto-hébergeable, c’est vraiment un clone très proche de Toggl. Il est écrit en Go, l’installation est donc diablement simple, et la doc montre un déploiement docker très rapide aussi, il y a des chances qu’il fasse un tour sur mon cluster k3s pour vérifier s’il peut m’apporter plus (les fonctions de reporting sont naturellement bien plus avancées que pour timewarrior).

Et vous, vous utilisez quoi ?

J’ai fini par trouver un rythme de croisière et un confort d’usage au bout de deux semaines avec timewarrior. Sa simplicité relative fait qu’on prend très vite le pli sur des opérations simples, la doc manque parfois de clarté dans le formatage des options pour des cas poussés, mais on s’en sort finalement assez facilement. J’ai même commencé à m’en servir à titre perso, par exemple pour mesurer le temps que je passe en écriture sur le blog. Bon la rigolade, c’est que j’ai zappé de me mesurer pour cet article, mais ça peut être intéressant quand même, pareil pour les opérations de maintenance des serveurs.

Et vous, vous utilisez quoi pour mesurer le temps passé au boulot ?

1 Commentaire
Le plus ancien
Le plus récent
Commentaires en ligne
Afficher tous les commentaires
Ulrich
08/03/2021 22:52

Hello, de mon côté, j’utilise jiffy (https://jiffy.nu/) sur mon téléphone Android. C’est pas libre mais bien pratique.