 <p>This is one of my favorite metaphors to describe software engineering:</p> <ul> <li><p>Imagine you're building a house. You'd have to have plans for the house, and decide what materials to build, and how to organize the building process. (Most people have had work done on their house so they have some rough concept of what's involved in this.)</p></li> <li><p>Now imagine that you're not building a house, you're building a skyscraper with 100 floors of offices. How would the plans be different than the plans for the house? How would the materials need to be different? What factors would need to be carefully considered?</p></li> <li><p>Now imagine that you're not building the skyscraper yourself, you're building a robot that will fly to the Moon and build the skyscraper there. Now how would the plans have to be different? How would the materials need to be different? Do you see why the ramifications of every decision would need to be carefully thought through?</p></li> </ul> <p>You could replace "skyscraper" with "freight management system" if you wanted, and I think the metaphor would still be useful.</p>