October 20, 2011

That’s just perfect!

Filed under: Learning,Process,Programming — Freek Leemhuis @ 7:22 pm

I’ve been thinking about the concept of ‘Perfect’ recently.

In our business there’s a lot of talk about self-improvement, excellence and similar concepts.
Often the discussion is lead by ‘agile coach’ types who can not program their way out of a paper bag, but that is another story for another day.
The ‘Perfect’ meme is used to promote Deliberate Practice, as perfection is elusive by design and so by aspiring to perfection we can continue to learn.
Personally I find it a lot clearer to strive for improvement rather then perfection. Improvements are easier to define and measure than an abstract concept like perfection.
Suppose that you would strive to reach old age, would you focus on immortality? You’d probably be off looking for that magic potion. If instead you aim to get older you would maybe decide to obtain a healthier lifestyle, thereby actually increasing the chance to get older.

There’s this quote from George F. Will:

“The pursuit of perfection often impedes improvement”.

By looking for that perfect solution one often finds a gaping void between it and the current situation, making it hard to figure out where to start. If instead you try to think of one thing that would improve the situation, and do this as often as possible, then you are well on your way towards excellence.

The other problem with aiming for perfection is the potential for poor return on investment that more practical minds would point to. We as programmers care a lot about the form and shape of our code, where our customers usually really only care about it’s function. Too much focus on the internal quality can thus be perceived as being wastefull. Nobody will deny you the right to improve yourself and to spend time and energy for that purpose, so overall it would make more sense to use terms like Continuous Improvement (or ‘Kaizen’ if you want to be pretentious about it) then to strive for perfection.

I try to create code that is less sucky everyday, so as to stay in what I call the Zone of Usefulness.

Let me know if you find this a usefull concept 🙂



  1. Great food for thought as I’m a bit of a perfectionist myself… but why, pray tell, is the lower right part of the graph (x axis – the more functional) marked as ‘suck’?

    [making phun] Is that because you dislike LISP and the like? [/making phun]

    Comment by -Mrcl- — October 21, 2011 @ 8:21 am | Reply

    • hehe, good point, maybe I should have used ‘efficient’ or some such term.
      Although I think code in general is resistant to perfect, creating pure functions in functional languages is as close as we will get. Of course, in themselves these have no value, and you have to drag state into into it for them to actually achieve something ‘in the real world’ 🙂
      Thanks for your comment, I found it very usefull 😉

      Comment by Freek Leemhuis — October 21, 2011 @ 8:37 am | Reply

  2. Hi Freek,

    A thought-provoking entry! It illustrates how something seemingly straightforward in definition such as “Perfection” can mean so many different things to other people.

    The entry provokes many more interesting questions. For instance, what are the responsibilities of an Agile Coach? What is the significance of the y-axis being labeled Perfection instead of Improvement? Why is calling Continuous Improvement “Kaizen” pretentious?

    Comment by Portia Tung — October 24, 2011 @ 6:47 pm | Reply

    • Hey Portia,
      These are good questions, many thanks for that.
      I will not pretend to know all the answers, but I’ll try to explain where I’m coming from.
      The responsibilities of an agile coach are dependent on the context of the situation of course. My remark was based on the feeling I sometimes get, especially at agile conferences, that there are few agile coaches that have a solid grasp of the more technical aspects of software development. Agile software development was formed by practitioners, and sometimes I get the feeling that we need practitioners more than we need coaches.
      The y-axis was not labeled improvement, because that is precisely my point: if you aim for perfection, you don’t get things done. Aiming for improvement would be fine 🙂
      And the Kaizen thing – I’m wondering why people use Japanese terms for concepts if there are English equivalents that more people can understand. Or is it just because it sounds more ‘interesting’? Maybe there’s another reason that I’m missing?

      Comment by Freek Leemhuis — October 24, 2011 @ 8:02 pm | Reply

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

Create a free website or blog at

%d bloggers like this: