"good design comes from experience, experience comes from bad design." Fred Brooks Software design is a process whereby the coder uses certain techniques and principles to establish a working blueprint that describes and details a solution for a well-defined problem. The construction of of this so called model is required for development of well-engineered software. Design, in turn should be divided into maybe a preliminary design (ie module design and their interaction with one another) and a more detailed internal module design. All in all, it seems as if excellent software design (and in turn, well-engineered software) is written with the following end goals in mind: ease of use, portability, ease of re-use, efficiency, and time to market.