How I Org mode (2022 edition)
2022-05-31 12:12:03 +0200 +0200
Following up from Being organized, here’s some explanation of what I am doing day-to-day to be organized at work. This what works for me; it very likely won’t work exactly for you. (Also, it’s built on Emacs1 which may make you want to stop reading now. 😅)
With that out of the way, let’s talk about Org mode!
Org mode
At the core of my process is Emacs Org mode. In a nutshell, Org mode is a combination of a file format (.org
files) and software (Emacs + a special mode for interpreting these files). Like many things in Emacs, there is a wide variety of ways you can customize and set things up for yourself. Org mode is no exception, and there’s different advice on how you might want to organize your tasks, notes, tags, projects, etc.
For myself, I’ve settled on the following.
todo.org
and ~/org
I use a single file, todo.org
for my TODO items. There’s another file called todo.org_archive
where I archive old notes. (I have in the past tried per-project files, or per-context files, but that was too complicated.)
I have (setq org-directory "~/org")
, so everything in a directory called ~/org
in my home directory is where Org mode software knows to look for files. I placed this directory in version control.2 I use git-auto-commit-mode
so that after every save to a file in ~/org
, there is a new commit.3 One cool thing about this is that I can pretty easily travel back in time to see what my TODO list looked like in the past, which is useful when trying to piece together reports for quarterly reviews, for example.
Using headings
I organize headings in my todo.org
file with the type of work that it is. And I have brackets [0/0]
after each heading so that I can update the completion status with C-c C-c
, although in truth I don’t use that so much:
Actually, I rarely look at the todo.org
file directly. Instead, I spend most of my time using an amazing feature of Org mode called Agenda.
Agenda
It took me a long time to realize that the main strength (for me, anyway) in Org mode was in relying on its agenda functionality. That software parses the items in my todo.org
file and creates a list of 1) scheduled tasks, 2) tasks with deadlines, and 3) a global list of all TODO items.
And that’s the thing that I look at many, many times per day, and how I interact with my task list.
Writing my standup report
My team has a daily email thread where we’re supposed to write about what we did the previous day. Since I have a hard time remembering all of that, I rely on Org mode to tell me what I did:
- When I start a task, I clock into it (
org-clock-in
). That writes some data to a file calledclock.org
in my~/org
directory. The next day, I can runorg-clock-report
and that gives me a table summary of different tasks I worked on and how long I spent on them. - I am not super disciplined about always clocking into the correct task (multi-tasking happens!), and sometimes I do tasks without putting them in
todo.org
first, so as a fallback I also look atorg-agenda
for the previous day and can see there what other things I did that I didn’t clock in for.- I do however try to make sure that if I am working on something for more than 5-10 minutes, that there is an entry in
todo.org
that corresponds to it, and that I’m clocked in for that task.
- I do however try to make sure that if I am working on something for more than 5-10 minutes, that there is an entry in
Managing the firehose
On a typical day I have a few hundred emails, some dozens of Slack threads, plus things that come up during meetings. I try as quickly as possible to move things I see as “this needs some action from me” out of the app in question (my email client, Slack, etc) and into todo.org
where I can process it later.
I make extensive use of org-capture
templates for that:
(use-package! org-capture
:config
(add-to-list 'org-capture-templates
'("w" "Writing" entry
(file+headline +org-capture-todo-file "Writing")
"* TODO [#C] %? \n%u\n" :prepend t))
(add-to-list 'org-capture-templates
'("c" "Comment" entry
(file+headline +org-capture-todo-file "Comment")
"* TODO [#C] %? \n%u\n" :prepend t))
(add-to-list 'org-capture-templates
'("r" "Read / Research" entry
(file+headline +org-capture-todo-file "Research")
"* TODO [#C] %? \n%u\n" :prepend t))
[...]
(add-to-list 'org-capture-templates
'("d" "TODO" entry
(file+headline +org-capture-todo-file "Inbox")
"* TODO [#C] %?\n%u\n" :prepend t)
))
Then, when I need to do something, I can run SPC X
and select a capture template:
From there I can add some metadata, like the relevant URL, as well as a scheduled date to work on it. I almost always try to set a scheduled date, so I don’t forget about things, and I usually try to add a URL. But at the minimum, I need to add things to the file, so I can stop holding them in my head and not worry about forgetting that I was supposed to do something.
** TODO [#B] [WIP] Delete the custom phpunit.php entry point
SCHEDULED: <2022-05-31 Tue>
:PROPERTIES:
:URL: https://gerrit.wikimedia.org/r/c/mediawiki/core/+/693566
:END:
[2022-05-31 Tue]
I’ve also customized the capture templates to add a timestamp, so I can easily see when I added something to my backlog. When I finish capturing the task, it goes into a relevant heading, and each heading has a custom icon to make it easier to visualize what the task is about when looking at my agenda.
For emails, I use the subject line in the TODO heading, so I can find my way back to the message, and for Slack threads I can link directly to the thread.
I avoid setting deadlines unless there really is one, because once a deadline is added it tends to crowd out other items in the agenda view.
At the beginning of the day, I add meetings from my Google Calendar so I can see how those fit in with other work I’ve got scheduled for the day. Sometimes I try to schedule specific tasks for different parts fo the day, that definitely helps me be a bit more organized.
Finally, I try to set an estimate for tasks; I can then use the agenda’s filtering option to find tasks that are e.g. < 30 minutes when I know I have half an hour before a meeting, for example. Though I don’t make heavy use of that feature.
I have in the past tried solutions that would sync directly from e.g. Gerrit/GitLab/Phabricator to my todo.org
file but have given up on automated solutions; I’d rather pick and choose what I put into the TODO file, that also lets me be more specific about what my specific role is on a given task (e.g. do I need to approve the patch, or should I comment on it, or just read it for awareness).
What else?
- I don’t really take notes in Org mode. I used to, but most of my meetings involve collaborative documents with colleagues, so it’s easier (and more social) to add notes there directly. Occasionally I will add some small notes to a task if I end up not doing it, though.
- I try to periodically archive tasks so that agenda loading and interaction is fast. I’m not great about doing this.
- I regularly look at my backlog and reschedule tasks or shuffle them around as needed. I have yet to find a better tool than Org mode for doing this with lots of TODOs.
There’s plenty of rough edges in this workflow, but overall it works and beats (in 2022, for me) various other tools that I’ve tried. YMMV!