Developing complex software systems is hard work and the risks are high. In order to manage the complexity and mitigate
risks that could jeopardize the success of a project a development process is needed to serve as a conceptual framework
for planning and executing activities. The diagram below illustrates that activities in an incremental/iterative software
development project are performed again and again over several cycles (iterations) to produce stable releases in controlled increments.
A development process must accommodate various project criteria. For example, requirements capture, analysis, design, code, and test
activities must be able to occur in parallel. Features must be carefully managed and be traceable to areas of the code and back.
The architecture must be visually modeled, strictly enforced, and never fall out of sync with the code. And finally, each
release must be based on validated software components. The only pragmatic way to develop software that satisfies these criteria
is to use an incremental/iterative process which acknowledges that during development, discoveries will occur that require
evolutionary changes to artifacts associated with each activity. These changes must occur in a controlled manner within a process
in which mechanisms exist to prevent hacking, short-cuts, coordination chaos, and schedule slip. The objective of the process is to produce
a working, bug-free, and high-quality software release every 4 to 6 weeks. Frequent releases are necessary to obtain feedback - especially
from the customer - and to provide a solid foundation for the next incremental release.
A well-bounded development process:
- Provides sufficient structure to guide innovation and creativity and yet constrain it at appropriate times and places
to prevent unbridled freedom from running wild.
- Allows project leaders to identify tasks that are focused on results and priorities without having to specify minutia so
that developers can progress efficiently on their own initiative.
- Produces accurate and meaningful progress and status reports for the while minimizing the impact on developers time.
- Is lightweight and quickly becomes a matter of habit rather than a set of conscious acts that require developers to
reference a huge manual every time they reach a new step in an activity.
- Helps the team to manage complexity and identify risks.
- Manages the flow of information both within and outside the team.
When software projects fail it is usually not for a lack of
programmers, managers, equipment resources or time, but rather
because control over the complexity was lost. In order to succeed, an agile
development process is a necessary requirement.
A process is a conceptual framework
for managing complexity
and mitigating risk.
development activities must be able to occur
large projects the objective is to produce a high-quality
release every 4 to 6 weeks.
Frequent releases are necessary to obtain feedback
and provide a solid foundation for the
architecture must be visually modeled.
software projects fail it is usually because control over the
complexity was lost.