Software developers often follow architectural and design patterns informally without a deep understanding of the subject. This prevents the delivered software to work optimally and often to meet functional and nonfunctional requirements. The course provides a detailed understanding of software architectures and design pattern and how they should be used by software developers and in the software engineering process.