A Lazy Sequence

Knife sharpening

On a recent episode of Masterchef New Zealand, the contestants were presented with a whole chicken and asked to cook a meal using some part of it. All but one of the contestants started off by hacking apart the chicken to get what they wanted to use. The remaining contestant, a butcher, spent time sharpening his knives before cutting the chicken up. Despite taking extra time to do this, he finished first the task firsti.

This reminded me that in the day to day work for software development, especially if you bill by the hour rather than drawing a salary, it is easy to put off small professional maintenance tasks till some hypothetical ‘later’ that never occurs or dream of big sweeping changes where you replace your whole set of tools with something new and shinyii.

I’ve set out to be conscious of when and how I maintain my toolsiii. Instead of putting off small changes, or getting lost shaving yaks, I am trying to spend a small, focused piece of time at the beginning of each new project addressing pain points in my process. You could consider this the professional equivalent to budgeting time in the project for refactoring.

There are some basic guidelines here:

One final point: This applies to my professional work and not my hobby projects. Using the latest great new tool is fine great for a hobby project; I have all the time I want to muck about, and there are no real ramifications for failure.

Some examples:

It is easy to let this fall to the side with deadlines and pressure of day to day work, but part of being a professional is knowing when to maintain your tools, and when to dig in and do the work. Hopefully this will encourage you to improve your own tools and process.

  1. His professional skill no doubt helped a lot here too, but lets not allow details get in the way of a good analogy.
  2. Alternatively we can lose sight of the job we actually set out to do and spend an inordinate amount of time making sure we have the best, sharpest set of knives around and not actually do any work with them.
  3. For the purpose of this article, tools refers to the broad range of applications, libraries, frameworks etc that we use day to day to get our job done. This includes text editors, programming languages, libraries, version control tools, workflow etc…
  4. Not to mention it has a better Clojure story.
4 March 2012