I’ve heard this analogy used to describe the software development process and decided to try and find the similarities between the two. In attempting to find those similarities, it is clear that they are not similar (in the spirit of full disclosure, I just finished building a house).
First, software does not require any special permits before a project can begin. We may require a work order, but that is not a permit issued by a governing body or regulatory commission. Software does not require specialized sub-contractors (electrical, foundation and concrete, flooring and carpeting, lighting, plumbing, paining, roofing, finish carpenters, surveying, grading, landscaping, welding, HVAC, etc.). As developers, we may take on different roles during a project, but we all must have some knowledge of each aspect of our craft (database, UI, testing, debugging, etc.). Also, the cost and time of building a house depends on the availability of the materials. All we really need are a text editor and a compiler to get a project started.
Building a house is a tried and true regimented process with a schedule of interdependent events. If you pour the slab before the underground work has been completed, then you are going to have to remove the entire foundation, rebar and all, and start over. You cannot install the roof, before the walls have been framed.
In software, you can choose to start at any point, in any layer, with any class. There is no predefined hard scientific method to follow when writing code. Multiple people can work independently on dependent items and fuse them together later.
Each step in home construction has a procedure. Framing, plumbing, painting, and all of the other crafts involved, have a specific set of standards and procedures that they must follow no matter the size or shape of the house. In fact, if those standards are not rigidly maintained, a building inspector can shutdown the entire project. A code review does not really measure up to that standard.
Software is a profession of problem solving. Sometimes those problems are so complex they takes years to overcome, but we do not build houses. We provide solutions.
A long time ago i read a great article that ran through a scenario where the homeowner changed the house plans on a contractor like user's change requirements on software developers. There was a great example of a really long, narrow and totally unusable living room that resulted from the changes
ReplyDeleteBelow is not the article I was looking for, but it will do. And to make it more depressing, it's a couple months shy of a 10 year anniversary since this article was written:
http://xprogramming.com/classics/houseanalogy/
"You can’t build a decent house incrementally. Therefore XP’s incremental software development cannot work. Houses aren’t software. Software can be flexible and modular in a way that houses are not."