A few days ago I released a new plugin for App::TimeTracker called App::TimeTracker::Command::Category.

If you don't know App::TimeTracker (or tracker, as the script is called), take a short look at the nice demo here (and if you've got a lot of time on your hand, you can read these (old) slides explaining the architecture and implementation).

Anyway, A:TT:Category uses some nice Moose Metaprogramming and dynamic type constraints to implement a new command line option --category (or --cat for lazy and/or bad typists). The idea here is to specify a list of task categories (per project, job, or even global) like "bug", "feature", "meeting" etc, and when starting to work on a task reminding (or forcing..) you to choose which category the current task belongs to:

 ~/projects/some_job$ tracker start --rt 31420 --cat feature
  Started working on some_job (RT31420, feature) at 21:30:59

Internally, the category is stored as a regular tag, but A:TT:Category makes sure you stick to one of the valid categories.

For now, A:TT:Category only alters start and similar commands, but I plan to add some nice reporting tools. Which are the real reason I've added this feature: I want to know how much time I spend on "productive" task (like "feature"), and how much is wasted (at least from my perspective) by working on bugs, maintenance, support etc.

I also plan to split up the monolithic App::TimeTracker distribution into a small core, and extract various current features into plugins (eg "RT"). Currently you have to install RT::Client::REST even if you're not using RT at all. So stay tuned for some more App::TimeTracker related updates!


App::TimeTracker::Command::Category 1.001 now includes a statistic command, which produces output like this:

 domm@t430:~/projects$ tracker statistic --last day
 From 2016-01-29T00:00:00 to 2016-01-29T23:59:59 you worked on:
    10.1%  bug                   00:45:23
    34.0%  feature               02:32:21
    29.0%  maint                 02:09:52
    13.3%  meeting               00:59:21
    13.6%  support               01:00:49

P.S.: And if I happen to come upon copious free time, I might port the beast to Perl 6...