Aunque un conocimiento completo del sistema se considera usualmente necesario para un buen diseño, haciendo que teóricamente sea un enfoque "top-down", la mayoría de proyectos de desarrollo de software tratan de usar código existente en algún grado.