• I've helped build a few houses (my parents', sister's, uncle's, and a few others), as well as building several decks and what-not. The biggest difference I've seen is that once the plans are laid for a house, the only allowable changes are generally aesthetic. You can determine during the building whether you want to square off corners of the roof or just leave the simpler angle, but changing the entire angle of the roof is just far too costly.

    In software, some major architecture changes may not be all that costly, though many often do result in increased cost to someone. Also, most people have seen enough houses to know what is possible and what they want, whereas in software, so many things are possible, including what has not yet been seen, that nailing down a final solution at the get-go is often difficult.

    As with house construction, however, as a developer I would love if clients would take a more staged approach to building software. Instead of trying to add things into the foundation-laying stage, just develop further "remodels" or "additions" for later, when these can really be well designed. Of course, the difficulty here is that you now have to "wire" the application to be able to be easily upgradeable to include outdoor speakers and a deck when such things haven't been thought of before. In the end, some things have to be broken down in order to move forward, but at least you can plan that better with a solid construction and not worry about the whole thing crashing to the ground.