Raw Thought

by Aaron Swartz

How to Build Decent Productivity Software

These days it seems like everyone is making productivity software — software that helps you manage all the the things you need to get done. Yet all of them seem to be missing some basic pieces. A productivity application has two jobs: remembering everything you need to do and getting you to do it. The second is necessary because without it, you’ll put all your tasks in the application and then never do them. The first is necessary because otherwise the application will have no idea what to tell you to do.

I think the ideal piece of productivity software would be like having a great assistant or a campaign manager: someone who intimately knows all aspects of your life’s todo lists and schedules and wasn’t afraid of saying you had to wrap this meeting up because you promised the kids you’d be home at 5 to take them to the game. Judged against this standard, present productivity software is woefully lacking — it’s usually not much more than a glorified todo list.

Remembering everything: Most software lets you store the classical todo list items: call Jon back, finish report, buy toy for kids.1 Some systems even branch out into vaguer life goal stuff: spend time with family, become accomplished novelist, learn more about history. But that’s about it.

But most people also have tasks in their project management software (fix this bug), various calendar-style events (lunch with Jon, catch plane), and a vast quantity of email (answer Jon’s question, fix the frobnitz and report back to Bob, etc.) Yet no one seems to have dared to integrate their software with a calendar, email client, or even bug tracking software.

Since it’s unlikely anyone writing productivity software is also going to write an email client, a calendar, and a bug tracker (although it would be nice), I’ll settle for having support for plugins that import tasks and events from these various other apps. It has to be very simple to upload your whole life to your todo app.

Getting you to do stuff: The best I’ve seen is some kind of filtering in which the software lets you only look at tasks that can be done in 5 minutes while on a train. But if you’re the kind of person who’s dysfunctional enough to need productivity software, simply having a big list of tasks probably isn’t going to help you much. (I can write a big list of tasks in Notepad.) Instead, the software should be proactive about getting you to do stuff, like telling you to quit goofing off and get ready for that big deadline you have tomorrow or to hurry up and answer that urgent email from yesterday.

How does it do this? First, it needs to know what’s important. After you import your life it should let you walk through and triage it all: look at each one and decide how important it is (or whether it’s already done). I’ve written a program to do this just for my mail and it’s been invaluable — within a couple hours a morass of three thousand messages turned into a neatly labeled set of piles ordered by importance. Similarly, it can turn a tall pile of assorted todos into the beginnings of an action plan.

Then comes the crucial part: it tells you what to do. I’m not demanding anything fancy, like a robot dog that follows you around and barks orders (although that might be nice). I’m just saying provide a little pop-up window with a suggested next task. Psychologically, it’s easy to ignore a long todo list. In fact, long todo lists are depressing and make you want to look away. But a simple suggestion about one particular thing to do next is much harder to dismiss.

Of course, the suggestions have to be good. The software would generate them by taking into account everything it knows about your tasks and calendar today. And if you still don’t like the suggestion, you tell the program you can’t do it because…:

and so on. Ideally, the system would be well-informed and smart enough that you could trust its predictions. But even if it wasn’t perfect, just suggesting tasks in order of priority would likely be a vast improvement over the whimsical system used by most people in need of productivity software. It’s hard to imagine such a tool wouldn’t be a godsend.

Aaron Swartz has too large of a todo list to write this program by himself, but if you’re interested in working on it he’d love to help. Email him at me@aaronsw.com

(Postscript: Dearest readers, telling me that your favorite glorified todo list has an API that allows me write all the importers I want as well as write the task suggestion system I described is not an answer. My point is that todo lists should have these features; not that they should allow me to write them.)

  1. Most of the classical productivity guides are aimed at middle managers whose lives, as far as we can tell from the examples, consist of calling people, finishing reports, and placating their families. Who am I to break with tradition? 

You should follow me on twitter here.

October 29, 2007


http://orgmode.org/ seems to solve lots of these problems; I’ve just started using it, and it’s a great organizer with some easy customizations. Also, the developer(s?) are quite responsive to bug reports and suggestions.

It’s an emacs mode, which 1) may rule it out for many users, and 2) means it won’t do obtrusive popus. But other than that, it seems like 90% of what you’re looking for.

posted by on October 29, 2007 #

I’ve been using Remember the Milk for about a year now, and it seems to provide most of what you describe (and what I consider essential in a todo app).

You can email tasks in, which is a great low barrier interface to the system. I set filters to forward email I get, when appropriate, to my todo list. When a new bug gets assigned to me in Launchpad, for example, it gets forwarded to my todo, with the correct tags (depending on the project the bug is in). Of course, this setup relies on me maintaining it.

I tag all my tasks by context (tasks for which I need to be connected to the net, tasks for which I need to be at home, shopping I need to do when I’m on the high street), priority and time estimate, so it’s always easy to find out what I should work on next.

RtM can talk to me via Jabber, so I don’t even need to use the web interface just to find out that it’s time for that next task.

RtM has a pretty good API, so it’s easy to write ‘plugins’, but I haven’t seen anything yet that connects other sources of data (I rely on the email interface alone, but it requires me to be an email hacker, which I understand not everyone can be).

RtM has a great user interface, it’s a pleasure to use, and since they’ve added Google Gears support I even have my tasks offline.

But RtM doesn’t seem to have truly taken off - it looks like it was designed to fit perfectly with one of the major online app providers, but so far it doesn’t look like it generated much interest. I think I know why - an efficient todo app isn’t a something that’s ever going to be popular, because most people don’t actually want to be productive.

