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.

34 thoughts on “A programmers secret weapon: the humble to-do list

  1. 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.

  2. 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.

  3. 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.

  4. 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!

  5. 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.

  6. 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…

  7. 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.

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

  9. “…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.

  10. 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.)

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

  12. 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!

  13. 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.

  14. 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


  15. 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

  16. 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.

  17. 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 …

  18. 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.

Comments are closed.