It has been built before

A few days ago I was browsing through Jeff Atwoods “Coding Horror” again. And this time he missed the point in a very profound way. To be fair, he falls for an all too common misconception: The belief that software engineering is very special and unlike every other kind of engineering.

Since the misconception is so common, he’s easily able to back it up by quotes from some Sam Guckenheimer of Addison-Wesley fame. But that doesn’t make it any more true.

The simple fact is that software engineering is very much like other engineering disciplines. There’s nothing inherently special about it.


6 thoughts on “It has been built before

  1. I think that there is one major thing, that is really different to other engineering disciplines: Just trying things out is cheap (at least at first sight…). If, for example, you have to build an expensive prototype entirely made of iron first to find out that your idea is bullshit, you don’t get the change to do this often, I guess 😉 But in software, it is only a few lines of code, that can be erased easily if it doesn’t work out. Unfortunately, most of the time this bullshit-ideas don’t get erased, so they keep in the product, and lead to costs comparable to the iron-prototype mentioned above – and then computer science is a normal engineering discpline again 😉


  2. Your comment is only partly true. Software prototypes don’t consume any expensive materials, but the labour is as expensive as in other fields of engineering – if not more so.


  3. Maybe the software you design is always mundane, requiring no innovation, but I can assure you that’s not true for everyone. When you’ve progressed a bit in your career, you’ll find that you’re often called upon to develop novel algorithms. For example, how can a storage device index every disk write as it comes in to allow subsequent recovery to any point in time, and do so faster than the writes are coming in? How can a hundred-port router look up IP addresses, flow state, and QoS settings for an incoming packet and put it on the correct output queue in the very short time before the next packet arrives? These and many other problems require serious innovation, not just the application of well understood rules and techniques. Yes, there are still rules that apply, but it’s not like “designing” a new kitchen. It’s more like designing a new *kind* of kitchen, with new components and materials that haven’t been used before.

    If you often find that what you work on generally has been built before, my condolences on having a stagnant career. Not all of us do, though.


  4. Let’s just say this: My point wasn’t to show that software engineering is boring and mundane. It is certainly not. However, it doesn’t exist in a different reality than other engineering disciplines. Which is a belief that seems to be quite common among software people.

    Let it be kitchens, bridges or software: There’s a lot of mundane applications which are pretty much standard fare. And then there are some truly amazing feats, which need new solutions and lots of innovations. But this is the same in virtually all fields. Try building a kilometre-long bridge over unstable ground. I think you’ll find that it requires as much innovation as making the router packets to go out on time. Just that with software, you have multiple attempts at getting it right.

    That’s why I don’t subscribe to the “different than thou” view of software engineering. Yes, there are things that are special about software, but then again there’s something special about other disciplines, too.

    Another thing about tech people I always muse about: Many will measure innovation by technical excellence only. They’ll still cry over betamax and Video2000 because those systems were “technically superior”.

    But take flickr or eBay, for example: Neither of those services pushed the envelope in a technological sense. But they were still highly innovative in the sense that they enabled people to do things in new ways. And in my book, that’s the most interesting point about creating software: Not to push the possibilities of the technology, but the possibilities of people to use it.

    And though those two are often connected, they are not the same.


Comments are closed.

Blog at

Up ↑

%d bloggers like this: