I’ve just noticed that one of my practices has changed subtly, probably sometime during the last six months or so:

I’ve always (ie. at least for the last twenty-five years) kept a to-do list during each programming episode. The list begins with one entry, describing the goal I’m working towards. And as I read and write code, new entries are added to make sure I go back and fix or refactor everything I see along the way. Until recently, those additional entries tended to describe an outcome – “split class Foo to create Bar and Xyzzy”, or “wrap x and y into a Mouse class”, for example. But recently I’ve noticed myself tending to write entries that describe the problem – “class Foo too large”, “x,y travel around together”.

I have no idea how, why or when this change happened, but I’m pleased it did. Between the time I write a particular to-do item and the time I finally get around to executing it, I may significantly change the code in that area. Or I may learn something about the code and where it wants to go next. Or the problem may disappear, as a side-effect of some other change. Either way, the solution I might have on my to-do list has a chance of being inappropriate now that the code and I have moved on. So by listing the problem as I originally saw it, I’m giving myself a much better chance of creating the right solution for it – because I’m deciding on that solution in the presence of the full facts.

I’ve recently been re-doing a few kata that I first tried a couple of years ago. I’ve noticed that my results are dramatically better now, mostly I think due to delaying the moment at which I decide how to solve each micro-problem. This effect is an example of Mary Poppendieck’s “decide as late as possible” maxim. There are clear benefits in terms of the quality of my designs; and there are psychological benefits too, because I don’t have to spend time trying to remember why I wanted to do each item on the list. Everyone wins.


  1. Firstly Kevin, thank you for your blog, I enjoy your writings a great deal.

    I have noticed a similar trend towards a to-do list of problems rather than tasks. My realization has come at a time in my career when I have just recently gone over the waterfall into the agile pool :)

    It does seem to be very “agile”; a focus on what needs to be achieved rather than how we feel it should get done.

    Kindness and please keep posting,

    Dan

  2. Thanks for the kind words Dan – and good luck swimming in new waters!

  3. Torbjörn Kalin

    Great idea! And very agile! I will try to implement it right away. I think I will change the name of my to-do list into to-solve, just as a reminder.

  4. I totally agree with this approach, I use a similar technique:

    http://yandleblog.com/2006/11/flie-based-bug-management.html




Leave a Comment