An implementation of GTD using Org-mode
Introduction
I have ADHD, and consequently I have a lot of trouble keeping track of and prioritizing my tasks. I've tried a lot of different organizational systems over the years, to varying degrees of success. Most recently (in November 2024) I read the second edition of Getting Things Done by David Allen and was very impressed.1 The first sentence of the first chapter makes a startlingly big-if-true claim:
It's possible for a person to have an overwhelming number of things to do and still function productively with a clear head and a positive sense of relaxed control.
I am, in fact, a person with an overwhelming number of things to do, and I would love to function productively with a clear head and a positive sense of relaxed control. Okay, you got me, says I to myself; I'll bite.
The basic idea behind the system is to get all of your tasks out of your brain – which is unreliable at best, and when it does remember things, tends to remind you that you need to get your oil changed while you're lying in bed at 2am, completely helpless and totally unable to get your oil changed, and then follow that up by suggesting that you are a bad person because you haven't learned blacksmithing or how to get out of Vim yet – and into a system you trust, which will only show you the tasks you actually need to be doing, given the context you're actually in at the moment.
Figuring out what I actually need to be doing at a given time, as I previously mentioned, is not my strong suit. So, I decided to try to implement GTD in my own life and see if it made a difference.2
But, increasingly, I live out of Emacs, and specifically Org-mode, so I needed an implementation of GTD in Org if I was going to have any hope of keeping up with it.3 (Minimize inboxes, the author of GTD says, and I agree; if most of my life is in Org, that's where my organizational system should live, too.)
I first tried Org-gtd , an existing package that aims to do exactly that. It has a lot of neat features (some of which I haven't gotten close to mimicking yet). But, it has a few crucial flaws. Most seriously, it doesn't actually follow the official GTD workflow, in that it doesn't contain a distinction between things that should be filed as "Someday" and things that should be filed in the "Tickler" (terms to be discussed later, if you're not familiar); all tasks that are not put into "Projects" or "Next Actions" have to be scheduled. This clutters the hell out of your agenda, in addition to being confusing if you're not actually sure when you want to do something. Moreover, the owner of the package has been aware of this problem for some time and does not seem particularly interested in fixing it; I think they are happy with how it works for them. And fair enough. One should not get too caught up on toolsets being just so; one should use whatever, well, gets things done. But precisely because I am new to the tool, I wanted something closer to GTD proper.
I looked next at a bunch of blogs that talked about implementing GTD in Org, and those had a heavy influence on what I ended up with, but none of them quite fit what I wanted by themselves. There were two that I especially spent a lot of time with: first, GitHub - rougier/emacs-gtd: Get Things Done with Emacs had a lot of useful info, but again didn't quite follow GTD as strictly as I wanted (their agenda shows all open TODOs, and they keep recurring meetings, events, etc. in separate files rather than having one Tickler). Second, Implementing GTD in Emacs With Org Mode - Desmond Rivet gave me some things I needed about agenda sorting strategies, but kept all projects, next actions, ticklers, etc. in one file, and required a lot of manual assigning of properties, etc. That was too much – I didn't want to make a system that was going to require so much manual input that I would abandon it. (I have literally hundreds of tasks in my system at any particular time.)
In the end, I came up with my own implementation – albeit leaning on the shoulders of the aforementioned – which I am rather pleased with, which has made a significant difference to my life, and which I think captures GTD fairly faithfully, while relying (almost) solely on built-in features of Org. And while I've never been very good at propagating my own work, that is a fact about myself which I'm actively trying to change. Ergo, I present to you: An Implementation of GTD in Org-Mode.
The System I Wanted to Implement, or, WTF is GTD?
GTD, if you're not familiar with it, consists of five steps which can be summarized very quickly (although the ins and outs may take some explaining later on):
- Every single task that is taking up space in your head should be Captured in an inbox.
- The inbox(es) should be processsed in the following way:
A. Clarify the task: what is it? Literally, what is it? Tasks should ideally be defined in a verb-fronted way: "Buy some milk", "Learn Japanese"
B. Organize the task:
- If the task isn't really a task or isn't actionable, delete it.
- If the task would take less than 2 minutes, do it NOW, while processing the inbox.
- If the task would make more sense for someone else to do, delegate it to that person, but also put it on a Waiting For list where you can keep track of the fact that you're waiting for someone else to do it.
- If the task is a single task (e.g., "Buy some milk") that you plan to do in the next 1-2 months, put it on a Next Actions list.
- If the task is a project (read: anything that takes more than one step to complete but could reasonably be completed in about a year), identify what the subtasks are to the project, and then move that project to a Projects list. The first step of any active project belongs on your Next Actions list, unless it is Waiting For something instead; once that step is complete, you then move the next step of your project to Next Actions, and so on until the entire project is complete.
- If the task is a recurring item, e.g., every Sunday you "Do the laundry", OR if the task is something you have to wait for a specific date to do, e.g., your taxes can't be started until after Jan 31st, then put that task in a Tickler file.
- If the task is something you're not sure about – something you'd like to do but you don't know exactly when ("learn blacksmithing") – put it on a Someday list.
- Reflect on your tasks – that is, process your inbox(es) at least twice a day (in the morning and in the evening), and look over all your lists (except possibly your Someday list) at least once a week. Look at your Someday list at least once a month. Make any adjustments to tasks as needed – moving something off of "Someday" to "Next Actions", adding steps to a project, marking things cancelled, moving things off of your Waiting For list, etc.
- Engage with your tasks: do your Next Actions!
The Implementation, or, How to Get Things Done in Emacs
What follows is a walkthrough of the implementation of the system and my rationale for the way I've done things. This means that some things will be presented out of order from how they should be arranged in your init file. In the next section, I'll give the code for the implementation.
The Capture step
The first step in a GTD system is the Capture step, so I needed a way to capture tasks into an inbox.
The code
To be written…Actually, probably just link to a .el file that you upload to Git.
What about things that don't live in Emacs?
To be written…
Footnotes:
I had read the first edition some years prior and been unimpressed; the earlier edition is aimed squarely at CEO types and is somewhat confusingly written. The second edition remedies these problems.
It did.
I only started using Emacs in July 2024, but it's completely taken over my life, courtesy of this really hot guy with a Lisp.
Comments:
Email questions, comments, and corrections to ej@effusing.org.
Submissions may appear publicly on this website, unless requested otherwise in your email.