|
Although I have been critical of waterfall in the past I recently came to a
realisation; that evolution is something that occurs in software development
regardless of whether you intend it or not. Unless your software is dead.
In the past I have seen waterfall as a method diameterically opposed to
evolutionary methods such as Extreme Programming. However, I now see that
all software development is always subject to evolution. Even projects
run strictly on a waterfall basis cannot escape from the process of selection
which occurs in a free market.
The difference becomes a matter of degree; do you encourage evolution to
guide your projects or do you try to reign over them, maintaining control?
Perhaps I better start by defining what I mean by evolution. Computer code is
similar to DNA, and in this sense it is heritable.
Software replicates itself onto users computers, and it is the users
and the choices they make about which software to install and use that
make up the ultimate evolutionary environment that acts as a form of
"user selection".
In this way all software is part of an ecosystem which
rewards the software that users find most beneficial. No software is outside
of this ecosystem, and thus all software is subject to the same kinds of
evolutionary pressure as natural life forms face.
Agile software development methods tend to ramp up evolution. The principle
of releasing early and releasing often encourages a tighter feedback loop
between software developers and users, and in doing so strengthening the
selective pressure for good software.
Extreme Programming adds further selection pressure in the form of unit
tests and continuous code review in the form of peer programming.
A close relationship between developer and user fosters a tight feedback
cycle.
Short iterations and strong selection are key to utilizing the naturally
occuring and inevitable process of evolution. Waterfall tends to put faith
in the ability of people to design complex systems. The ability of people to
think and foresee issues is certainly a huge asset, however I feel that
many developers put far too much faith in their ability to design systems.
In my previous article on appropriate design the message is that developers
should know their limits; know how far and in how much detail they can take
a design before it falls victim to diminishing return. Its often far earlier
than one may believe.
Clearly software development is not only a evolutionary process. We need
skilled developers to create and modify code, and this is a creative process
of the highest intellectual level. Understanding evolutionary processes allows
us to leverage our intellect.
Finally I would encourage software developers to gain a more in depth
understanding of evolutionary processes so they can more fully appreciate its
power. Two books in particular are excellent resources, "The Selfish Gene",
and "The Bind Watchmaker", both written by Richard Dawkins. |