Sistema ampliamente utilizado para desarrollar proyectos físicos, tales como edificios, barcos o puentes. El proyecto se ejecuta en fases secuenciales tales como toma de requisitos, diseño, programación, testing, mantenimiento.
Sin embargo, el software es tan maleable, que este modelo no suele funcionar bien. Los sistemas software son mucho más complejos que los sistemas físicos, y por tanto es muy dificil visualizar desde el principio su diseño y entender todas las implicaciones antes de empezar a desarrollar. Los problemas no se hacen evidentes hasta que el desarrollo está avanzado. Sin embargo, este modelo no se adapta bien a los cambios en fases anteriores (por ejemplo, es posible que el equipo de diseño esté ya en otros proyectos), por lo que el equipo de desarrollo termina parcheando el código sin modificar el diseño general, incremento exponencialmente la Complejidad.
Es por eso que en desarrollo de software se utiliza una aproximación agile, donde se diseña, desarrolla y evalúa pequeños grupos de funcionalidad iterativamente. Así, se reparte el diseño durante todo el proyecto y los problemas que van surgiendo se pueden ir corrigiendo cuando el sistema es todavía pequeño.
Esta aproximación funciona bien en el diseño de software porque éste es maleable y permite grandes cambios en el diseño durante la implementación. Sin embargo, en los sistemas físicos grandes cambios en el diseño no tienen sentido: por ejemplo, no sería práctico cambiar el número de pilares que soportan un puente en mitad de la construcción del mismo.