This document discusses software design principles and activities. It notes that requirements analysis should minimize design assumptions while ensuring consistency with technology. Analysis and design are interwoven. Design models refine analysis models with more implementation details. Design engineering starts with data/class design and includes architectural, interface, and component level design. The design must implement requirements and accommodate implicit needs while being understandable. A good design exhibits recognizable architecture and patterns, modularity, and distinct data, architecture, interface and component representations.