Skip to main content

Organize Your Execution

You should have a clear idea of what you should be working on next, what the eventual goal is, and how to get there. Doing this has a number of benefits.

People often procrastinate because they don’t quite know what they have to do next. If it’s written right in front of you, a major reason to procrastinate is gone. This does wonders for generating and sustaining developer momentum.

Organizing your execution forces you to plan ahead and consider what’s involved in accomplishing a task, which can help discover and work out uncertainties and assumptions earlier, and we should always strive to reduce uncertainty proactively.

I find that a natural format for the task of organizing one’s work is what I call an “implementation tree”. Start out with a high level goal, like

* get a Task rendered on the screen

Then the algorithm is:

match timeToDoFirstTaskOnList with
| case < 15 minutes            -> doFirstTaskOnList
| case Unknown or > 15 minutes -> breakFirstTaskDown

In this case, our first (and only) task is rather high level, so we don’t know how long it’ll take. Let’s break it down

* get a Task rendered on the screen
    * get stub up on the screen
        * add RouteTask stub
        * add stub interface definition for Task
        * add stub JSON data for task
        * dump JSON data on the screen
    * actually render visuals for task
    * wire up to backend

Now we have a handful of < 15 minutes tasks, as well as some Unknown or > 15 minutes ones closer to the bottom of the list. Now we can work, or break up further if we so desire.

Mark completed tasks with something like

* [DONE] add RouteTask stub

and what you eventually end up with is a completed implementation tree.

As you code, various “don’t forget this or that” thoughts will come up — add them to your tree, and you’ll eliminate packet drop. You don’t even have to put it in the right place in the tree — just put it somewhere, and later you’ll find the right home branch for it.

Before you send your pull request, make sure everything in your implementation tree is marked with [DONE].

I’m sure there are countless tools out there to help you get organized, but chances are it’s not lack of tools that are limiting the quality of your work, but lack of habits. I personally use TextEdit on the mac for keeping my implementation trees — you really don’t need anything fancy.

Next: Beware of Fashion ⇒

Comments