A programmers secret weapon: the humble to-do list

A while ago I wrote a post how to lose traction on a personal software project, based on mistakes I have made myself in the past that have slowed down or even completely stopped progress. Today I want to share a tip that has greatly improved my time management since I’ve started doing it, and helped combat many “programmer’s block” moments I am notorious for.

Coming back to work

After you take a break from a coding project for a while, getting back into the groove can be difficult. Stopping for a while can be a great way to gain perspective and maybe reevaluate your goals of what the application should and shouldn’t be, but it can also be really hard starting again where you left off.

If you know you will be leaving for a while, and want to return later, you can try leaving a test failing, or some other obvious problem that needs fixing (like a syntax error), but these only keep you going in the short term. It can be difficult choosing the next big piece of functionality to work on.

Keeping an eye on the big picture

Have you ever been in the situation where, working on an application, you surround yourself with a forest of rich infrastructure code — configuration, data access, logging, UI widgets etc — and then stop and realise that’s all your application is: an empty shell that doesn’t do anything useful yet?

Or alternatively, do you ever find yourself getting lost in detail, giving unfair attention to making one little component perfect while neglecting the other 90% needed to be up and running for the alpha release?

All those little extra “clean up” tasks you want to do

While coding I’m always spotting things I want to clean up like refactorings, missing comments, source code formatting, etc. I want to finish my current task before starting something new (and can’t until I check in my current work anyway), but I do want to do these little clean ups at some stage.

All these problems really boil down to one simple question — what should I work on next?

Patrick Star's to-do list

The programmers’ to-do list

I have found from own personal experience that sitting down to cut code without a well-thought-out plan of attack is asking for trouble. As well as the examples above, I generally skip from task to task, dabbling in things I find interesting, but not gaining much real traction towards a useful application.

Over the past few months, I have discovered that keeping a detailed to-do list is a great tool for combating these problems and staying on track. The premise is very simple: take a high-level block of work — e.g. implementing a single user story — and break it down into all the little programming steps you need to do to get there, no matter how insignificant or obvious.

Here’s a dumb example snippet of a to-do list for a web app I am working on in my spare time (the whole thing runs about four pages total). You can see the ‘high level’ tasks get vaguer towards the end, because I haven’t planned them out yet, and right at the bottom there are unimportant cleanup tasks.

A snippet of my to-do list

The key here is to be fine-grained; you want to see all the little tasks that needs to be done, and then tick them off to see your progress. Even if they are always assumed — like validation — it’s like a calendar, only useful if you know all your appointments are in there. And it doesn’t really matter where your high-level tasks start, as long as together they add up to a program that will be useful to a user.

Defer little tasks

If you think of an easy little ‘clean up’ task you’d like to do, don’t do it now — just write it down instead. Why? Because:

  • If you do it now, it could sidetrack you from your current focus
  • It might be a low priority and a poor use of your time right now
  • Instead of doing it now, it could be an easy way to get back into the groove later

For example, if you’ve got half an hour free before going somewhere, and want to spend it on your application, you don’t want to be starting fresh on some giant new piece of work. Why not spend the minutes crossing off one or two of those little clean-up tasks you’ve been meaning to do?

Planning sessions

Alternatively, if you’re not in the mood to code, you could use the time as a planning session and try to think of the next big task you want to achieve, and all the small steps that make it up. This is just as helpful as cutting coding, and makes you think about the big picture.

To-do list software

I’m a geek, so naturally, I want some flash tool for managing my to-do list. There are a lot to-do list applications on the web like Todoist and Remember the Milk. I tried a few, but eventually just went back to a bulleted, indented Word document because I found it by far the quickest to work with.

July 13, 2009

34 Comments

Stu on July 13, 2009 at 11:36 pm.

I’ve found freemind to be really good, any time you can add nodes and close them.

I really only use it when I’m working on several things at once, you can keep track of them and get started again quickly.

It’s especially good if you go to the pub and come in hung over the next day; when someone asks what your working on you can use it to remember quickly and in detail.

Keegan on July 14, 2009 at 12:43 am.

