Sequential and concurrent development



The definition of Sequential as per the new Oxford American dictionary:
 

Forming or following in a logical order or sequence: series of sequential steps.


The figure below shows a simple sequence of five steps.


Typically a software project goes through the following steps sequentially: analysis, design, coding, testing, and deploying. The figure below depicts these software development stages through its typical sequential order. In this figure, the first letter is used to identify each development stage: Analysis, Design, Coding, Testing, and Ready to go (deploy).


Another major difference between Agile and traditional software development is on the way the work is distributed among the development steps. At any moment, an Agile team will be working on all the development stages. The team is concurrently analyzing, designing, coding, testing, and deploying. And this is only possible because Agile requirements are attacked in small pieces, as described above.

For a typical traditional software project the requirements move as a block through each development stage. Each stage of work will go on for a large amount of time-- somewhere in the order of weeks or months. For example, Paulo has worked on traditional software development with schedules like this: one month of analysis, one month of design, two months of coding, one month of testing, and one month of putting it all together in order to deploy it.

In the traditional software development, the system is only available at the end of the last stage. The figure below shows when the business gets value for the software development effort. This figure is overlapping the representation of sequential software development stages with the graph of functionality versus time.



For Agile software development the small pieces of requirements are constantly and consecutively moving through each development stage. And each small piece of the overall requirements spends a short amount of time on each stage; somewhere on the order of hours or days. For example, on Patrick’s last Agile project, a small requirement (the team was using User Stories as per Mike Cohn’s User stories applied book would be in analysis for one or two days. Next the user story would be tasked by the developers in an hour or so; while tasking they would make some small design decisions. Once tasked, the user story would move to the coding stage for typically two days, with another day for testing. 

In Agile software development, the system is incrementally made available. The figure below represents the small pieces of requirements, and the development stages in the graph of functionality versus time.



This figure depicts the nature of Agile concurrent development. Consider a vertical line at time represented with the arrow in the graph. At that moment there are five small pieces of requirement under work, and each of these are under a different development stage. The team is working concurrently.