A software design creates a model of the software product that will be built. Designers must consider alternative designs and choose elements that best match requirements. The design model can be traced to customer requirements and assessed for quality. During design, software requirements are transformed into detailed design models describing data structures, architecture, interfaces, and components needed to implement the system. Each design is reviewed for quality before moving to the next development phase.