Sunday, February 1, 2004

The House Construction Fallacy

Brian talks some more about the evolution of MVC and compares it to building a house... My $0.02, eventually computer programming will be as mature as physical construction, but we have a while... [simplegeek]

I often see this analogy made: writing software should be more like building a house. You make a plan, you hand off the plan, someone else implements the plan…and voila! There are, however, a number of problems with this argument.

1)      It’s an analogy. It’s a common fallacy that analogies prove anything. A being like B in one respect (writing software is a constructive act) does not imply that A is like B in any other respect (separating duties between architects and contractors in software development is a good model). As humans, though, we love to pattern-match even when it’s completely inappropriate, therefore, analogies are one of our favorite tools.

2)      If you’ve been to my house, you know that quality does not necessarily arise from this particular arrangement. Crappy work is par for the course in many home construction jobs. And watch TLC for an hour or two and you're likely to see some home improvement show where the carpenter misunderstands the designer, and puts a window where a door should be. Or gets a blueprint that positions a hot tub over an unreinforced floor.

3)      Writing software is not like building a house. It’s more like building a house factory: the program you write is actually a blueprint itself. The blueprint is executed by a computer to produce the artifact itself, i.e. the running instance of the program. This is unlike just about any other industry.

4)      Materials in software change on a more frequent basis than they do in construction. I don’t know what the Moore’s Law is for home construction, but I bet it’s not exponential on an 18 month basis.

Now all this is not to say that discipline is not needed. Obviously, it is. I’m just tired of seeing this particular, overdone analogy. No offense to Chris or Brian - this post is targeted at the industry as a whole.

1 comment:

  1. Agreed, The idea that one can "architect" a system without understanding how to implement, and that one can implement without the understanding or have the ability to architect is a foolish notion. None-the-less, the check writers would like to see programming as a trade, and then have the software designers strictly as the engineers. It doesn't work, and when attempted to use this method produces ugly or unusable software. It is start-finish job, that the designers must see through to the end.