The term Iterative and Incremental Development (IID) describes a class of methodologies for software development where the system grows incrementally through a series of complete development cycles. Agile software development methods are a group of specific iterative methodologies that combine relatively short iterations with evolutionary refinement of the requirements, plans and targets across each subsequent iteration.
In our experience, agile and iterative methodologies are more reliable and lower risk than using more traditional waterfall style methods for software development. We have also found that various Agile software methods such as eXtreme Programming (XP), Scrum, Unified Process (UP) and Evo supply important and useful paradigms for reliable delivery of software development projects.
We believe that one potential weakness of these methods is the reliance on regular ongoing testing between iterations to ensure software quality, without providing specific processes or tools to define or facilitate this testing. We have successfully utilised the Six Sigma problem solving methodology DMAIC (Define, Measure, Analyse, Improve and Control) within each iteration to improve the reliability of the software development process. The key to the success of this methodology is its focus on using data-driven tools to identify what is to be changed and then to monitor the actual impact of changes in a feedback loop.
Most software project failures are the result of business needs not being correctly understood or by overly optimistic software development estimates. These errors lead to long delays and large cost overruns. The traditional mechanism for ensuring that requirements are understood and that estimates are accurate is to engage in lengthy up-front analysis, design and planning. Unfortunately this approach is inflexible and is inappropriate for the majority of real-world projects. Agile methods use an iterative approach to ensure that flexibility is an inherent component of the project however this can lead to a lack of clarity as to whether the deliverable is tracking to goal. By applying Six Sigma concepts of defining, quantifying and measuring key delivery factors we can monitor overall delivery and quality of the resulting software without resorting to analysis paralysis in the early stages.
The specific parameters to be measured and analysed will be project dependent and should relate directly to the ultimate end-user functionality of the software being developed. In addition, we have found that some useful key indicators for software quality include measurements of numbers of defects found in a test cycle, the percentage of rework per iteration (the number of requirements which need to be re-implemented during one cycle) and the number of new features which are logged after one cycle. We believe that Six Sigma provides a framework and effective tools that support reliable Agile software development project delivery. Based on our experience, we strongly recommend combining Six Sigma with Agile and Iterative software development methodologies.
|