I find remember + org mode in emacs really useful for this type of stuff. Whenever a little task comes up you hit the key combo and record it. It then stores the task in a simple marked up text file (an org file). It’s basically a glorified bulleted + indented text file with loads of functionality built into it.

Gabe on July 14, 2009 at 1:48 am.

I’m a fan of http://code.google.com/p/doneyet.

Chris on July 14, 2009 at 2:19 am.

I’ve written a small app a few years ago to fill this exact need, since I couldn’t find anything that was good and simple enough: http://sourceforge.net/projects/dad/

Mike Dillon on July 14, 2009 at 2:24 am.

I personally like using mindmapping software for maintaining TODO lists, particularly FreeMind: http://freemind.sourceforge.net/

Paulo Eduardo neves on July 14, 2009 at 3:07 am.

I really like TiddlyWiki for my todo list and not takinging in general:
http://www.tiddlywiki.com/

Nick on July 14, 2009 at 3:48 am.

I use WIKI exclusively. I find TiddlyWiki to be a little cumbersome so I use NoteBook Wiki. When I have completed a task, I cut it and paste it into an appropriate archive with a chronologically ordered date. If the task is well written, it can ube used as a format when delegating, also.

Nick on July 14, 2009 at 3:53 am.

http://notebook.wjduquette.com

oops

Matt on July 14, 2009 at 4:37 am.

I find that omnifocus works great for this – http://www.omnigroup.com/applications/omnifocus/

(mac only, sadly.)

Parnell Springmeyer on July 14, 2009 at 5:45 am.

Hobby software project + Trac (or Redmine) + User Stories as a Ticket Type = excellent way to digitize and track ‘to-dos’ as they relate to a project. Not to mention integrated Wiki functionality…

It works much better than note-cards, freemind, or task software IMHO. Only caveat is, setting that pipeline up is a project in an of itself!

Adrian Mowat on July 14, 2009 at 7:32 am.

It’s terribly 20th century I know, but I have never managed to get an electronic method to work as well as a simple piece of paper. I write my tasks and cross them off when done (as you would expect). Once I run out of space I simply write out the ones I haven’t scored off onto a new piece of paper and start again. That way, I have a natural break point every day or two to reconnect with older tasks, review how much work I have outstanding and re-prioritise. Also, sometimes I find I don’t have very much space left after I have written the new task list – at which point I know I have taken on WAY too much (as I have a tendency to do) and it’s time to stop taking more on and/or let some low-priority stuff drop off the list.

Duke on July 14, 2009 at 8:54 am.

You can also combine the todo-list with a time management method by using a Pomodoro client, like this one: http://code.google.com/p/pomodairo/

Tim Mensch on July 14, 2009 at 9:16 am.

I like ToDoList (free from Abstract Spoon: http://www.abstractspoon.com/) for tracking things I need to do, and Tiddlywiki (as above) for general note-taking.

For those who use paper, I have one thing to say: Hyperlinks to bug entries and/or forum messages for follow-up. ToDoList also lets me attach extensive notes to each item, as well as breaking each task into arbitrarily many sub-task-levels…and I can prioritize them…and I can back them up… Well, it works for me. :)

For those who use Trac, I just cringe. I got that workflow set up, and it was close to being useful, but in the end it drove me nuts and I nuked the install. So close, and yet so far…

Thijs Blaauw on July 14, 2009 at 10:04 am.

A todo list should list what you have to do, not what you want to achieve. Not: Only authorized personel can use this functionality.
But: Check that user has role X.
One of those awful self-help/self-management books taught me this. For once they where right.

Joe on July 14, 2009 at 10:07 am.

