There are different approaches to the software development process. Two of the most popular methods are waterfall and agile. Due to the complexity of software development and the varying objectives of projects and stake holders, neither approach can be considered superior to the other. Both have pros and cons and the choice of method should be weighed on a project-by-project basis.
In the waterfall method, all requirements must be gathered before any development occurs. The image below clearly illustrates the process by which development is performed.
As the above image shows, progress is made from the top to the bottom, similarly to a waterfall. An advantage to the waterfall model is its emphasis on building out requirements documentation. Documentation is important so that when new individuals join the development team they have documentation to utilize to familiarize themselves with the project details. A common criticism of the waterfall method is that requirements are constantly changing. Altering requirements can mean the design and/or functionality must be redone to accommodate client's requests. Such changes require more time, and therefore, project costs increases.
Unlike the more traditional waterfall approach, the agile development method (see image above) is based on iterative and incremental development. In software development, the agile model does not build an entire system at once, but rather develops incrementally. Less time is invested upfront for documenting requirements when development is done incrementally. Another characteristic of agile software development is that customer feedback occurs simultaneously with development, unlike the waterfall approach that performs all testing after the completion of the project. Critics claim that the agile model is too "unstructured". Additionally, creating a quote is challenging since the scope of work is not clearly defined at the beginning of the project.