Skip to main content

Migrating to Todoist

·1272 words
Table of Contents

I love todo lists
#

I’ve been using a todo list to keep organized for 2 decades now. I started with a physical notebook and pen. In 2012, I transitioned to digital as an experiment. I was worried it would feel too tedious trying to type everything on my phone, but it shocked me how natural it felt. I loved being able to carry my todo list in my pocket. I loved not needing to move items to a different day by physically rewriting them. It made managing my todo list easy.

Since then, I’ve become something of a productivity addict. I’ve used many different todo list apps daily.1 I’ve sampled many others that didn’t quite do it for me.2 I even made a few attempts at writing my own. I find myself going back through them every few months to check for feature updates.

I was really excited when I came upon Remember the Milk. Most todo-list apps are quite similar in broad strokes: you have multiple lists, due dates, customizable filters and tags. So the differentiating features are in the details: Is it intuitive? Is it fast? (You’d be surprised how many feel slugging and laggy). Does it have a nice look and feel? Does it have good support across all platforms? How powerful are the filters? How easy is it to enter and modify a task on mobile? How useful are the keyboard shortcuts on desktop? RTM hit a sweet spot for me on most of these. But probably the biggest selling feature that distinguished it from other todo apps was the fact that it differentiated between start date and due date. After all, the due date of something rarely changes, and I really need to know when the hard deadline is. But that’s different from when I’m planning on doing it. I need to be able to plan my schedule ahead of time to make sure I have time for everything. Omnifocus has this feature, and is otherwise quite good, but unfortunately only supports the Apple ecosystem. Otherwise, surprisingly few todo apps make this distinction.

RTM vs Todoist, and why I switched
#

I used Remember the Milk from 2020 until now. I still really like it, but when you use something for so long, minor annoyances can turn into huge pain points. Over the years I’ve shifted the filters I’m using and simplified how I think about task management. I liked the “start date” feature of RTM, but it didn’t interact well with “defer” mechanism , especially for repeating tasks. It just changed due date, not start date, which really defeats the purpose. I can’t view tasks on my watch. The UI is ugly as hell - honestly that was a big pain point of RTM. Their website claims they have “beautiful themes” but this must just be an iOS thing because on Android the only options are light and dark. Finally, most settings can only be changed on the webapp and not on mobile.

At the same time, I’ve been using Todoist for work since 2023, primarily to keep my work and personal lists separate. The ergonomics of Todoist really caught my attention when compared to RTM. I really like the keyboard shortcuts (not really a thing in RTM). I also like the fact that I can view and add tasks on my Android watch (RTM only supports Apple Watch). And Todoist just looks nicer. I finally bit the bullet this year and decided I wanted to migrate fully to Todoist for my personal life as well. I had a good run with RTM; maybe I’ll come back to it in the future if some of the pain points are addressed.

Todoist still isn’t perfect, and I have some minor gripes. I love the “Today” and “Upcoming” views, but without a project filter, they’re pretty difficult for me to use as I don’t tend work on both personal and work items at the same time. I’d love it if I could have separate views for specific projects. For now, I’m working around this using filters and list grouping. However, this makes the navigation experience kind of annoying. On mobile, unlike views, you can’t put a filter directly on the navigation bar. So I have to navigate to my views with 2 taps instead of the 1 it takes to just get to “Today”. And on desktop, there is no keyboard shortcut for going to a specific filter.

For the record, here’s my current setup with Todoist:

Projects:

  • Career
  • Work
  • Personal
  • Business Trip Pack List
  • Costco

Filters:

  • Today: Work
  • Today: Personal

And both Work and Personal lists are grouped by due date for review/planning purposes.

Feature Request: Runbook
#

There is something I’m shocked to say I haven’t seen in any todo list app I’ve tried to date. From time to time I need to add a set list of tasks to my todo list. For example, when I need to go on a business trip, I want to add things like packing, booking hotels and transportation, and checking into the airline to my todo list. I can’t use repeating tasks because they don’t occur at predictable dates. I just want a button that says “add all these tasks to my todo list”, like a Playlist or a Runbook. My current workaround is having a dedicated list for these tasks, setting the due dates, completing them as normal, and then uncompleting them when I’m done (to reset for next time). But this is really tedious, and doesn’t work with my existing filters since they’re in a list of their own. If you know of a todo list app with this feature, please let me know!

Update: I just realized Todoist kind of has this feature. It’s called Templates. You can create a new pre-populated list from a template, with some limitations. There’s no way to add all the tasks from a template to an existing list, it has to be added as a new list. And you can’t edit a template once it’s created, you have to delete and recreate it. It’s not exactly how I wanted it, but it’s workable for now.

Migration hacking
#

Obviously I wasn’t about to manually move all my tasks from RTM to Todoist. They both support import and export, thankfully. Unfortunately, RTM exports to JSON, and Todoist imports from CSV!

I wrote a quick and dirty script to convert from one format to the other. It’s not perfect, it misses a lot of details like repeats and notes. For me, I had few enough of these that I was fine just manually copying them over afterward, as long as the bulk of the work was automated. Also, I was under a bit of time pressure as I was doing this on a 30-minute bus ride.

For future reference, here it is:

jq -r '.tasks |
  # 45687273 is my list_id; obviously you need to figure this out from the RTM export
  map(select(.date_completed == null and .list_id == "45687273")) |
  map([
    # type
    "task",
    # task name
    .name,
    # description
    "",
    # priority as an integer 1-4
    (.priority | sub("P"; "") | sub("N"; "4") | tonumber),
    # some fields I dont care about
    "", "", "",
    # due date as ISO 8601
    (if .date_due == null then "" else .date_due | ./1000 | strftime("%Y-%m-%d") end),
    # language code
    "en",
    # more fields I dont care about
    "", "", ""
  ] |
  @csv)[]' $RTM_EXPORT_FILENAME

Reference for Todoist CSV import format


  1. Tasks (formerly Astrid Tasks), Google Tasks, Omnifocus, Remember the Milk, Todoist… ↩︎

  2. Wunderlist, SplenDO, Any.do, Condution, TickTick, Notion, probably others I’m not remembering… ↩︎