GTD (http://www.davidco.com/) works for me. I wrote my own little web application that implements GTD tailored to the way I work.

Kyle Maxwell on July 14, 2009 at 12:13 pm.

Try pivotaltracker.com. It’s a free “agile” tool, but it works out to be a nice todo-list catering to software projects.

Victor on July 14, 2009 at 12:14 pm.

I have created a simple to-do list web application. It’s easy to use and you don’t need to register before trying
Check it out
http://www.todolistr.com

Paul Betts on July 14, 2009 at 2:53 pm.

If you want to be a *real* programmer, here’s what I do:

http://www.vim.org/scripts/script.php?script_id=2027

Create a Todo.taskpaper file in an empty directory and run “git init && git add .” Voilà! Versioned, a syntax-highlighted Todo list that is 100% usable from just about anywhere. You could even put it up on Github and keep yourself honest.

Ben Taylor on July 14, 2009 at 9:37 pm.

“…but eventually just went back to a bulleted, indented Word document because I found it by far the quickest to work with.”

You should definitely try OneNote. It is quicker than Word and has a lot more features for managing your list(s). Not free, but those of you with an MSDN subscription already own it.

sashka on July 14, 2009 at 11:32 pm.

Can I suggest http://checkvist.com? It’s a rather simple online outliner and checklist. Creating lists is as easy as if you worked in a desktop editor, with all familiar keyboard shortcuts (Enter, Shift-Enter, etc.)

Danila on July 14, 2009 at 11:56 pm.

MyLifeOrganized or ToDoList.
I believe a Programmer who masters TODOs quickly becomes a project manager (or worse) :) .

vedang on July 15, 2009 at 4:58 am.

org-mode. Nothing better for organizing life :)

Adrian Codrington on July 15, 2009 at 7:00 pm.

After reading this post, I’ve been trying out Todoist.

It’s worth noting that there is a great Launchy plugin available for Todoist, so I can go to or add to my different to-do categories at any time with a couple of shortcut keystrokes.

Love it!

Trang on July 16, 2009 at 1:23 pm.

I love using Stickies from http://www.zhornsoftware.co.uk/stickies
I use it for notes & for to do lists or long term running lists
You can manage your stickies & style them. The app is free =)

Gus on July 21, 2009 at 4:20 am.

I like using Mylyn with eclipse. I don’t use the task context / focus stuff, but the version that comes with Galileo has *every* feature I need for a to-do list – flexible scheduling (stuff that is overdue piles up on ‘today’ until rescheduled), nested tasks, all kinds of stuff. Being confined to eclipse isn’t a problem for me because I barely ever leave it – Java, C, PHP, Perl, all good.

Manohar M Shrestha on August 24, 2010 at 11:51 am.

Great piece of work!!!

Sara on January 28, 2011 at 5:31 pm.

Hi,

I suffer with the same problem. I have so much to do that I don’t know what to actively attack next. So I have my own Kanban board. I use http://kanbantool.com/ . I sort my board into projects and also life tasks. It enables me to keep ontop of what I’m doing…most of the time :P It’s also great to see all the cards in the done column :) I should blog about this

Sara

David on March 9, 2011 at 10:41 pm.

I’m also using kanbantool.com mixed with kind of pomodoro technique. I love to check how many things I’ve done in DONE column at the end of the day.
This mix really works:D

Dan on June 21, 2011 at 9:23 pm.

I’ve found that the personal kanban technique has worked well for me (as other have mentioned). I’m currently using AgileZen (http://agilezen.com), and it’s really helped me stay on task.

Patrick on December 2, 2011 at 2:58 pm.

Workflowy (http://workflowy.com) is a free web-based indented todo list, exactly like what you describe yourself as using. It’s pretty slick since you can zoom in and out of it pretty easily.

Sameer on August 3, 2012 at 11:26 am.

Good Post. I find the eclipse-mylyn plugin useful when coding.

Ed on September 9, 2012 at 1:39 am.

Really, Word, that’s the best that you can come up with … You’ve just confirmed what I’ve been dreading all alone, the whole of NZ are so obsessed with Microsoft like there is no other product to use in corporate or government but Microsoft products, never mind how much innovation and saving you can come up with by encouraging people to think outside the box. In London and all you can think of a tool to use is Word …

Richard on September 9, 2012 at 1:40 pm.

Ed: You missed the point. You don’t need some fancy todo list editor, just anything that can make bullet points (e.g. a text editor). I only suggested Word because it’s so well-known.

myfakeacc on January 7, 2013 at 2:38 am.

I have no need for software, files, websites or whatever… I got a wife ;-)

Leave a Reply