A System for Getting Things Done

27 May 2012. comments

Recently I’ve come to realize that I need to be more productive with my projects outside of work. My ‘todo’ queue has grown large enough to where things are falling off of it, sometimes because they lose relevancy, but mostly because I never have time to get to them. I realized I needed a system.

Modern software development practices have drawn upon Lean practices which were pioneered by Toyota. One of these practices is Kanban, a system for deciding what to do and when to do it in a just-in-time system.

There are 2 important things that get a lot of attention with Kanban and I focused on them when thinking about my system for productivity:

  • Visualize your work
  • Limit work in progress

It turns out they are valuable for more than just manufacturing or software development. These ideas are applicable for general productivity as well.

Before I dive into how I’ve applied these concepts (and what I want to do to improve it) let me describe to you the system I have been using up until now. I imagine this is a system familiar to some of you:

  1. Discover thing X that I want to learn.
  2. Add thing X to the back of a ‘to do’ queue.
  3. Never get to thing X. :-(

As mentioned before the Kanban system places emphasis on limiting the amount of work in progress. I wanted something where I constrain my immediate productivity goals to a single item and not even have the others be visible to me, so that I could focus on one thing at a time.

I decided to create a circular-queue with a way to capture priority for each item. The reason I wanted a priority system is because I value some tasks more than others and want to dedicate more time to them. For example, I definitely want to learn Javascript better, but Ruby is more important to me right now.

With a circular queue with multiples of the same item, what happens is that when you walk the queue you are delivered that item more frequently than others. This is how I captured priority, by having the high priority items appear more frequently in my queue. An example of my queue:

  1. Ruby
  2. Objective-C
  3. Ruby
  4. Read book
  5. Ruby

Each task represents a time to apply towards it. So for example the above 5 items might all have a weight of 1 hour each representing 5 hours of productivity total.

So I ended up with this idea of a circular data structure with a priority/frequency system delivering items of fixed lengths and married it to the idea of limiting work in progress. I wanted to write some software to handle this system for me, but to get going quickly with a MVP I went with paper.

I created a stack of 3x5 cards held together by a clip. The only task visibile on top of the stack is the one I’m working on right now. This limits my work in progress and I don’t know what’s coming next. When I complete that 1 hour time slice item I put it on the button of the stack and a new card becomes the top. It’s analog but its helped me obtain a huge improvement in my learning throughput.


Tagged: agile data structures productivity abstraction

2018 Ben Lakey

The words here do not reflect those of my employer.