While I was on my Internet Vacation, I spent some of the time I would normally burn on social networking sites looking for a To Do list system that would actually work for me. Over the years, I’ve tried many, but most are too complex, or too cumbersome when it comes to paperless devices. After reading LifeHacker’s “How I Work” post on Gina Tripani, I believe I have discovered a system that works for me. At least, it has worked very well for the 10 or so days that I have been using it. I made some modifications to allow for some automation in the system. In order to give you the full picture of how my system works, let me first explain what I was doing before this system. Then I’ll list my requirements for a new system. After that I’ll describe the new system, and how I’ve customized it to allow for some automation that saves me time. For the automation piece, I had to write some code. As I write code for a living at my day job, this wasn’t a big deal for me. Your mileage may vary.
My previous To Do list system
Actually, I wrote about it in general terms in my post on Paperless List Management Using Evernote, but I’ll try to be more succinct and explicit here.
- Each To Do item on my list consisted of one note in Evernote.
- Each To Do note was tagged with the term “inbox” so that I could easily find it regardless of what notebook it went into.
- I used a Saved Search to look for all Notes tagged as “Inbox”
- When I completed a task, I removed the Inbox tag and replaced it with a Completed tag.
- If additional information about the task was required, I kept it in the note with the task.
- My wife could add items to my To Do list by sending a message to my Evernote email address with “#inbox” included in the subject line.
This worked okay for me for quite a while, but over time, I noticed problems:
- It could be cumbersome to add a note via iPhone or iPad. I wanted a method that would be at least as fast as using pen and paper.
- Glancing at my To Do list required pulling up the Saved Search. Easy on the desktop applications, but a bit more difficult on the iPhone and iPad.
- Completing a task required too many steps. I wanted something faster.
On the flip side:
- I liked having this information captured in Evernote
- I liked the ability to add things to my To Do list via email.
- I liked the discrete notes because it left room for future automation.
My requirements for a To Do list system
Given my past experiences, I had some pretty specific requirements that had to be met by any new system. They included:
- System had to be paperless.
- System had to be simple to use. My criteria for “simple to use”: I should be able to add/remove to-do items to/from my list at least as quickly as I could if I was using pen and paper.
- System had to be flexible and support many to-do methodologies (e.g. GTD, etc.)
- Lists had to be in a format that would allow me to interact with them from outside the core system–preferably plain text files
- System had to be able to sync across all my computers and devices without effort on my part
- System had to allow adding To Do items via email
- System had to be able to integrate with Evernote
The core of my new system
After reading that Lifehacker post I mentioned above, I learned of Gina Tripani’s project, Todo.txt, a simple, but powerful text-based to-do list manager. You can read all of the details on the tool,but the system is so simple, it doesn’t require a lot of reading. The system centers around 2 text files, todo.txt and done.txt. There are command-line clients for Windows, MacOS and other platforms. All these clients do is allow you easier interaction and manipulation of the 2 text files. There are also some formatting rules you can follow to get more out of the system. (For instance, beginning any line with an (A) or (B), etc. assigns a priority to a task. You can include the date you added the task and the date it was completed (the command line tools can do this automatically). You can use +Project to indicate a project name and @context to indicate a context name. There are colorization files that allow the To Do list to be highlighted in color in your command line screen. Here is what my To Do list look like on my Windows machine at work:
You can see how the highlighting and sorting works. You can also see that I’ve aliased some of the command line tools. To see my To Do list, all I have to do is type “t” at the command line. To add an item, all I did was type:
t add "(B) Create process maps for apps SDLC"
and hit enter. I can do this faster than I can scratch this out on paper. With the command line tools I can do things like filter by project or context. I can search for words. I can change the priority, etc. When I am read to complete one or more tasks, all I have to do is type:
t do 4, 6
This marks tasks 4 and 6 as done. It puts an X at the front of those lines, adds the date that I complete the task, removes the lines from my todo.txt file and moves them to my done.txt file. That way I have a running record of all of the tasks I’ve done.
The command line interface looks identical on my Mac at home. But how do the two stay in sync?
Remember, the “lists” are nothing but text files. So I keep both text files, todo.txt and done.txt in a folder in Dropbox. My Windows and Mac command line tools are configured to point to the local Dropbox folders on the respective computers to see the lists. Dropbox manages the syncing of files. I don’t have to think about it. If I update something at work, my list are instantly updated on Dropbox, which means they are updated at home as well.
And the todo.txt system provides mobile clients. I have a very simple app for my iPhone and iPad, both of which point directly to the files on Dropbox. Here is what the iPhone app looks like for my current To Do list:
The iPad version looks similar. Completing a task is as simple as swiping the task and touching the “Complete” button. Since the underlying files reside on Dropbox, everything syncs up. Adding tasks are very easy, too, and there are quick buttons for setting priority, context, and project.
So far, this is the simplest system I’ve found. If you run through my first five requirements, it meets them all to my satisfaction.
The power of automation
The last two requirements center around automation and making it easier for me to manage my lists. Once again, because this system centers around 2 plain text files stored in Dropbox, automation becomes a piece of cake. In fact, requirement #6–adding To Do items by email–required no coding at all. Here is how I did it:
- Set up a new email address in my domain specifically for To-Do items.
- Automatically forwarded this email address to my Gmail account.
- Set up a filter in Gmail that labels any email that is sent to the address created in step 1 with the “To Do” label
- Used IFTTT to create a recipe that takes any new Gmail messages labeled “To Do” and appends the subject line of the message to a file in Dropbox–namely the todo.txt file.
So now, if I sent an email to my To Do email address, within a few seconds, it shows up on my To Do list. Of course, I need to format the subject line the same way I would in the command line tool. In the sample I used above, the subject line of the email would look as follows:
Subject: (B) Create process maps for apps SDLC
No message body is required, and indeed, the message body is ignored. But the item gets on my To Do list. This provides a convenient way of allowing my wife to add things to my list.
All that leaves is requirement #7: system has to be able to integrate with Evernote. I did this integration in a couple of places, but most of it did require some coding and the use of at least one additional service. The benefit is that I’ve automated several things and saved a ton of time in the long run. Here is what has been automated:
- Any note in Evernote that contains an unchecked checkbox and has the text “@todo” in the same line of the checkbox is automatically added to my to-do list.
- Any item in my to-do list that contains “@en” in the text is added to Evernote as it’s own note.
- Once each day, any items in my done.txt file that were completed that day are compiled together in a single summary note in Evernote with a Note title: “n Items completed on mm/dd/yyyy”
To create to-do items out of unchecked items in Evernote marked @todo, I made use of GeekNote, a command-line client for Evernote which was a runner-up in the Dev Cup finalists this year. I wrote a perl script that uses GeekNote commands to find any notes created TODAY that have unchecked boxes. I then parse the text of the note looking for lines that contain “@todo.” These lines are then appended to the todo.txt file, which syncs up to Dropbox. This script currently runs once a day at around 6pm, after work, because I generally only use those checkboxes in my work meeting notes and phone calls.
I also use GeekNote and a perl script to read through my todo.txt file and identify any To Do items marked “@en”. For each one it finds on a given day, it creates a new note in Evernote using the To Do item as the title for the note. This also runs just once a day. I use this for to-do items that I think I need to capture information about beyond the basic action in the future. It’s nice to have a single note for the To Do item in these cases, and this provides an automated way of creating them.
Finally, once each night, I have a perl script that finds all items completed in my done.txt file for the day and uses GeekNote to create a single note listing all of the items I completed. This note is given a title of something like “5 items complete on 08/22/2012.” It provides a kind of automated diary function so that I can easily see inside Evernote the items I completed on any given day.
This system has worked incredibly well for me in the 10 days or so that I’ve been using it. I spent a lot less time futzing with apps and complicated list managers and more time actually do the things on my list. The automation has been a huge win for me as well, and the simplicity of the system behind the scenes makes it easy to manage and integrate with other systems, like Evernote.