15 April 2010

Prepare for Informed Improvisation

Software developers, like many mammals, are sheep-like and slow on the uptake.

We spent the better part of a decade celebrating our avoidance of Big Design Up Front (BDUF).

I jumped on the Agile Software Development hay-wagon. It was
  • liberating, 
  • professionally acceptable, and 
  • socially, much cooler,
to be Agile.


Agilists like me eschewed BDUF. Our approach to design was emergentWe programmed on the fly.

Yes we were faster. Yes we delivered.

In some cases we moved software into production more frequently than the Milkman delivered milk.


The question I ruminate over is
Did we deliver lasting value?  
The cows are still grazing, but I for one, contributed to several steaming cow pies in the name of agile software development.

The voices I respect in our community suggest we're avoiding the fruits of experience design considerations at our peril. Sorry Milkman, but delivery isn't everything.
Software Delivery is the milk jug, NOT the experience of gulping cold, fresh milk
There are signs our community is moving beyond the ominous clouds of Deliverence - pun intended - toward reasonable preparation & design discovery.

Building Benches

Design is premeditation. It is never an immutable concept. It is never written in stone. Ideally, my premeditations grow with me into active (perhaps subconscious) meditation during execution whether programming or building benches.

Last weekend I built a cedar bench. Much thought was devoted to who would be sitting on the bench BEFORE I cut wood. I considered comfort and aesthetic appeal. I chose a height of 19" following simulated user acceptance tests. I made a sketch. I thought about the materials in the context of human contact (choosing naturally rot-resistant cedar over treated lumber).

Our golden retrievers Lucy & Libby seem to be turning their noses up at my handiwork, but my family likes it. I had premeditated design considerations, but allowed myself the freedom to adapt on the fly.  

For me, these up-front considerations, design, or call it what you will, are no more than sound preparation.

Sound Preparation

Sound preparation is not the same as BDUF. I prepare to build something with the tacit understanding I will adapt as the unforeseen emerges.
Sound preparation allows for informed improvisation
Like performers, well-prepared programmers are freer to improvise because preparation considers eventualities - not all eventualities, but some. Preparation frees us to be creative without mucking things up, even if all we start with are a few baseline considerations like
  1. Who's going to use it?
  2. What do they need?
  3. What do they like or dislike most?
I want to be open to discovery. I want time for up-front user research. I want time to respond to user feedback. I want clear and verifiable benchmarks of value. I want enough information about users and benchmarks of value to allow for informed improvisation once the building commences.