You've now seen how we would apply the engineering thought process to solving three different real-world (ish) problems. If it still seems too general, we'll be getting more and more specific as we progress through the next few lessons. One thing you may have noticed is that we're often dealing with two different (though related) concepts -- the Product and the Process.
The Product is what we're actually building. What's our solution to the problem at hand? Half of engineering is making sure you're building the right product and have the ability to actually build it. For software engineers, that means coming up with a software solution and being able to code it up properly.
People typically think of advances in engineering almost entirely from this Product perspective -- what new programming languages have been created? What new frameworks are making things more efficient? What new gadgets can we use to solve our problems??? Let's face it... technology is sexy.
The hidden side of engineering is the Process, which means how we're actually building our product. Products don't just result from a single all-night coding session -- we need to make sure we're following a process that lets us create that Product in the most efficient and effective way possible. That means coming up with a process that is robust enough to get shit done in an imperfect world but also highly responsive to change (which is inevitable).
This is where the real world comes in. You're going to build products as a member (or leader) of a team which is responsible for delivering your solution on time and on budget. These are not inconsequential things! If you'll recall from our history lesson, the inability to do that was termed the "software crisis" in the 1960's. Enormous projects have crashed and burned due to an inability to properly manage the process of creating and shipping software. Thus implementing a successful Process for producing software is a core requirement of software engineering.
Luckily for you, engineers have thought a lot about the process of managing software projects. In fact, significant progress in software engineering has also come in the form of building better processes so we can be more responsive to the real world and get more stuff done.
Even if the distinction between these two things isn't crystal clear right now, you'll see it over the coming two sections. In the next section, we'll talk about how Agile Development provides us with a great process for building our products. In the final section, you'll get back into the product side of things by applying fundamental principles of engineering to solving tactical and systems-level problems.