Nowadays, software is everywhere. It controls our cars,
it dries our laundry, it sends extroverted billionaires to space, and it even can be used
as a currency. Demand and expectations towards software are rising rapidly.
Software needs to be robust, fast, secure, cheap, easy to develop, reliable and so
on. All of this while the complexity of modern software projects has been steadily increasing.
It is not unusual that software systems consist of thousands of individual classes these days.

The more complex a system, the more important its structure and initial design. Hence, software
architecture is a crucial process when designing a system. Software architecture is the practice of decomposing
a large system into smaller partitions. Software architects design the structure, connections and relations
of a system in regards to the stakeholders' requirements.

This course focuses on both, the structural architecture of modern software systems and the process of
architecting a system.