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:
- The time spent must be relatively small; This is to minimize scope-creep. I want to gradually and iteratively improve my process rather than get lost trying to reinvent it top to bottom.
- Once the project work is begun I accept that that knives could always be sharper, but that the tools exist for the job, not for their own sake, so the work comes first.
- Any sharpening should only address real problems I have identified from real work. Hypothetical problems can be addressed in my own time.
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:
- I recently switched back from TextMate to Emacs. For all that emacs is an arcane beast of text editors I have found it consistently easier to adapt to my needs than TextMateiv.
- I have become frustrated with the templating system that ships with Django. For my most recent project I’ve decided to try Jinja2 as a replacement. The yak shaving alternative here might have been to attempt to translate Enlive from Clojure to Python.
- Switching to SCSS eliminates a lot of the repetition that is inherent in CSS.
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.
- His professional skill no doubt helped a lot here too, but lets not allow details get in the way of a good analogy.
- 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.
- 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…
- Not to mention it has a better Clojure story.