Introduction ============ Why do we need software engineering? Well, in the past decades the software industry has undergone a huge transformation. In 1984 software could be written by a couple of people and then distributed via CDs, floppies or build into a piece of hardware. There was no patching or updates. You want a better version? Go buy the new box. .. figure:: _static/1280px-Margaret_Hamilton_-_restoration.jpg :width: 65% :align: center Margaret Hamilton standing next to a print-out of all the navigation code she(and her colleagues at MIT) wrote for the Apollo project. On November 22, 2016 Hamilton received the Presidential Medal of Freedom, one of Americas highest honors for civilians and military personal, by President Obama for her work on the Apollo project. This has changed. Today we are used to continuously improving software that gets updated every day. Take a guess: How many times do you think amazon is updating their code base? And how many people do you think work on a single small part of the massive application that is amazon.com? In 2013 they reported a change every 11.2 seconds. According to 2015 numbers they did *50 million* code changes across all their products over the course of the year. That works out to be more then a change every second. But how do you keep this all in check? How do you scale engineering operations and the complexity of your systems while still moving at breakneck speeds? **Software engineering** (according to Wikipedia) is the systematic application of engineering approaches to the development of software. It is a sub-field of engineering and overlaps with Computer Science and Managment Science and can also be put as a sub-category of Systems engineering. The main fields of software engineering are 1. Software requirements 2. Software design 3. Software development 4. Software testing 5. Software maintenance If you remember from the introduction we will visit each of these aspects in more detail throughout this course. Why should you care? -------------------- Last but not least: Why should you, as a Systems Engineer, care? Well most of our buyers, especially in the data center, care a lot about how their applications develop and how Cisco products can help them achieve their goals. Also: What is a network? Especially in a "software-defined" context? It's a bunch of configurations (or source code) that define how a network looks and behaves. So the past couple of years the term **NetDevOps** has been coined to adopt some of the techniques used to engineer software today into the world of network engineering. And while no one expects every Systems engineer to become a software engineer as well it is important to know the basics of how software is defined, designed, developed, tested and maintained.