This document discusses software design. It defines software design as a creative problem-solving activity that determines how to implement user requirements. The design process involves gathering requirements, analyzing them, conceiving a high-level design, refining the design, and documenting it. Good design principles include modularity, low coupling between modules, and high cohesion within modules. The document discusses top-down, bottom-up, and hybrid approaches to design and presents various design notations like structure charts and data flow diagrams.