Schedule End of the Work Day Using Org

To get more structure into my day so I get work stuff done in time and have free time in the evenings to tackle other things, I’m now experimenting with notifications to end the work day.

The following is a translated version of the current data. I am using the German term "Feierabend" (which you can shout well); “end of work” is a bit clumsy, and it doesn’t sound like an exclamation.

* Current Sprint <2022-08-08 Mon>--<2022-08-20 Sat>
** <2022-08-08 Mon 16:00> End of Work
** <2022-08-09 Tue 16:00> End of Work
** <2022-08-10 Wed 16:00> End of Work
** <2022-08-11 Thu 16:00> End of Work
** <2022-08-12 Fri 16:00> End of Work
** <2022-08-13 Sat 16:00> End of Work
** <2022-08-15 Mon 16:00> End of Work
** <2022-08-16 Tue 16:00> End of Work
** <2022-08-17 Wed 16:00> End of Work
** <2022-08-18 Thu 16:00> End of Work
** <2022-08-19 Fri 16:00> End of Work
** <2022-08-20 Sat 16:00> End of Work

For years, I’ve used org-mode (or just “org”) time stamps on isolated lines, as if they were something special. But this compact way to write things is pretty nice:

  • The top-level item “Current Sprint” has the 2 weeks of work range at the end of the line. This demotes the time, and promotes the item’s textual content. (As an effect, I can see at a glance when the sprint is over from the org file’s overview, and still get each day marked in the calendar/agenda.)

  • The second level items called “End of Work” mark each work-day’s, well, end at 4 p.m. – This is absolutely new to me. Previously, work would bleed well into the evenings and thus fill whatever the time I gave it.

You can see I just started this yesterday, so there’s not much experience on this, yet, but it’s currently 16:10 here, and I’m writing this after excitingly calling it a day at the allotted time :)

Now you’ll notice that each of the 12 “End of Work” items is very repetitive. That’s how you represent a daily repeating time entry with exceptions (here: Sundays).

But I didn’t create these manually. I looked up how to duplicate org headings/outline items and advance their scheduled times. Took a bit to figure out the nomenclature.

The term to duplicate org-mode items with dates and increment the date for each copy is “cloning”. This applies regular date-time stamps like I use them, and it applies to scheduled or deadlined items (these show as overdue when not completed).

(org-clone-subtree-with-time-shift N &optional SHIFT)

org-clone-subtree-with-time-shift is bound to C-c C-x c by default

The steps to clone an item for every day of the next 2 weeks, insert:

* <2022-08-08 Mon 10:00> Some appointment
  • Select that line, then press C-c C-x c to clone the subtree (item);
  • Enter the amount of copies, e.g. 13 (for 14 in total, including the original);
  • Enter the time shift in org syntax of +1d;
  • Delete Sundays manually.

That’s going to be my approach for the forseeable future to keep a track of work time and play time (which often is also work time, but on different projects).

The weird thing this cloning does to me is to accept that this plain text time management approach is malleable. I don’t set up a rule in a programmatic or algorithmic way once, and then it sticks – no, I create 14 lines for the current sprint, then I’ll delete these, and then I’ll create 14 new ones for the next sprint. Maybe I’ll not even delete these before the next sprint because keeping them around doesn’t hurt.

It’s a bit like accepting the chaos a pet can cause in your otherwise tidy apartment.

Feels odd at first, but when you accept it, it’s quite a relief actually.