Iterative Software Development

20/10/2020

"To iterate is human, to recurse divine."

L Peter Deutsch (founder of Aladdin & creator of Ghostscript)

"O, thou hast damnable iteration, and art indeed able to corrupt a saint."

Falstaff (Shakespeare Henry IV part 1, Act 1 Scene 2

WHAT HAVE THE ROMANS EVER DONE FOR US?

The word iterative comes from the Latin itero, iterare, meaning ‘to do a second time’ or ‘repeat’

WHAT DOES ITERATION MEAN IN INFORMATION TECHNOLOGY?

Iteration is a term used in programming and algorithms to mean ‘repeat a set of instructions’.

WHAT IS ITERATIVE DESIGN?

An iterative design is one of the methodologies of software design where repetition is key to the process. It was established as an alternative to the problems in Waterfall methodology of having all the planning up front.

In Waterfall each phase of the development cycle is ‘gated’. The whole application has to be designed and have been through a ‘phase gate review’ before coding begins. Then ‘coding gate reviews’ have to happen before testing.

In contrast iterative methodology is about continual looping (iterations) of a design or concept through a sequence of testing conditions to gradually improve it in order to reach a final design. It is typical of an iterative design to use various design strategies and tools. Feedback is encouraged and modifications are made and improvements added at each iteration. The changes at each iteration are small (incremental) so that the developers can learn from the changes in the earlier parts of the development.

AN ITERATIVE DEVELOPMENT LIFE CYCLE MODEL

The life cycle model starts with defining and implementing just part of the software requirements and reviewing them in order to identify further requirements. This informs subsequent evolving versions until a final version is reached and then released. Each release is developed in a fixed time block which is called an iteration, and each iteration is aimed at a set of requirements. The model also allows access to earlier phases so that necessary changes can be made. By the end of the whole cycle a usable system is produced.

WHAT IS ITERATIVE METHODOLOGY USED FOR?

Iterative methodology is an essential part of software programming frameworks such as Scrum, Kanban and XP. These three are, in turn, important in modern software development concepts such as Agile.

HOW AND WHEN DID IT START AS A METHOD FOR SOFTWARE DEVELOPMENT?

Iterative incremental development (IID) can be traced back, as an idea, to the 1930s, when Walter Shewheart, who worked at Bell Telephone Laboratories in America, as a quality expert, proposed a series of short ‘plan-do-study-act’ cycles for quality improvement. In the 1950s IID was successfully applied to the development of the North American X-15 hypersonic rocket powered aircraft, operated by the US Airforce and the National Aeronautics and Space Administration. The use of IID was taken forward by some personnel from the X-15 development who also worked on NASA’s Project Mercury in the 1960s which used IID in software design. Some of these people went on to join the IBM Federal Systems Division which was also an early user of IID. The earliest specific reference to iterative development was at IBM in 1968 by Brian Randell and F.W.Zurcher. The first known large scale deployment of IID that is known was in the command and control system of the first US Trident Submarine in 1972. The very thorough history of IID can be found in Larman, C and Basili, V.R. ‘Iterative and Incremental Development: A Brief History’ Computer 36 (June 2003): 47-56

ADVANTAGES OF THE ITERATIVE APPROACH

  • Problems are caught early
  • Does not need a full specification of requirements at the outset
  • The product is gradually improved as defects are identified
  • Less time documenting and more time designing
  • Some working functionality can be gained at an early stage
  • It is flexible
  • Can be cost effective when dealing with design changes
  • Testing within small iteration is more controllable.
  • Reliable feedback
  • Parallel development can take place

DISADVANTAGES OF THE ITERATIVE APPROACH

  • Iterative development is Waterfall but in a small way so is resistant to change in the original plan of work
  • Iterative development does not have team communication built in, which could result in errors
  • Iterative development splits big development steps up into smaller ones, but if it is not incremental as well, the original design and timescal must be correct
  • Each iteration phase is ridgid without overlaps
  • More management involvement needed
  • Good skill analysis and risk analysis are essential

SCENARIOS WHEN AN ITERATIVE MODEL IS ADVANTAGEOUS

If the major requirements of the design are known but there is the scope for additional functionalities and enhancements to evolve from the development.

If there is the possibility that some aspirational elements of the design may change in the future.

If special resources need to be targeted to a specific iterations.

If the development team needs to learn certain technologies during the development process.

HOW CAN IT BENEFIT ME?

It is important to be familiar with the iterative model because it is a building block of the many modern project management frameworks such as Scrum, Kanban, XP, Crystal, Dynamic Systems Development Method (DSDM), Lean Development and Feature-Driven Development (FDD) which in turn are used in the set of values and principles known as Agile which drives many modern software development projects.

The iterative model can also be very advantageous because it can cope with changes in requirements and eliminate design flaws, both of which are common in most software design projects. It can also provide swift returns of usable and improvable software for projects with a limited budget.