Emerged in late 1990s, aim to reduce delivery time for working software systems.

  • Specification, design, implementation and testing are inter-leaved.
  • Outputs from development process are decided through negotiation during software development.
  • System is developed as a series of increments.
  • Frequent delivery of new versions for evaluation.
  • Extensive tool support (e.g. automation)
  • Focus on working code (minimal design / documentation)

Principles of Agile:

  • customer involvement: customers should be closely involved through the development process
  • incremental delivery: software developed in increments; customer specifies requirements for each increment
  • people not process: recognise and exploit skills of development team; leave team members to develop their own ways of working; no prescriptive processes
  • embrace change: expect system requirements to change; design system to accommodate future changes
  • maintain simplicity: focus on simplicity in both software and development process; actively work to eliminate complexity from system

Agile applies where:

  • We are developing a small or medium-sized product.
  • There is a clear commitment from customer to become involved in the development process.
  • Where there are few external rules and regulations that affect development.