GTD Tools Shootout

As mentioned in an earlier post, a comment on my emacs plain text workflow versus systems that emphasized collaboration and sharing (ok, really GDocs), and my coinciding annual re-assess sent me down a survey on the important versus the improvable in my GTD flows.


After trying all systems in great detail for a few weeks of real-life testing, often side-by-side or duplicating days, I am still wavering between Notion and sticking with org-mode + org-roam (and a few other emacs improvements I picked up in research.). So, I’ll spend January using org-roam and Notion in a real life shootout to make the determination. Right now, I really seem to like writing in Notion, but managing tasks in org-mode, but I have to choose just one, I think. Roam I had to reject due to exceptionally weak and manual task management despite loving its in-context bi-directional linking (which I’m hoping emacs' org-roam will match). Basically, I wish I could have the baby of all three of the systems since they all have different strengths (and weaknesses).

The Topline

I ended up shortlisting Roam Research and Notion after some research into wanting a single tool, having good note-taking, no-code workflows, being web-based, and having collaboration and sharing as part of their value proposition.

As a secondary concern, I was very interested in implementing a Zettelkasten for knowledge management (particularly as I sneak towards a PhD). I also ended up checking out improvements (many inspired by Notion) for the shortcomings I felt emacs' org-mode had and if there were ways to deke around those issues rather than switch. This also led to me looking at org-roam which is a “rudimentary roam research replica” with bi-directional linking in emacs. I feel it’s sufficient to knock Roam Research off the list though is not quite as good as its inspiration.

In the end, it boiled down to task management vs web-native note taking. I didn’t want to have two different apps and have gotten just too used to how damn useful in-context TODO’s in emacs org-mode are (and would not want to give that up.).

But let’s look at the apps and their charms and warts.

Roam Research

The bidirectional linking and ease of connecting information to other information in Roam and then having it appear in-context is a game-changer. They seem to be betting the whole company on it and knowledge graphs.

I love the fact that you can hit double [ on anything and it instantly becomes a link that will then contextually display all other links to that “page” in your knowledge graph. It appeals to my sense of how interconnected things are in actual life versus most apps which try to get you to categorize in folders or tags. It’s a powerful idea. The place where Roam shines versus other apps that have a backlinks mechanism is how Roam displays those links in-context and with smart excerpts of those blocks. It’s powerful, compelling, and addictive (in fact, I’ve put in a feature request to org-roam to have better excerpt display to try to match the effect and utility.).

Roam focusing on note-taking, and there is task management built-in, but it’s so anemic and manual. Unless you are gong to implement a bullet-journal style workflow in Roam, it’s not something I could trust without moving to a vastly more manual workflow (and I tried to make it work with its more advanced query functionality). Since I try to optimize for automating, and had a few scares where (even with written query filters) things fell through the cracks, I felt it’s not a workable system for me in its presents state.

Task management works via inline TODO and DONE “smart codes” and is checkbox driven. You get an innate creation date for the page it’s attached to and can then put a future date inline to act as a sort of due date or other reminder, but this means you’re constantly rolling things forward and it feels very manual. Also, unlike org-mode’s ability to say have recurring dates occur with a `<2020-01-04 +1y> type code to have things recur annually, Roam has no way to have repeats of any sort which hobbles task management imho. In fact, other than rolling forward dates by hand I could see no way of doing this and the chances of that going wrong at some point with all the things I need to manage were just too high.

A major improvement would be to distinguish the creation date from any dates listed inline in the filtering, and some sort of way to create recurring or future dates without it being a fixed day link (and perhaps a “if unchecked, roll over” feature). As it is, manually handling recurring or future tasks (like, for example, people’s birthdays if I have a lightweight CRM function in there, made it a no-go for me.).

Also, the fact that a graph database probably lies underneath this entire technology means that some things are pretty clunky concepts to write as they become nodes on a graph rather than a form of markup. So, as two examples, trying to get tables and kanban boards (though they render nicely) into the graph ends up being very suboptimal and you waste mental cycles bending to the tool’s representing them as graph nodes rather than just writing something down and having the system interpret that for you.

Embedding is nice, especially for graphics and inline video while you’re note taking. Formulas also render nicely a la TeX.

As it is, Roam seems natively set up to help you get to Zettelkasten, and linking and creating pages was fast and effortless. By far, the nicest of all the workflows. I have to really give it the nod for that. Backlinks and their excerpts in page work exactly as I would expect and gave me the context I wanted on items. I really feel this is where it shines. So, it you just need a note-taking app and are interested in Zettelkasten as a concept to implement (and don’t mind a separate Todo app or are ok with manual task management) you are golden here.

As long as you want to pay the price. Roam’s price doesn’t help any. Paying a premium of $15 USD/month for what feels like a beta feels out of whack despite its equity valuation. Also, despite the coolness, it’s quite slow and even unresponsive at times. Lack of a mobile or desktop client beyond the browser ended up sealing its fate from my perspective.

I really like Roam and want to use it, but feel it needs more polish and still (to me) feels like a beta app before I’d plunk down that kinda cash. As a larger GTD app, it didn’t cut it for me. If I only needed to implement a Zettelkasten, I think I’d head straight for it.


I have to admit I’d pooh-poohed Notion when everyone was jumping on the bandwagon, but it’s turned into a quite nice product and I have to admit it’s compelling in ways I found surprising.

First off, writing ease and aesthetics. After using it a while, it makes a big difference to use and actual productivity, which surprised me. I felt like I ended up futzing around much more in emacs than I’d like to admit, while I could just thump things out in Notion and get work done. As a place to write, organize, and dump thoughts into, Notion was definitely a pleaser.

Also, while I initially rebelled at “tables” being embedded databases (spreadsheets, really) in the “nocode” sense of the term (hey, sometimes you just want a visual table), having now dug into them a little more and used them to give me functionality that Notion lacked out of the box, I have to say I’ve warmed to them. Stuff that would be very difficult to develop in emacs, was an evening’s effort, even if my creation(s) doesn’t have all the working features I’d want. Good enough? Possibly…

The ability to create various elements and views, kanbans, a nice formula editor, relationships (between databases), and rollups means that you can effectively roll your own GTD and CRM systems which is what I ended up doing and deking around the fact Notion itself lacks a robust task management system. In much the same way you end up configuring and honing your own emacs config, this feels a little like that, just the “nocode” equivalent and with an obviously lower learning curve compared to elisp.

That said, my roll-your-own is nowhere near as good as org-mode, but might be sufficient. It’s hard to say right now, but it’s making me feel like I am in danger of dropping things despite crafting a dashboard view that tries to emulate some of the functionality of org-agenda. Also, the degree to which you can do “nocode” operations is limited. It’s not possible without some hoops to trigger anything on a state change besides filters. Targeting of other columns is handled via formulas, limiting its effectiveness, but may be serviceable for daily work. I certainly was pleasantly surprised at what i was able to do in a weekend of crafting. Not very effective for tracking, at least in the automated way I have in org-mode (though technically, I might be able to handle things like state changes with blowing out the number of fields in my “database”.). It’s a very good question whether the tracking I do in org-mode does anything or is merely a safety blanket for me now I’ve moved on from my last role.

The natural pages and subpages construct that are native to Notion make organizing effortless, though I have to admit that I worry about it limiting my connections between topics from a Zettelkasten perspective, I feel I am super organized having everything set up in a PARA style setup already, all from a handy dashboard I rolled and tweaked after seeing what other people had done (and stealing ideas from other templates.).

Also, I absolutely love the toggles functionality in Notion and acts a lot like the folding ability I have in org-mode. It allows you to make an entire page much more compact and hierarchical from an information architecture perspective and hide varying levels of detail. It’s been particularly handy for reading notes on dense topics like Astronomy and Physics (as is the fact you can drag graphics directly and effortlessly into a page as a block items and they render nicely. While you can do also this in org-mode, it takes some setup and isn’t as slick and the results are less aesthetic.).

In contrast to Roam and org-roam, backlinking is terrible and targeting item insertion (mine sometimes became pages versus a database entry, leading to confusion.). My feeling is I cannot implement a Zettelkasten without a lot of patience and time-lag in Notion, so it fails terribly on this point as you want it to flow like your thoughts not have yourself wait for the spinner to return a result. While Notion copied the double [ and start typing feature of Roam, and have Notion (after churning for a couple of seconds) return a list of links you may want to link to or give you the the opportunity to create a new page link which you can then put in a database or page of your choice, it’s slow and clunky. Additionally, while Backlinks and their numbers get listed in the resulting linked page, the actual functionality lacks any context other than the destination of the backlink. So, for something like a Zettelkasten I feel it’s functionally worthless though will try implementing an in database technique I saw. Handy, interesting, but does not provide any underlying value when using an entry. You’d have to drill down specifically which limits the ability to connect ideas. They might be able to fix this with some sort of contextual excerpts or indicators and would love to see an enhancement for this, since it was one of the key reasons I started looking at Roam Research.

Notions aesthetics and ease of use are so well thought out it makes writing and working with it a pleasure. I have to admit that now I am trying to make emacs org-mode more like Notion would close the gap for its other charms makes it clear how nice it actually is. Also, it has to be mentioned, Notion’s mobile app is also a nice experience. There’s no good mobile editor for org-mode docs I could find (I am on iOS, though people mentioned orgzly on Android). BeOrg is fine for managing tasks and agenda items, but being able to take notes on books in native org-mode on a mobile app would be nice. Also, Notion’s in-app integration with Readwise for inserting your highlights into a Notion database is a super nice feature if you’re a big reader (though you could export your Readwise highlights to markdown, comvert them to org-mode via pandoc, automate that and get the same effect - but again, friction.).

As it is, I have to admit finding myself using Notion more than I’d like to admit. It allows me to focus on writing and organizing to communicate which is key in my role. It’s, so far, providing a compelling alternative to my current org-mode setup in that respect. As mentioned, I’ve already stolen some ideas from Notion and have plopped them into org-mode (or am trying to get them to work in org-mode 😬) to emulate the writing and organizing niceties.

As mentioned, I feel I can’t let go of task management to not feel like I may be dropping things in Notion (whereas my org-mode setup never had things falling off the table.). Also, the lack of ability to easily link Zettelkasten type notes (and particularly the speed lag in waiting to link something) makes me feel like I can’t really stick with Notion, but it’s an impressive tool altogether. Depending on your usage, it might be ideal for you and that’s before you get a very comfortable writing and crafting experience. The nocode functionality gives you quite a bit of power with little effort to get interactivity and “spreadsheet app” kind of functionality built (and in more advanced cases, limited relational DB apps.).


The last two years, I’ve been using org-mode in emacs to get things done. Despite the underlying 35 year creaky infrastructure of emacs and its lisp foundations, the majority of my complaints are around making the application more modern in look and feel and crafting a better experience (amd lisp). Org mode itself is a wonder, even if it has a steep learning curve, and the ecosystem of packages to extend and enhance functionality for what is effectively, a text editor and not a web native application, is astounding.

Org-roam is one of these packages. The strong independent streak amongst emacs users made someone who didn’t want to render his knowledge graph to a private company in the cloud realize he could probably do much the same by having emacs build a backlinks database amongst docs. And, well… voila!

Despite the fact it’s not quite yet as good as Roam Research it’s surprisingly slick for such a young package. I have to admit to already really liking it in my testing for linking in people and subjects into my daily workflows, and since it’s basically built to support the idea of Zettelkasten out of the box and leverage the native org-mode, it ticks a major box on one of the additions I wanted to make in my workflow. Basically, it’s made org-mode even more powerful and made it harder to move away from. If I could only deal with some of the nagging aesthetic issues around org-mode (taking some inspiration from Notion, I’m trying to make it work more like a writing interface rather than as a coding IDE.).

Another great thing they did was emulate the Daily Pages functionality in Roam Research. Since I used this mechanism myself anyway for keeping a log before the app ever came along, this made a seamless move for porting my pre-existing workflow and habit.

There’re still rough spots or areas for improvement.

I wish the tag implementation has used org-mode’s native tags, rather than creating its own and I do wish those tags acted like roam research’s web app and were effectively “virtual” pages in their own right with contextual backlinks available. Linking directly to headlines is now supported, but not in the ivy narrowing interface which is what I assume what most people like me use for targeting which page (or, in the future, heading) links to. It’s perhaps unfair to ask this since Roam Research doesn’t do it either.

Also, one of Roam Research’s most powerful features is how it displays backlink excerpts in order to give you context without having to visit pages. While org-roam does have this, it’s inconsistent (and I suspect based on where a carriage returns happens), rather than being smarter about what the context an excerpt needs to be displayed in actually is (for example, if you had a numbered list of 3 items under a link in a page, I would expect the excerpt to display all 3 - the space between the two carriage returns, rather than just return the fact that was a link (the empty line). I’ve actually submitted this as a feature request since I feel it would really add a lot to org-roam (as well, allowing folding of the items in the backlink sidebar as an option - you can code this now - would be great.).

But matched with the power of org-mode, and if you are patient (and geeky) enough to deal with emacs' learning curve, it creates a powerful and complete replacement for Roam Research and a compelling alternative to Notion. For me, I’ve actually started using additional packages like “pretty tables” and “org-kanban” to see if I can get some of the nice features of Notion emulated in org-mode.

Org-mode and org-roam’s biggest problem is that it’s built on a 35-year old text editor that has been extended through an amazing ecosystem but beneath it all is a creaky, pre-internet, lisp-based, text editor pretending to be an operating system. You get some amazing advantages from that, but modern concerns like threading, better display servers, aesthetics, and presentation are not those. Nor is it web native. To share your work, you’re most likely exporting everything to markdown and/or html and pasting into Google Docs (at most companies.). I have spent a lot of time bending org-mode to my will, and now figure if I can do a bit more work on the aesthetics maybe I can make org-mode even better than what I see in Roam and Notion, but then I wonder how much time I am spending on sharpening my axe (instead of even walking towards the tree I need to chop down.).


Basically, I’d say each approach of the apps I looked at has strengths and depending. Unless you have specialized needs, one will be a clear winner. Personally, I am finding it hard to stomach the idea of moving off org-mode and org-roam, since I am still noticing places where things fall through the cracks on Notion, but really loving the writing experience and inherent organization built into Notion. However, Notion does not seem to be ideal for a Zettelkasten concept, much as they’ve tried.

I caught myself yesterday trying to bend emacs' configuration to my will again to stick with its strengths (after telling myself I’d use only Notion for a while). On the other hand, Notion had an outage the other evening which was a sobering reminder I’m dependent on connectivity and the company, rather than myself with a collection of portable, grokkable, self-hosted set of text files as with emacs.

In general, since December ended up being much busier than I envisioned, I think I am going to extend the shootout to end of January with the goal of either:

  1. Being able to trust Notion on more advanced task management and CRM, or
  2. Crafting emacs into a more aesthetic and organized experience to emulate Notion

I feel I can close the book for the moment on Roam Research until they annoumce some major feature improvements (though I will keep an eye on it) as org-roam in emacs does a sufficient job of giving me the Zettelkasten capabilities I need to move forward.

In essence, it comes down to aesthetics vs clunkiness and code vs no-code. Let’s see what the new year brings in terms of using it in situ.

If you are not technically savvy, I think the answer is clear: Go with Notion. I heard someone joke it’s the “nocode” equivalent of emacs, but they are not far off with its database functionality and craft-your-own systems. For me, I think I need to take another crack at seeing if I can fill the shortcomings in emacs before tucking tail and moving to Notion. Emacs is just too useful as an “everything app.” That will be my January side project while trying to figure out a way to keep both apps in sync.

Let me know what you think about the post @awws or I’ll report back on how it fares after January. I’d love to hear feedback about what else or similar apps or approaches may have worked for you (for example, after checking out Obsidian, I just decided to stick with emacs). Even better, (reasoned) opinions on why I might be wrong and what might make be better.