Over the years, a number of different models have been developed, beginning with the oldest and simplest being the Waterfall Model. However, as software has become larger and more complex, this method of development has been found to be counter productive, especially when large teams are involved. Models that are iterative have evolved including Prototyping, Evolutionary Prototyping, Incremental Development, spiral model, V model, and Chaos model.
The use of these models was for the most part confined to the overall management of the project, however projects are now considered better controlled if the model best suited to them controls the individual aspects of the project. For example, a project may be managed using the Incremental Development model, but during each increment the Documentation is created managed using the Waterfall Model and the Code development managed using the 'V' model.
The level of formality and complexity of the lifecycle for each project is constrained by any number of factors, including budgetary constraints, experience and size and complexity of the project and development team.
Some experienced and highly respected project leaders and programmers consider rigid application of lifecycle plans to be a theory that does not work well in practice. Linus Torvalds, the very highly regarded project leader of the Linux kernel, made the following statement on the Linux kernel mailing list:
See also Software engineering, List of software engineering topics, Development stage