If you take a look at what applications are generating most interest and money these days, it is stuff that helps people be less productive and suppress the necessary bad feelings that come with boredom and impotence, not something that reminds them that they should get back to work.

posted by Tom Berger on October 29, 2007 #

I just broke out of my feed reader to tell you about rememberthemilk.com too. It has priorities, time estimates, physical contexts and due dates as you outline above. It doesn’t have dependencies. I deal with them by setting a future due date which causes them to disappear from my action smart list.

You can use the excellent search to find tasks matching whatever criteria you need. And you can save any search as smart list which is then viewable just like any of your other lists.

I fire tasks to it with a little ruby script I wrote from the terminal.

It isn’t perhaps what you are dreaming of although it isn’t far off either. Perhaps some program sitting above the API could use the search capability to do the “next task is … ?” prompting?

posted by Thomas David Baker on October 29, 2007 #

“Since it’s unlikely anyone writing productivity software is also going to write an email client, a calendar, and a bug tracker (although it would be nice)”

OSAF is doing all of that, and I’m sure they could use your help.

posted by Scott Reynen on October 29, 2007 #

I’ve been working on a webapp ‘Smacklet’. It is not done yet; I’ll send you an email as soon as it is. I’ve been using a crude version of it and I can say that I get more things done now.

posted by Kirubakaran on October 29, 2007 #

Thanks Aaron! Great ideas on the Assistant Pop-up letting you know when you should be doing something else (it thinks you should be doing). We’re adding that to our web app http://www.streamfocus.com .

posted by Fred Gibson on October 29, 2007 #

I really like your “not now and here’s why” approach, even if the end result is that you realize that you no longer have any excuse to not be doing a particular task.

I would maybe add a “I don’t have the energy” excuse, if only for tracking and learning when you’re likely to finally complete that cringe-worthy task you’ve been avoiding.

One thing that would be handy for me is an “urgency curve,” or at least a selection of “urgency profiles” like “deadline”, “appointment” or “steadily increasing risk of attracting flies.”

posted by Frank on October 29, 2007 #

I’m just starting out developing a new todo application (translation: I’ve got a domain name and some basic ideas). I like the idea of a low cost of entry coupled with adding data over time; that model is something I’ve been playing with for this and another separate project in the last few weeks.

posted by Paul on October 30, 2007 #

I second that, OSAF is working on just what you’ve described, it looks pretty promising.

posted by Callum on October 30, 2007 #

“After you import your life it should let you walk through and triage it all: look at each one and decide how important it is (or whether it’s already done).” I’d never get to that.

posted by Owen Byrne on October 30, 2007 #

Heh, I’ve probably been working on this for about a decade now, but am too lousy at getting things done to have much to show…

Latest version I’m playing with is using a quick & dirty desktop app to post stuff off to my online Personal Knowledge Base. I’ve got the posting-off side done, not got onto task editing etc. yet. The first priority was to be able to log & view what I’ve done, and that bit I have got going: http://danja.talis.com/timegrid/ http://dannyayers.com/2007/10/04/a-little-dogfood

A critical point (IMHO) is not to hardwire any particular user interface to the data store, so you can hook up existing tools (like OSAF, as mentioned above) to a common store. Which means using a flexible data model alongside well-defined protocols - the obvious choice being Semantic Web tech. The basic modelling can easily be covered by RDF/OWL, the prioritisation etc being added as a fairly lightweight numberic layer on top.

Over the years I’ve played with mapping between quite a few related tools and the common model*, although this time around the only one I’ve so far hooked up has been a todo.txt parser. (Guess I should do a todo.txt renderer soon…).

  • I’m hoping to get a long-overdue revision of the ‘prj’ project vocab done this week

posted by Danny on October 30, 2007 #

Sorry, typo: s/numberic/numeric

(although the former does sound quite appealing)

Also the last line is meant to be a footnote with a ‘*’, not a bullet point.

posted by Danny on October 30, 2007 #

Check out gootodo.com for an interesting take on the todo list. I got turned onto it after reading Bit Literacy by Mark Hurst and I’m a believer.

posted by Rahul Pathak on October 30, 2007 #


your post is very interesting. I have been working for the last month on researching and implementing a manufacturing scheduling algorithm for a small furniture workshop. I was totally ignorant of the field a few months ago but it was a very interesting experience. Anyway: I read your entry with this bias and the system you sketch here seems very close to problems that I have been working on recently with this project.

I discovered that one of the key aspect is that it is not so much a data architecture problem, nor it is an interface design challenge: as you noted it should integrate into already built data and interface systems, plus the data to record is quite straightforward (dates, text, dates…) so the difficult and interesting bit to figure out is the recommendation or prioritization algorithm. To produce a sufficiently well done algorithm that’ll prompt you with a relevant list of five things to consider doing just now and can minimally learn how to do so as you use it.

And more than that there is some times where the system should not prompt me anything to do and be elegantly silent: there are activities that I do with pleasure and without any exterior incentive, reading books, drawing, cooking, doing nothing…

This seems essential in order for me to be able to rely on such a system. If it was constantly and bluntly pushing his five relevant things to me I would stop doing what he says. And there are some times where it would be encouraging to have quasi empty list that says for example: “do just one thing and you are done for now…”

The rules that you started to lay down on the end of your post seems very pragmatic and right to start in this direction. Today it seems to me that a library of code that implement such prioritization and task recommendation processes would be the best contribution to the field. In the domain of manufacturing scheduling among several other interesting examples: http://www.frepple.com/

posted by Pierre schmidt on October 30, 2007 #

You can also send comments by email.

Email (only used for direct replies)
Comments may be edited for length and content.

Powered by theinfo.org.