Software engineering is the disciplined, systematic application of engineering principles to the whole life of a software system: understanding what it must do, designing it, building it, testing it, and maintaining it over time. It stands in contrast to ad hoc “programming,” where code is written without an organized process.
The phrase was chosen deliberately for the 1968 NATO conference in Garmisch, Germany. Organizers used “software engineering” to express the aspiration that producing software could become a true engineering discipline rather than an unpredictable craft, at a moment when many large projects were failing.
Margaret Hamilton, who led the Apollo flight software effort at MIT, has described independently adopting the term to make her work taken seriously: she used “software engineering” to distinguish software work from hardware engineering while treating each as part of the larger systems engineering process. MIT later described her as a software engineering pioneer.
In practice, software engineering covers the methods and habits that make software reliable and maintainable: requirements analysis, modular design, code review, testing, version control, and disciplined process. The field has continued to evolve through later movements such as structured programming and agile methods, but its founding goal, bringing order to software production, remains the same.