Tuesday, March 22, 2011

Does Construction metaphor harm Software Development?


For some time already I was thinking to myself, that construction metaphor, applied to software development field so frequently, doesn’t serve its best purpose. We design and build our software, and we even have Architects in our projects. You can often hear people referring to construction experience, saying “You wouldn’t start building your house from the roof, wouldn’t you?” or “How would you build a house without an architect?”

It seems to make a good sense to refer to Google, before writing your first blog post. Not at all surprising that my dumbest web search quickly ended up in me reading an article, criticizing the famous “Code Complete” book by Steve McConnell for exact same reason: Software Development isn’t like Construction.

To me the cornerstone difference is the building process. In construction, building means, roughly speaking, putting bricks together. Well, also digging the basement and assembling concrete panels together, but all that doesn’t really matter. What matters is, that this process takes a considerable amount of time and effort. And, having a wild assumption that the engineers did not screw up the blueprints, the building process is supposed to happen only once. That is when your house is actually complete -- when you have built it!

Now, what’s the analogy for this process in software development? I wouldn’t say that it is the actual coding. Because this is more similar to what construction engineers do -- design blueprints, according to which the physical thing is built. As I see it, the building process in construction corresponds to compilation and deployment processes in software development. That’s the thing your build script usually does, isn’t it? :) Your code together with the build scripts are your specs and blueprints, which make the actual building happen.

But there is one significant difference between building a house and building your software project. Compilation and deployment do not take as much time, as putting the bricks together on a construction site. It is very much automated and doesn’t take as much effort at all. And it’s repeatable. Building your software is so easy compared to construction, that you even do it frequently. Frankly, it’s the fastest way to verify, what exactly you just did. And hey, most likely your software is not complete after the build process.

In fact, I don’t even know when that point is exactly. When is your software complete? There’s always room for adding configurable and resizable windows to your software walls, and all kinds of other stuff. The smells you get from applying the construction metaphor to software development are something like:
  • the famous “If it works, don’t touch it!” engineering principle;
  • the widely used Feature Freeze concept.

    Software Development is not like Construction. You deal with abstractions, not concrete blocks. You change your thinking and even the idea of the entire project during the time it’s being developed. The thing you actually build is Knowledge. Let’s just not drag thousands of years of construction experience into the software industry. Wild idea -- maybe it should happen vice-versa even? :)

    .

    4 comments:

    1. Yep, construction area in general isn't the best metaphor for the software development.

      But wait, there is project design (PD) in the construction process. This will make those two very different areas very much alike.

      Architect role in IT is not the same as Architect in PD. Architect role in PD is like graphic designer and UI engineer combined together.

      ReplyDelete
    2. As a retired civil engineer..:)

      Let us say, there is abysm between building design and building construction, and it is as seething and impenetrable as the abysm between the architectural intention and the comparatively down-to-earth brainchild of an engineer. Who does let his thoughts flow? Who has to deal with physics? The man in white helmet depends on the supply of building materials. Architect or civil engineer is not supposed to deal just with concrete or stone blocks of certain size, the foreman is.

      The metaphor is too cute to be ruined. Ok, the building is completed. Does it mean, that the building design project is perfect? Of course it doesn't. We are just "not touching it until it works". Or, let us say, until it won't smell like additional income or some kind of penalty danger.

      A human has drawn an entire universe on his blueprints, but it is still between two tokens.

      ReplyDelete
    3. Nice post you can also visit our website that provides estimate template for home building etc.

      ReplyDelete
    4. You can also visit our website that provide a construction software website

      http://sketchup-ur-space.com/

      ReplyDelete