Barry Boehm tried in 2006 to summarize the past of software engineering in his paper A View of 20th and 21st Century Software Engineering. It began in 1950 with the thesis that software engineering is like hardware engineering. Then in 1960 the ease of modification for software led many people and organizations to adopt a “code and fix” approach to software development. In 1970’s, a synthesis in form of the formal procecces and the classic waterfall model emerged, with a “build it twice” prototyping activity before committing to fullscale development. Only later, as Boehm says, “the waterfall model was most frequently interpreted as a purely sequential process, in which design did not start until there was a complete set of requirements, and coding did not start until completion of an exhaustive critical design review.” By the end of the 1970’s, as the systems became more complex, problems were cropping up with formality and sequential waterfall processes. This lead to high-level languages, object-oriented programming and domain-specific architectures, increasing reuse of software components and invention of UML. Ultimately, the result was the use of agile methods and rapid prototyping.