All in with org-mode

emacs geekery

After I posted about using org-mode, Jack Baty wondered (somewhat tongue-in-cheek) how I managed with keeping only some of my tasks in org-mode. Actually, it wasn’t really a problem copying tasks across from OmniFocus to enter into my journal entry for the day. However, I inevitably started wondering whether I might be able to go the whole hog and use only org-mode for tasks. Would I lose track of things? Could I capture tasks efficiently when away from my computer before I forgot about them? Would the world explode into chaos? Well, if you don’t feel like reading further, the answers to those questions are No, Yes, and Quite Probably, But Not Because I’m Using org-mode.

I started cautiously. I kept my OmniFocus database intact and updated for a while just in case it all went wrong. I started by creating three files, and re-creating my existing tasks from OmniFocus. The files were emacs.org for noting down things I want to tweak in Emacs (plus notes on things I’ve learned about it), personal.org for personal tasks, and work.org for — well, you get the idea. I organised the work file into sections corresponding to research, teaching and admin, and then created projects within each of those, which are really just hierarchical headings which I created a custom PROJ todo keyword for. I added these files to my list of agenda files (so their todos would show up on the org-agenda) along with the tasks in my journal files.

A key part of the puzzle was putting the files in an iCloud folder so that they would sync with the beorg iOS application and sync between computers. I can’t say enough good things about beorg. The author (Matthew Kennard) has done an amazing job of translating the key org-mode features into formats which make sense on a mobile device, and making it feel very natural. You can use a lot of the features for free to see if it is for you, but I strongly recommend paying the very reasonable yearly fee (I think it was under £10 a year as far as I recall), as it unlocks a lot of great features like having different capture templates and being able to view, start and stop timers within the app. Capture works very well, and beorg integrates superbly with Shortcuts, so you can set up nifty custom workflows. I used this tutorial as a base to set up a custom Shortcut that I can trigger from the share sheet in Safari on iOS to capture the webpage I’m on. I’ve also set up a Drafts workflow so I can enter stuff there (by dictation if necessary) and send it over to beorg. So, that fear was allayed — I can easily capture stuff on the go, as well as view my upcoming tasks and even edit them if the need arises. I only miss two very minor things in beorg: you can only refile to the file level (not to a header within a file), and I can’t view my journal in it as beorg only searches the root directory, not subdirectories. Neither are real problems for my workflow, and given the steady pace of updates, it is possible that they will appear sometime in the future.

My other worry was about losing track of things. Again, I need not have worried about this. I’ve been using this system now for several weeks, and if anything I have felt more on top of what I need to do in a busy period. In particular, I have found it easier to do effective reviews each week to pick up projects which have stalled a bit, and make sure that I am aware of upcoming deadlines and so on. They key is to use org-agenda as much as possible, creating a variety of custom views so that you can slice and dice your files and see just the level of detail you need at that moment.

As I have adopted org-mode, I have slightly altered the way I organise my tasks into files. I found that the work.org file was getting rather big, so I split it into smaller files, with most of my big work projects getting their own file, each of which has a ‘Tasks’ heading and a ‘Notes’ heading. This has made it much easier to keep all the related information together, which — after all — is a key benefit to org-mode. Early on, I discovered that if you add a header line to the file like this #+CATEGORY: work, each of the items in that file has that category defined (rather than the file name, which is the default) and printed to the left of the files’ entries in the agenda. This makes it possible to split your work (or whatever) tasks across multiple files, and yet make decisions about their visibility based on this category. In the agenda, you can put your cursor on a ‘personal’ category entry, hit < and then only personal tasks are shown in the agenda. I sometimes do this on the fly for my work agenda (which shows both kinds), but I have also created a ‘Personal’ daily agenda which only lists personal items. If I have to look at work at the weekend or in the evenings, I can use the work agenda, but when I am not at work I really don’t want to see those items.

My general workflow is fairly simple, but I feel on top of what I need to do. I capture tasks, either through beorg or Drafts on iOS, or via an Alfred workflow on macOS. I have a couple of Alfred workflows, one of which can capture selected text and website details to the clocked task, converting HTML to org-mode markup along the way using pandoc. This is great for quickly gathering information to add to the tasks I am currently working on, without breaking my focus (it saves the information immediately without bringing up the capture window).

Each morning, I look at my daily agenda (either in beorg or in Emacs itself). I use deadlines very sparingly: if someone is going to yell at me, or if there is no point in doing the task after a certain date, I add a deadline, but otherwise I tend to organise my work by using SCHEDULED dates. When I look at the agenda each day, I will have already scheduled tasks for the current day, but I may reschedule some of them if I have been over-optimistic, or if other things have come up. The nice thing is that if you don’t complete a scheduled item on one day, it will automatically appear the next day, with a marker telling you how many times it has been automatically re-scheduled. I find that a useful prompt to remind me to get my act together and actually do the thing, or else reschedule it properly to a later time. I open the agenda a lot so I have bound my work agenda to F12 and my personal agenda to C-F12. I added popup rules to these windows to get them to open a slightly smaller split window to the right, like so:

;; Popup rules
;; Make org-agenda pop up to right of screen, 45% of width
(set-popup-rule! "^\\*Org Agenda" :side 'right :size 0.45 :select t :ttl nil)
;; Same for org-ql
(set-popup-rule! "^\\*Org QL" :side 'right :size 0.40 :select t :ttl nil)

During the day I work on stuff, clocking into major tasks as I go to get a feel for how I am spending my time and how long tasks actually take versus how long I think they will take. Being clocked in to a task also means I can shoot notes straight to the current task to update it with information as I go. This is particularly helpful if I don’t get it done in one day and have to come back to it. When I clock into a task it also automatically changes the keyword to INPR (for ‘in progress’), so I can easily spot ‘open’ tasks that are half-completed. I can mark tasks done on either my phone or Mac, and also stop or start timers from either, which is particularly helpful for those times when I have left the office for a meeting and realise I have left a timer running.

Once a week, on Friday, I do a weekly review. I use a custom weekly agenda and some other views which show me just upcoming deadlines, items which have a WAIT keyword or the tag ‘followup’, or stuck projects which have no scheduled tasks within them. I use this to look at the upcoming week and schedule tasks for that week in advance. In addition to the custom agendas I have set up (many with the help of org-super-agenda), I have also started defining a menu of saved queries with org-ql, which enables similar kinds of searches. Some things are easier to define in org-ql than org-super-agenda, and the former also allows you to construct on the fly queries with org-ql-search which can be handy. I find them both useful, and between them I am confident that I have an accurate overview of what I need to do and when, and that I can find specific things at any time, no matter how big my org files get.

I’m really happy that I have dived into org-mode full time. I don’t miss OmniFocus at all (excellent though that app is). I’m getting a lot of value out of having all my notes and tasks in one place so that I can easily find what I did on a particular project days or weeks ago, or give myself a head-start on picking up a task on a different day by leaving all the information I need in one spot. I am continuing to use org-journal, but now I can use org links to point to a specific spot in my notes for more detail about a particular entry. I even wrote a little elisp function to grab all the tasks I have completed today and paste them as a plain text list in the current org-journal entry. I find this helpful to look back on if I need to tell someone else when I completed something.

I think part of my current feeling of comfort about trusting my life to org-mode is that I am getting more proficient (gradually!) with elisp, and also spending more time in Emacs. That makes it seem much more natural to do everything there.