thisago's blog


Making my work stats public

Table of Contents

This time I'll break a little my defaults.

With some Python scripting and a better understanding of Org Mode, I managed to generate a report of how much time I spend in each task type (review, feature, bug, etc).

The insights met my initial expectations, and then, suddenly I wanted to share that.

How

I won't explain that much. My last devlog provided an quick overview, so feel free to see it.

The full code and a working example now exists in the repo: thisago/archiveReporter: Report insights about your Org Mode archive! - Codeberg

The process

I encourage you to review the real repo, but I'll overview here a little:

  1. I have an global archive file which holds all my done/cancelled tasks.
  2. An python script provides functions to handle the tables, which Org Babel converts to a 2d string vector
  3. A report file (ie., reports.org) is the entrypoint. It uses the global archive file.
    1. It collects the total count of tasks and clocked time with a general clocktable, scoping only the job scope.
    2. Then I create a couple of reports, one for each major task type, matching the Org tag.
    3. A Org Babel block imports the Python script as lib and runs the report.
    4. A bash code block dumps the results to a file, for easy comparison.
  4. And now, a bash script anonymizes the data (removes the hours and salary info), which I commit in a separated repo.

The repo with the anonymized reports: thisago/anonimizedArchiveReports - Codeberg

Last month report

Here's an example, the last report:

#+title: 202602

* Hour Price
Expecting 160 worked monthly hours by a XXk/mo salary:
- Worked a total of *XX* hours across *58* work items.
- This means a salary of *XX/h*.

* Comparing the Workload
Of a total of *XX* hours worked this month across *58* work items.
- =review= :: *XXX hours (22.8%)* across *19* work items (32.8%)
- =feature= :: *XXX hours (6.4%)* across *3* work items (5.2%)
- =bug= :: *XXX hours (28.0%)* across *8* work items (13.8%)
- =task= :: *XXX hours (30.7%)* across *19* work items (32.8%)
- =social= :: *XXX hours (3.1%)* across *2* work items (3.4%)
- =plan= :: *XXX hours (1.7%)* across *2* work items (3.4%)
- =investigate= :: *XXX hours (4.0%)* across *2* work items (3.4%)
- =polish= :: *XXX hours (1.0%)* across *1* work items (1.7%)

Cumulated total percentage *97.7%* (100% means all that tasks was considered)

Keep yourself on track. Bye.