|
21st November, 2001
Agile System Development, Flexible
Systems
Agile system development and agile modelling are the new buzz
phrases for delivering working software systems. Even IEEE's
Computer publication has included an article on the agile
paradigm in the last couple of months. The nice thing about
agile system development is that it delivers some pragmatism to
the process of developing systems. It is important to stress
here, that Agile System Development is not a software
development methodology. It is a methodology on the development
process.
Agile development introduces some flexibility into the
development process and applies some pragmatism into delivery.
More importantly, it recognises what many of us have realised,
that changes occur to requirements through the life of the
development and that it is better to plan for change rather
than to develop rigid systems to rigid specifications.
Adopting this approach does require a change in mindset. When
developing components, anticipate that the components may
mutate. Rigorously collaborate with others in the development
team to ensure that flow-on effects are communicated and the
system adapts to the changes. The development of contingency
architecture delivers long-term benefits, as flexible systems
are more likely to survive environmental changes during the
operating lifespan of the system. This can be likened to a kind
of Darwinism, in that we are building evolving systems, and the
successive iterations of refinements can produce the most
robust solution for the expected dynamics of the operational
environment. For business systems, where there is an
understanding that business is a dynamic entity driven by
market changes, such adaptability ensures that the business
systems remain functionally appropriate with a lower
maintenance burden.
However, like genetic evolution, components and systems can
develop that reach an evolutionary dead-end. They become so
specialised that they are unable to respond to environmental
changes. Developers and architects need to recognise the
warning signs and redevelop components appropriately. There are
some guidelines that characterise adaptive systems that I have
borrowed from software methodologists.
-
Components must be loosely coupled. This
allows changes in one component to minimally impact other
components with which it interacts. Or alternatively, one
component's function is minimally affected by changes in
the components with which it interacts. This needs to be
applied to inheritance and embedding as well. When
inheritance extends through too many levels or the nesting
of embedded structures becomes too unwieldy, the stability
of the offspring must be considered with respect to changes
in distant parent nodes.
- The structure of a component must be
flexible and extensible, within the basic functional
framework of the system or sub-system in which it operates.
Essentially, a component must be able to survive mutation of
form without sacrificing the functional requirements imposed
by its environment. The simplest structures with the least
inherent semantics are more likely to survive changes without
significant degradation of its operation. Complex structures
are more likely to introduce inflexibility through
dependencies and internal interpretation.
- Interactions must be only sufficiently well
defined and must be able to be articulated in simple terms
without explicit mention of any implementation specifics.
Keeping definitions of interactions as simple as possible,
without referral to an implementation allows freedom and
flexibility in the model developed. It allows conceptual
views of the interaction without influencing the details of
the implementation and introduces wider scope for innovative
approaches to a solution. Defining what must be done instead
of how it is to be done delivers the concept, free from the
physical constraints of the component that is to achieve the
interaction.
At higher levels in the system, interpretations of
characteristics are made and interactions defined.
Characteristics are only assigned meaning at the point they are
used for decisions. In all other cases, the characteristics are
purely data with no use. In this context, the business entities
no longer create a rigid framework for the system. The entities
can have new characteristics added, removed and ambiguities
such as multiple values for a characteristic are supported. The
entities are no longer constrained at the level of
representation. The meaning of the characteristics is detached
from the accessors of the data.
Unsurprisingly, these are not new sentiments. Perhaps they echo
the re-usability paradigm except that proponents of agile
development propose that we should re-use appropriate tools and
that refinement of a system will occur throughout its
development, if not throughout its operational life.
Ultimately, we are endeavouring to produce a process that
supports pragmatism and releases creative control back to the
developers. And that makes good sense to me.
|