The
following is a first draft of a short essay that I am writing for
inclusion in a paper for an IEEE software maintenance conference in
September.
------------
Agile software methodologies are a set of practices for
software developers that promise rapid and quality software development over
traditional waterfall methodologies through collaboration amongst team and
customers, coding only what it needed, “spiking” software to prove concepts, “pairing”
to put multiple eyes on implementations, and by building the systems utilizing
test driven development and continuous integration.
There has been much debate recently about whether or not
agile methodologies produce these stated results. Many will say that agile methodologies are
successful due to the high-collaboration amongst team and customer combined
with up-front versus back-end testing leads to systems that are built faster,
more correctly, and with higher quality.
Others argue that these practices sacrifice long-term software
maintainability by avoiding proper architecture, and although it makes systems
that appear “correct” up front, but in the long run leads to systems that are
not maintainable and reusable and therefore incurring a larger cost over time.
It is my opinion developed through many years of building
systems utilizing agile methodologies that current agile software methodologies
only represent a few of the implementation details of product development process,
and because of this low-level approach they may build software that may meet
short-term, individual project needs, but that do not lead to software systems
suitable for long-term “enterprise” software.
The current practices of
collaboration, pairing, unit testing and continuous integration work at the
implementation detail of “product platforms”, and do not address overall needs of
enabling enterprise agility through suites of products that enable an enterprise
to be agile in their market space.
The evolution of agile practices need to take into account
these needs, addressing more enterprise level issues such as multiple project planning,
overall software architecture and evolution, systems integration, business
process modeling, product planning and product platform in order to enable true
enterprise agility, and must also address combining them all together to form
integrated processes that giving well defined tasks all the way down through
technical implementation where current agile practices are primarily focused.