Adaptive Software Development

From: Harry Erwin (herwin_at_theworld.com)
Date: 11/23/03


Date: Sun, 23 Nov 2003 16:38:04 +0000

After reading everyone's comments on XP, I'm beginning to develop some
ideas about adaptive software development.

First you need a flexible process. I agree that surprises happen, and
the team needs to respond effectively with individuals changing roles.
I've seen this done at TRW, and it requires a style of management that
facilitates the work done by team members and is proactive towards
change and risk.

Second, you need an adaptive design and design process. Here, the
building experiments of Christopher Alexander give some insight. He
found that a pattern language was not enough--there has to be some
overall theme or metaphor. An adaptive process without a metaphor tends
to produce an eclectic design that's locally optimized, but globally
disorganized. This suggests both top-down and bottom-up processes need
to be facilitated. The tension between the two is important.

Third, you need discipline. This leads to high quality, but also results
in all elements of the design expressing a single voice, even though it
is far too big to be the product of a single mind. I think this also
implies the need to produce _necessary_ documentation. Again, at TRW, we
tried to produce the minimum documentation for which a need was clear.

Fourth, you need to know the problem domain. You need a language that
reflects the concerns and elements of that domain, so that the system is
usable by people who work in that domain. In addition, this allows the
development team to understand where requirements may evolve and where
they're more rigid.

Fifth, you need to know the solution domain. I have seen far too many
systems developed based on a knowledge of the problem domain that have
not found a viable or optimal solution. Near-optimality seems to
underlie the long-term prospects of most systems in operation.

I can make a list of adaptive metaphors that might be used to guide the
definition of a suitable process:

Engineering Development--like shipbuilding. (Waterfall model)

Traditional Carpentry--much less formal, but similar. (Patterns)

Ecological Evolution--involving the gradual resolution of forces defined
by opposing requirements. (Chaotic, need not converge, historical
accidents important)

Biological Development--execution of a fixed developmental program in a
embryonic environment. (Again, a waterfall model)

Biological Evolution--random mutation followed by natural selection.
(Genetic programming)

Historical/Social Evolution--directed evolution with natural selection.
(Can be mathematically chaotic, need not converge, often results in
suboptimal or even disastrous solutions due to planning horizon effects)

Learning--reinforcement directing the evolution of a self-organizing
system. (Probably involves a fixed developmental program)

I'm not sure where this leads, but, some of the possibilities are
interesting.

-- 
Harry Erwin <http://www.theworld.com/~herwin/>


Relevant Pages

  • Re: XP Question about Metaphor
    ... > may be helpful to think of some metaphor, ... The better the programmers, the better the ... Does XP automatically generate good design? ... He started questioning the number of trucks, ...
    (comp.object)
  • Re: TDD: Test-Driven Design or Test-Driven Development?
    ... if any design. ... And in "Program Development by Stepwise Refinement" Wirth clearly ... > metaphor, but if you manage to find one it does come ... Would XP consider the two different design approaches to the 8 Queens ...
    (comp.object)
  • Re: TDD: Test-Driven Design or Test-Driven Development?
    ... >> fairly mainstream. ... > Maybe what I'm thinking of as design corresponds to what XP calls ... > Does code precede the metaphor? ...
    (comp.object)