Iterative and Incremental
Development
The
practice of iterative and incremental development to structure the work on a
project is common to all agile methods. In effect, iterative and incremental development
when put collected becomes the primary enabler for most of the other agile
techniques.
While
iterative development is conjoint to all agile methods, the use of the
technique does not essentially make a project agile. A number of additional
techniques must be extant before a project can truly be considered agile.
Some process-heavy methods, such as the full implementation of the Rational
Unified Process (RUP) use iterations to establish the development work, yet
they are too process-heavy to be considered agile.
Customer Involvement in Work
Planning/Re-planning
One
of the major basics of agile methods is the active participation of a
"customer" in frequent, detailed work planning or re-planning at the
start of each development iteration. What makes this so interesting, is that
such close customer influence over the internal workings of the development
team has been cited as a major cause of failed projects using traditional
methods, but is also a major reason why agile methods are so successful. The
kind of customer involvement is a double-edged sword — it can lead to a greater
probability of meeting the customer's (developing) requirements, but can also
lead to scope creep and increased the budgets if not managed well. Agile
methods put structure to the management of this close customer involvement such
that the likelihood of losing control of the development is minimal.
Concurrent
Design/Engineering
Projects
that are well-suited to agile methods are development projects where the
requirements are either unclear or unstable, or where the design will
continually change due to technical uncertainty. If the requirements and design
are going to change frequently, then waiting for the "design phase"
to end and getting a formal sign off from the project sponsor before proceeding
with development will just lead to endless design churn. What is needed is the
ability to start development on the portions where the design is reasonably
complete, while still working on the design of other portions. In the
engineering/construction world, this practice is called concurrent design or
concurrent engineering. The main benefit here for agile projects, is that it
gets the project moving into development mode quickly, and also allows the
project still to be very responsive to changing requirements and designs.
Feature-Based
Design/Planning/Reporting
All
agile methods take a feature-based design approach. They may exhibit this
approach differently, but underlying their techniques the base approach is
still the same. Similarly, agile methods plan their projects around features,
not tasks. Finally, agile methods all report progress on feature completion,
not on task completion.
Continuous Building/Testing
All
agile methods include the concept of continuous testing. Continuous testing
allows you to find defects much earlier in the development cycle than waiting
for them to emerge when testing is conducted at the very end. Earlier
identification means more time to fix defects when it is convenient (most
efficient) and more time to fix difficult bugs. Sometimes high-severity defects
found late in the testing cycle of a traditional test-at-end method mean
significant schedule delays. Continuous testing flushes these defects out
earlier, minimizing their impact on the schedule.
To
employ this type of testing on your project, you require three main
pre-requisites:
ü
Iterative
development,
ü
Frequent
product builds