The software architecture defines the structure and interactions of software modules. This course provides a working knowledge of the terms, principles and methods of software architecture and module design. It explains the constraints on the design and the properties of capacity, response time, and consistency. The "4+1" architecture model is taught with architectural styles, interface isolation, decoupling, reuse, agile design with software patterns, data structures, queuing effects, design simplification and refactoring. The non-functional requirements of reliability, performance and power consumption, component based design and good industry practices for documenting and managing the architectural process are taught.