Agile Software Development Methodology

What is Agile?


Agile software development is a style of software development characterized by an emphasis on people, communication, working software, and responding to change. Its principles are summarized in its seminal declaration, the Manifesto for Agile Software Development.

Our Agile methodologies engage an iterative workflow and incremental delivery of working software in short time-boxed iterations. An iteration is essentially a small release of software. Generally during each iteration many activities will occur in parallel, such as requirements, coding, and testing. Iterations are typically a fixed length (although this length varies among projects) and thus are referred to as time-boxed. The time allocated to each iteration is sometimes referred to as a cycle time.

The number of people involved and the number of "sign offs" helps to define the amount of ceremony for a particular project. The number of artefacts or work products such as documentation also define the amount of ceremony. We have found that lower-ceremony projects tend to work better overall than higher-ceremony projects.

Agile Unified Process

The Unified Process (UP) is an iterative and incremental software development process framework. As a process framework there are several adaptations, the most popular being the Rational Unified Process (RUP) from IBM. The Agile Unified Process (AUP) is an Agile adaptation of the UP formalized by Scott Ambler and written about by others including Craig Larman. Ambler succinctly summarizes AUP as "serial in the large, iterative in the small, [and] delivering incremental releases over time."

Risk management plays an important role in AUP projects. AUP stresses that high-risk elements be prioritized early in development. As a means to this end, a risk list is usually created early on and maintained throughout the development process. Additionally, AUP stresses the early development of an executable architectural baseline. This architectural core is developed during the Elaboration phase to validate key requirements, assumptions, and address technical risks.

In describing AUP as "serial in the large," Ambler refers to the four major phases of a UP project: inception, elaboration, construction, and transition. These phases occur in serial and each concludes when a specified milestone is achieved.

  • Inception—The goal of inception is to develop a shared understanding of the scope of the new system and to define a candidate architecture.
  • Elaboration—The goal of elaboration is to expand the team's understanding of the system requirements and to validate the candidate architecture.
  • Construction—During construction the development of the system is completed.
  • Transition—During transition system testing is completed and the system is deployed to production.

AUP is "iterative in the small" in that each phase is divided into one or more iterations. AUP disciplines are a subset of UP disciplines and include: model, implementation, test, deployment, configuration management, project management, and environment. During most iterations, all of the seven disciplines of AUP occur in parallel (see above). Each discipline represents an activity that drives the project closer to achieving its vision.

AUP is an implementation of the Unified Process, which tailors it by selecting only seven disciplines (model, implementation, test, deployment, configuration management, project management, and environments).

Phases and Disciplines of the Unified Process: Image courtesy of IBM.