Okay, I admit it. I'm a clocking fanatic.

I clock everything at work. Org-mode makes this really easy. I'd rather clock too much stuff than not enough so I find it's easier to get in the habit of clocking everything.

This makes it possible to look back at the day and see where I'm spending too much time, or not enough time on specific projects. This also helps a lot when you need to estimate how long something is going to take to do – you can use your clocking data from similar tasks to help tune your estimates so they are more accurate.

Without clocking data it's hard to tell how long something took to do after the fact.

I now use the concept of punching in and punching out at the start and end of my work day. I punch in when I arrive at work, punch out for lunch, punch in after lunch, and punch out at the end of the day. Every minute is clocked between punch-in and punch-out times.

Punching in defines a default task to clock time on whenever the clock would normally stop. I found that with the default org-mode setup I would lose clocked minutes during the day, a minute here, a minute there, and that all adds up. This is especially true if you write notes when moving to a DONE state - in this case the clock normally stops before you have composed the note – and good notes take a few minutes to write.

My clocking setup basically works like this:

Punch in (start the clock) This clocks in a predefined task by org-id that is the default task to clock in whenever the clock normally stops

Clock in tasks normally, and let moving to a DONE state clock out clocking out automatically clocks time on a parent task or moves back to the predefined default task if no parent exists.

Continue clocking whatever tasks you work on

Punch out (stop the clock)

I'm free to change the default task multiple times during the day but with the clock moving up the project tree on clock out I no longer need to do this. I simply have a single task that gets clocked in when I punch-in.

If I punch-in with a prefix on a task in Project X then that task automatically becomes the default task and all clocked time goes on that project until I either punch out or punch in some other task.

My org files look like this:

todo.org :

#+FILETAGS: PERSONAL ... * Tasks ** Organization :PROPERTIES: :CLOCK_MODELINE_TOTAL: today :ID: eb155a82-92b2-4f25-a3c6-0304591af2f9 :END: ...

If I am working on some task, then I simply clock in on the task. Clocking out moves the clock up to a parent task with a todo keyword (if any) which keeps the clock time in the same subtree. If there is no parent task with a todo keyword then the clock moves back to the default clocking task until I punch out or clock in some other task. When an interruption occurs I start a capture task which keeps clocked time on the interruption task until I close it with C-c C-c.

This works really well for me.

For example, consider the following org file:

* TODO Project A ** NEXT TASK 1 ** TODO TASK 2 ** TODO TASK 3 * Tasks ** TODO Some miscellaneous task

I'll work on this file in the following sequence:

I punch in with F9-I at the start of my day That clocks in the Organization task by id in my todo.org file. F12-SPC to review my block agenda Pick 'TODO Some miscellaneous task' to work on next and clock that in with I The clock is now on 'TODO Some miscellaneous task' I complete that task and mark it done with C-c C-t d This stops the clock and moves it back to the Organization task. Now I want to work on Project A so I clock in Task 1 I work on Task 1 and mark it DONE . This clocks out Task 1 and moves the clock to Project A . Now I work on Task 2 and clock that in.