Monday 12 March 2007

What am I doing?

What are you Doing?
There's a great training game for Improvisational Theatre called "What are You Doing?". You need two or more people:

The first person starts miming something, say: Casting a fishing line, and the next person comes along and says "What are you doing?" The first person has to reply with something unrelated to what they are miming. Then the asker starts miming the named activity, until another person comes along, and asks "What are you doing?", and so on.

The idea is to not think in advance of the unrelated activity. It's kind of fun, quite challenging, and surprising what "pops out" of your mouth. Those taboo subjects take a while to work out of your system. It's all about spontaneity and giving the internal censor a bit of a holiday. Creativity on demand!

I should try some of these games out on my work colleagues.

What am I doing right now?
I'm in the process of re-factoring some software. This is a bit like editing a piece of writing. You see a way to improve the writing, and you make some modifications. The name comes from factoring an expression -- yay maths! -- in a form where the factors can be more clearly seen. For example:

x^2 + 3x + 2

can be rewritten as

(x+1)(x+2)

Why? I'm not adding features. I.e. I'm not directly adding business value.

Well, it's a bit like gardening. If I don't prune and fertilize, eventually the plants are going to get over-run with pests, the soil is going to become exhausted, and the yields will go down slowly but surely.

Now, the kind of re-factoring that I'm really interested is in finding better abstractions. Today's effort is based on a recognition that certain concepts need to be separated, while others need to be unified.

The hard bit is to do this all step-by-step so that the program still compiles and the tests continue to pass. Having recognized what needs to be done at a broad level -- the creative bit -- the execution is a little tedious, but strangely relaxing.

What motivated me to do this instead of prototyping ("spiking") some new features was a recent viewing of almost all of an excellent video presentation on the Agile project management process Scrum, in which Ken Schwaber he explains how software can become "Design Dead" over time, by neglecting these kinds of activities.

Basically: Cutting corners to meet deadlines is a "great short-term tactic, but a terrible long-term strategy". It's insidious, gradual, hence highly dangerous.

Reflection of the day
It's interesting to contrast these two activities:

  1. The impro game emphasizes spontaneity and playfulness
  2. Re-factoring is superficially about good planning and being methodical
But you can't re-factor well without creative insight, so there-in lies the similarity.

No comments: