Agile development

Can one produce software the same way as cars are made in a factory? Is the sequential process efficient for ambiguous requirements?

flickr photo by cyclonebill shared under a Creative Commons (BY-SA) license
flickr photo by cyclonebill shared under a Creative Commons (BY-SA) license

Agile development is an alternative to traditional sequential development. It was purposed in 1970 by Dr. Winston Royce in his paper “Managing the Development of Large Software Systems”. He mentioned that this process does not work because the communication between each specialized group tends to fail. Also, sequential process supposes that all the requirements can be determined in the beginning, and this seldom happens. Sometimes, the requirements change, and in the production phase, the requirements may have changed completely, making the product completely useless.

Agile development is based on 12 principles, which can be found in the Agile Manifesto page:

  1. Satisfying the customer during all phases.
  2. Be ready for changes.
  3. Deliver constantly. Don’t wait at the end.
  4. Business people and developers work together.
  5. Motivate employees. Make them feel like fish in sea.
  6. Face-to-face conversation does matter.
  7. Working software measures the progress.
  8. Sustainability is essential.
  9. Focus on good design and technical details.
  10. Simplicity.
  11. Teams organize by themselves.
  12. Regular intervals of time make coordination and feedback better.

Agile development has several benefits over sequential development, which include:

  • Prevents analysis paralysis: this is one of the main problems in sequential development. You have made the requirements analysis and you’re building software, but in another step, you realize that several requirements have changed or have been added. You need to make another analysis in order to keep working. This does not happen in agile, since analysis is a step in every sprint.
  • Allows client to have a product every time: because of the sprints, each iteration returns a product, each time better. In this way, the client does not needs to wait until production phase.
  • to change: implementing changes is easier due to the short term objectives.
  • Less risk: a failure in a big process is a big failure. A failure in a small process is a small failure, which can be fixed easily.
  • Faster: by stepping directly into code, one loses less time in long analysis and planning.

There are several agile development implementation examples. You can read more about them in Frida’s blog.