This course covers the fundamental design principles and strategies for software architecture and design. Architectural styles, quality attributes notations and documents, reference architecture, domain-specific architecture in architecture process and pattern-oriented design, component-oriented design, aspect-oriented design, and interface design in detail design process are discussed. Software evolution, flexibility, Middleware architectures such as COM and .NET are also discussed. An introduction to SOA is also presented. An overview of design issues in user interfaces and the concepts of reusability, portability, and robustness in the design are also given in the course. Students participate in a group project on software design and architecture and design tools.