376RE: Agile Software Development Revolution
- Jul 8, 2002(I know most of the people subscribed to this list belong to
the Extreme Programming mailing list, but just in case some
of you missed this posting at the Extreme mailing list.....
here it is. My apologies included if you have received multiple
copies of this message.)
It troubles me that the _fundamental differences_ between
traditional and agile processes are not highlighted,
either by, we, the creators and supporters of the Agile movement,
or by traditional software development figure-heads.
Because if we don't highlight the differences of why Agile
Software Development processes we run the danger of hearing
and, worse, accepting that:
there is nothing really all that new with
Agile Software Development processes
This will relinquish Agile Software Development as "one"
of many other compatible worldviews, and soon Agility will be
muddled into oblivion.
Don't take me wrong, I admire and respect the contributions
of people like Humphrey, Paulk, Parnas, Boehm, Constantine,
Booch, Jacobson, Gilb, Jackson, Yourdon, etc.; but I think in our
desperate effort to make sense of Agility, we will find
that many important concepts are forgotten if we try to equate them
with their traditional software development counterparts. And that
misconceptions and misunderstandings will be created like:
The CMM is compatible with agile processes, or
XP can be an instance of RUP
In my opinion, there are radical and fundamental _differences_
that make Agile Software Development Processes and Traditional Software
Development Processes two very different ways of developing software
from the perspective of the nature of their underlying processes:
Traditional Software Development Processes advocate and
eventually prescribe a _defined_ and _repeatable software
engineering process, as well as many other _defined_ and
_repeatable_ processes that correspond to different
"process areas". And they are based on the erroneous belief,
in my opinion, that software can be "manufactured".
Agile Software Development Processes, on the other hand,
use inspection/adaptation feedback cycles that "generate"
a process by people that self-organize based on the
application of a set of practices, or patterns really,
that in an Alexandrian way lead to the emergence of
an organization and a process. This is stated directly
in the Agile Principles:
"The best architectures, requirements, and designs
emerge from self-organizing teams."
Therefore Agile Software Development Process more
closely resembles a New Product development process
like the one described in:
[NonakaTakeuchi] Takeuchi H. and Nonaka I., The New New Product
Development Game, Harvard Business Review (January 1986),
pp. 137-146, 1986.
In my opinion, this is an important, radical and fundamental
_difference_, that subtly changes the underlying assumptions
of why and how things work in a software development process.
How does this difference affects the people that work on an
Agile Software Development Process?
It is this feature of Agility that brings out these essential
characteristics in an Agile Software Development Process:
1) Greater Liberty and Freedom
People in an Agile Software project feel more liberated
because they feel _free_ to do whatever it takes
to achieve their goal:
talk to the customer, think, imagine, code, test, refactor,
in any order, as many times as they need/want, and as often as
they need to.
2) Required Learning, Knowledge Creation and Knowledge Sharing
People in an Agile Software project are constantly learning,
and sharing knowledge because by definition Agility is
based on continuous short feedback cycles of:
inspection --> adaptation
where we learn from the customers, from other team members,
from practitioners in the field, and even from ourselves
on a daily basis.
3) A More Enjoyable and Humane Work Environment
People in an Agile Software project participate in a more
human "fun-like" way because the more human and intellectual
activities of research, understanding, imagination,
creativity, cooperation and sharing are encouraged and required;
as opposed to being considered just "another station in
a production line".
4) A Hyper-productive Cooperative Work Mode
People in an Agile Software project work in teams that
exhibit a mode of cooperation that leads to hyper-productivity --
the dynamic pull-system way that Nonaka and Takeuchi describe in the
Knowledge Creating Company as the "hypertext" organization.
This mode of cooperation, taps into the collective
intelligence and collective knowledge and memory stored
in the distributed mind of the team and the organization
as a whole.
5) The Quality of Life
Agile Software projects work under the assumption and
expectation that "emergent" behavior is the only way to
confront uncertainty. Agile Software projects openly
accept that it is impossible to:
outline what tasks are going to be needed
to complete a software project up-front, and
get all the requirements up-front, and/or
design an architecture up-front.
Rather, the plan, the requirements and the architecture
of the project, gradually emerge, by constant feedback cycles,
research and creativity, and constant interaction among
the participants of the project and the customer.
This is what gives Agile Software Development teams
the distinctive feature of "ordered chaos" that
Life itself uses to accomplish its miraculous chores.
And therefore, this is what literally makes teams
more "alive", because teams more closely resemble
living systems like ant or bee colonies,
brains, or rugby/soccer/football teams.
For these reasons, which are not all, I hereby declare the
beginning of a new era in software development, and I therefore
proclaim officially that the creation of the Agile Manifesto:
and its principles:
mark unequivocally the beginning of the:
Agile Software Development Revolution
which was created, sponsored and supported by all of
you brave souls that dared the world by practicing and
advocating a _new_ Agile way, that makes software development
different, more productive, more humane and therefore
clearly better, in my opinion.
Don't find yourself muddled out by figure-heads ... stay Agile!
- Next post in topic >>