iterative and incremental

Agile software development is typically iterative and incremental. The software requirements are sliced and planned into iterations.  The software is built incrementally, with newly developed slices being added to (or deployed with) the working slices. The figure below is depicts the nature of Agile software development.

the work cycle

Agile software development progresses in small development cycles that typically last from one to four weeks. As you can see in the figure above, there are several activities that happen within a development cycle. These activities differ depending on your flavor of Agile, and the maturity of Agile within your organization. 


Agile incrementally delivers increasing value over time, whereas the traditional software development process delivers no value until the end. The figure below depicts typical Agile incremental delivery by means of consecutive iterations.


delivering  incrementally

The figure above illustrates three consecutive iterations. The overall requirements are represented by a backlog of work, which is a collection of smaller pieces of requirements. Then from the overall backlog, the work is selected for an iteration. Scrum calls these product backlog and iteration backlog, respectively. Subsequently, as the work progresses, it is continually integrated with the previously completed work. Finally, the work completed within the iteration is either released, or waits for complementary work from future iterations.


The graph of functionality versus time (below) provides an effective visual representation for Agile and traditional development delivery styles. In this graph, the X axis represents the elapsed time, and the Y axis represents the delivered functionality.  



graph functionality versus time

The graph above represents the project at the beginning, or time zero. In this case no functionality has been completed yet. And this is the same situation for Agile or traditional software development. The figures that follow show what is delivered in Agile versus traditional software development teams.
 

Traditional sequence:
 




Agile sequence:
 



 This sequence shows how Agile delivers small slices of functionality over time, while the more traditional software development style only delivers at the end.