Software Development Methodologies
Software development is difficult. Not to scare anyone, but here are some statistics from a 2012 study conducted by McKinsey & Company in collaboration with the University of Oxford:
- 66% of software projects are over budget
- 33% of software projects do not get finished on schedule
- 17% of software projects fail so badly that the company's existence is threatened
Planing and executing a software project needs a method. There are many methodologies for software development that can roughly be sorted into two main categories: traditional methodologies and agile methodologies.
Traditional Methodologies (Waterfall and similar)
Traditional methods (most widely knows is the Waterfall method) have distinct phases that are gone through one after the other. Once a phase has been completed, the next one begins and there is no going back. The basic idea is that the software with all its features is described once in the beginning and then implemented accordingly.
Source: https://commons.wikimedia.org/wiki/File:Waterfall_model.svg
However, this does not work for many software development projects as experience has shown. Often the client does not exactly know in the beginning what exactly they want or even what is possible. Also, some features that might seem to be important in the beginning might become less relevant as the project progresses. In addition, there is often a disconnect between what the client wants, what they describe they want, and what the developer understands that they want. This means that the end result might not be at all what the client had in mind.
Agile Methodologies (e.g. Scrum)
In the 1990s, agile methodologies became popular (although they were around for a lot longer). Agile methodologies try to overcome the shortcomings of traditional methods by following an iterative approach. Instead of planing all features in the beginning, agile methodologies progress in iterations that allow changes to the requirement at the beginning of each iteration and a functioning product at the end of each iteration.
Agile methods typically involve constant customer-developer interaction, short release cycles, and focuses on the people: customers satisfaction and a sustainable pace for the developers.