I've been of the opinion for some time now that software development, regardless of the methodology followed or the tools used, is not an engineering discipline (unfortunately), but rather is a craft. I recently laid out that opinion in some detail, which was quickly followed by many people (both in the tubes and in private communications) mostly disagreeing, some suggesting that I just don't understand engineering particularly well.
In general, I'll quickly concede that last point, but I keep running into people who ostensibly do understand engineering, and who also reject the notion of software development being a variety of it. As an example, if I had known of Terence Parr's essay "Why writing software is not like engineering" before writing on the same topic with essentially the same premise, I would have simply tweeted a link or something.
A more pointed, and in my opinion, brilliant restatement of this thesis was delivered by Linda Rising in a talk at the Philly ETE 2010 conference in April of this year. The focus of the talk was far, far broader than the topic of how to classify and characterize software development, and very much worth a listen (audio of the talk is available). But for now, the key relevant quote comes at 25:15:
One of the things we can learn from psychology is that they do real experiments…whereas in our industry, we do not. We cannot call ourselves "engineering"; [our work] is not based on science. In fact, last year at the Agile conference I gave a talk1 that said "I think that mostly what runs this industry is what you'd call the 'placebo effect'." Think about [what would happen] if drug testing were done the way we decide to do anything in software development. We'd bring in a bunch of pills, and we'd say, "Oh, look at this one, it's blue! I love blue! And it has a nice shape, oh my goodness, it's hexagonal! Hexagonal things have always had a special place in my heart. I think these hexagonal blue ones will be very powerful in solving this disease. Let's go with the hexagonals. I'll give this hexagonal blue one to all my friends. I'll tell them, "This is it, this hexagonal blue one will solve all your problems. My team tried it, and we really liked it, so your team tried it, you'll really like it too." And that's how we run projects. There's certainly no double-blind controlled experiments. Is agile any good? Oh yeah, it is, there's so much excitement, and so much buzz, and everybody seems to think so!
Most if not all software developers will recognize the parallels between their profession and that parable. Why did your team choose C++, or Rails, or F#, or Clojure? There are often some tangible, technical considerations involved in such choices. However, as Ms. Rising covers in the talk, human beings are generally not capable of making "rational" choices, but we are stellar when it comes to rationalizing the choices we have made. So, even our most fundamental decisions – which tools and methods to use – are not made with the rigor that would be demanded of decisions made in an engineering setting. Of course, this is entirely separate from how we go about actually building things using those tools, which can only be characterized as relative chaos. How and why we are able to make such abundantly arbitrary choices is something I addressed in my last post on this topic.
And here is where I appeal to a somewhat more respected authority. Aside from her expertise in the software methodology space, Ms. Rising's credentials are fairly impeccable, apparently having had some significant involvement in the software development process attached to the design of the Boeing 777 airliner. So, I'd say she's in a fairly secure position to be making informed comparisons between engineering, science, and what we do when we build software systems. Just one more data point, really, but a strong one.