A software design is a plan or a blueprint for building a software program. It is a high-level representation of the structure, behavior, and functionality of the software that guides the coding process. A software design typically includes a number of different components, such as: