This post is part of a periodic series about The Tools I Use.

There are many tools and systems for keeping track of things to do. I think most software developers have built themselves such a tool at some point in their career.

Years ago, I started looking for a better way to manage everything I needed to do and all of the ideas that kept popping into my head. I read David Allen’s Getting Things Done (GTD) and the idea of getting things out of my head and into a “trusted system” made sense to me, so I decided to try it.

I knew almost immediately that a paper-based system wasn’t going to work for me, so I started looking for a computer-based tool. I looked at quite a few and ultimately settled on Remember the Milk (RtM).

RtM is an online service with mobile apps for all of the major mobile platforms and several third-party integrations. A basic account is free and there is a pro plan for $25/year. The free plan only allows one mobile sync per day, whereas the pro plan keeps everything synced regularly, so I upgraded very soon after I started using the tool.

Everyone uses todo list tools differently, but I’ll describe my workflow in case it helps you get started. The RtM blog also runs a weekly feature called “Tips & Tricks Tuesday” where they publish a reader-submitted idea for getting the most out of the product.

I keep RtM open in a pinned tab in Google Chrome so it is always available to me. I also have the iOS app installed on both my iPod Touch and my iPad. On Chrome, I use an extension called A Bit Better RTM that adds some layout options and convenience features. There’s also a version for Firefox.

In my system, I currently care about tasks in four main categories: personal/home, banking, work, and personal growth. Every task I create gets a tag representing its category. I’ll add other tags if it makes sense.

Simple one-off tasks go in a list called @Tasks. For groups of related tasks (a “Project” in GTD terms), I create a separate list named for the project and put all of the tasks into that list. I also have a @Projects list where I list each project and tag it with the proper category tag. There is a bit of duplication here that is mildly annoying, but so far worth it. If I am actively working on a project, I mark it as priority 2; if I’m not actively working on it, I leave it unprioritized. This way, I can glance at my @Projects list and see which projects are in play at any time.

I have a few lists that are more like idea buckets. They correspond most closely with the “maybe/someday” list in GTD. I have a list of books I’d like to read and a couple of lists to collect ideas for some conference talks I’d like to give some day, among others.

Every task in @Tasks is either marked priority 1 (needs to be done as soon as I can get to it) or given a due date. In a Project list, only the “next action” task is marked as priority 1. Every other task is left unprioritized. I might use priority 2 or 3 to remind myself of what I think comes next, but I allow that to be pretty fluid. When a priority 1 task can’t be completed because I’m waiting for something or someone, I tag it with #waiting and drop it to priority 3.

When I complete a project-related task, I look at the remaining tasks for that project and choose what the next action should be. I then bump that task up to priority 1 so that I know what’s next for that project. If the project is now complete, I mark it as such in my @Projects list and mark the list itself as hidden. If the project isn’t complete, but I want to leave it on the back burner for a while, I don’t select a new next action. I also mark the project as unprioritized in the @Projects list.

RtM has a feature called Smart Lists, which are basically saved searches for tasks. The search options in RtM are really flexible and turning a saved search into a list is a killer feature.

Given the prioritization/organization scheme I use, I have created a !Next Actions: <category> smart list for each of the four categories I care about. I use the following search for these:

Next Actions Search
(dueBefore: tomorrow or priority:1 or tag:waiting) and
status:incomplete and tag:<category>

That way, any task in that category that is either a next action or is due today (or overdue) shows up in that list. I look at my Next Action lists every morning to make sure I know what I need to work on. I also include the #waiting tasks so that I’m reminded to follow up on them when it makes sense.

I have a !Next Actions: Untagged list that catches me if I forget to add one of my category tags to a task. This list should always be empty if I’m doing things right.

I have a Done This Week list that gives me a quick overview of everything I’ve accomplished during the past week. This is handy during my GTD “weekly review” and for writing up weekly reports for work. It also helps to remind me that I really am making progress and getting things done. This is important when you have a seemingly never-ending list of things to do.

RtM has a number of other features that I don’t use but that you might find useful. For example, you can define locations and assign tasks to them so that you can look at a list of tasks to do when you’re in a certain place. There is also a way to delegate tasks to another RtM user.

My one complaint about RtM is that the web app doesn’t have the really nice “This Week” view that the iOS apps have. There is an Overview view, but that isn’t nearly as useful as the iOS view because you have to click around too much and it only shows today’s and tomorrow’s tasks. I generally start my day by looking at the iOS app so I get this week-at-a-glance overview in the morning, but if I was only using the web app I’d miss that a lot.

Overall, I’ve found Remember the Milk to be a really handy tool for the way I work. I’ve been using it for more than three years now and am a happy customer.