Friday, July 9, 2010

The secret ingredient.... feedback

A few days ago, I went to a OO course, given by Hernan, a colleague at 10 pines. The course started with the basics: a definition of software. Hernan gave this definition: software is a computable model of a problem domain from reality. Our job as software developers is to interpret that problem domain and construct a computable (executable) model that suits the needs of the users.

Now the question is how you get to that model? I started thinking that sequential approaches (waterfall) take an approach of trying to understand very well the problem domain before starting the construction of the model. The gap is bridged by domain experts that specify thorough-fully the problem domain so that technical people start from there.  The Agile approach, on the contrary, tries to understand a bit, models that bit, seeks feedback and then starts again. The model is built iteratively and incrementally, in short cycles. Agile builds the model through feedback.

I started thinking about all agile components I've been thinking lately and realize they all seek feedback.. a lot of feedback. Think about it:

Technical components: TDD, automation, continuous integration, etc.... TDD seeks continual feedback. Does the code do what is specified in the tests? The execution provides the feedback immediately. Automation.. tests are executed all the time so that the team receives feedback. Continuous integration provides feedback of whether the local changes integrate well with the whole (in a neutral environment).

Process components: an incremental and iterative process seeks business feedback. Incorporating this feedback makes the software much more valuable.

Human components: Agile seek to augment the flow of communication. The best communication is the one that includes feedback, because everyone gets to know what is understood (Cockburn says the best one is talking face to face, where you even see the feedback in the other person expressions)

Feedback, feedback, feedback.. Agile relies on feedback to bridge the gap between the business domain and the model being built. Technical and business users collaborating to create a valuable model. Knowledge is built through feedback. Software is built through feedback.