Development Methodologies

There are two different methodologies that can be used when developing software:

  • Waterfall Method  – Iterative 
  • Agile Application Development 

Waterfall Method

Traditional software development methodologies follow a set of steps in a specific order. This method is known as the waterfall method.

Iteration

Iteration means to repeat. If a programmer is following the waterfall approach, they will repeat stages like design, implementation and testing fairly regularly.

Iteration can be between stages, for example, repeating design and implementation after finding errors in testing.

Iteration can also be within stages, for example, using a dry run to alter code during implementation or re-interviewing an end user during analysis.

Iteration between Stages

Revisiting the design stage because of problems identified during implementation is an example of iteration. Once alterations are made to the design, implementation continues.

During testing, a programmer may realise that there are problems with the source code. Programmers would then revisit implementation and continue onto testing once the errors had been rectified. This is another example of iteration between stages.

When a programmer carries out any form of maintenance they may have to revisit the design stage and then follow the rest of the model through. This is another example of iteration.

Agile

Agile methodologies are by definition, agile! This means that they contain enough flexibility to allow software developers to create software in whatever way is most suited to the circumstances that they are faced with.

Agile methods place a great deal of emphasis on communication and team work. 

Agile software development describes an approach to software development under which  solutions evolve through the collaboration and cross-functional teams and their customer(s)/end user(s).  It uses adaptive planning, development an continual improvement, and it encourages rapid and flexible response to change.

Client Interaction

Iterative 

The client is heavily involved in the initial analysis stage and at the end of development, when evaluating if the software meets their needs and matches the agreed specification

Agile

The client is involved throughout the process, giving constant feedback on prototypes of the software during development. This feedback is acted upon, quickly ensuring the software evolves throughout the project. 

Team Work

Iterative 

Teams of analysts, programmers, testers and documenters work independently on each phase of development.

Agile

Teams of developers communicate and collaborate, rather than teams of experts operating in isolation.

Documentation

Iterative 

A detailed project specification is created at the beginning of a project. Significant time is spent during the project on design, program commentary and test plans.

Agile

Agile focuses on reducing documentation. It spends time on small cycles of coding, testing and adapting to change.

Progress Measurement

Iterative 

Follows a strict plan, with progress measured against timescales set at the beginning of the project.

Agile

Breaks a project down into a series of short development goals (often called “sprints”). 

Agile focuses on delivering software as quickly as possible.

Predictive

Iterative 

A predictive methodology, focusing on analysing and planning the future in detail and catering for known risks.

Predictive methods rely on effective early phase analysis and if this goes very wrong, the project may have difficulty changing direction.

Adaptive

Agile

An adaptive methodology, focusing on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well.

An adaptive team has difficulty describing exactly what they will do next week but could report on which features they plan for next month.

Testing

Iterative 

Testing is carried out when the implementation phase of the project is complete.

Agile

There is no recognised testing phase, as testing is carried out in conjunction with programming.