There are three primary models of software design: incremental software, the waterfall method, and iterative software. Below are descriptions of each type of software development to help you decide which works best in your situation.
The first is incremental software. The most straightforward, traditional, and often time-consuming, this is the flat timeline of software design. First you set requirements. Then you set up your design. Then you implement (program). Then you verify the program. When done with the verification, the software is released and the software goes into the “maintenance” step.
If anything goes wrong at any step, you stay there until it is resolved via a constant loop back. This method tends to take the longest amount of time but is the most reliable. Unfortunately, the technology field moves at the speed of light. Hence the incremental method is often so slow that the finished product is obsolete by the time it is released. Hence a faster flow down method was devised.
In the “waterfall” method, all steps (requirements, design, implementation, verification and maintenance) flow into each other. Thus you may be designing software while finishing up software requirements. When enough requirements are established, the team can start coding the framework of the software. This gives a head start on the implementation phase. And problems found at one step are sometimes easier to correct, because the prior step has not yet been completed. The product is often released with beta testers used for the verification stage.
The limitation of the waterfall design is that work may need to be redone if changes are required after the completion of an earlier step (for example, major requirement changes may be made after coding has started). Thus the waterfall design may sometimes end in disaster.
Iterative software is a circle or cycle. The initial planning is done, but planning, coding, testing and implementation all take place in an endless loop before deployment. It allows for many small (or medium) changes to be made in quick succession, bypassing iterative release and repeat processes. However, this process is often a whirlwind, and can drive software requirements staff mad from the ever-changing requirements, statuses, and testing needs. The rate of change can be blinding. Unfortunately, a team that does not keep the rate of change under control and kept track of can become overwhelmed.
In summary, software design methodology is best thought of as a practice rather than a theory. The method that works best for you depends on your unique situation and your tolerance for chaotic periods of development.