The software industry has modeled itself after building construction in many ways– things like the metaphors and analogies we use to describe things, to the general way we create, communicate, and execute on a detailed plan. Heck, we even call the primary phases of development “Architecture” and “Construction.”
The assumption within the software industry is that the more like building construction we can get, the better off we are, since they design everything up front, their costs and schedules are predictable *and stay close to estimates, and the *customers get exactly what they expect. (We’ve traditionally assumed that the reason we can’t hit this high-water mark like the construction industry is because we’re usually building things we haven’t built before, while on a construction site everyone there has done pretty much the exact same thing a hundred times before.)
It turns out that building construciton is… well… just as fucked up and disfunctional as the software industry.
Check out this excellent blog entry by a software guy that went to a project management class for the building industry to see how they do things… it’s funny how the construction folks reacted to the news that they were idolized by programmers. :)