The notion of software development as engineering has been the subject of vigorous debate over the years. We have disagreed on what an engineering discipline of software development should look like. We have disagreed on how best to spread desirable practices through our field. And recently there’s been a growing debate over whether it’s even desirable to see ourselves as engineers; many have said that the characteristics of engineering seem incompatible with what we know about building software, and we would be better off acknowledging that we are not engineers and never will be.

I’ve been interested in this debate for many years. I think our field is certainly engineering, however immature it might be, and I think it’s irresponsible not to take that idea seriously. At the same time, I think we should steer clear of the ideas that came out of the “Software Engineering” research from 1967 through about 2005 or so. In fact, I think those ideas are deeply mistaken, and have contributed greatly to the current disagreements.

What, then should software engineering look like? I’ve been considering this topic since about 1998. By 2010, I understood the topic well enough to try presenting the ideas as a talk, and as I’ve refined the material I’ve given several versions of the talk “Real Software Engineering”. These essays are updated, expanded version of the material in that talk.