An architecture is very complicated and involves three types of decisions: how the system is structured as code units, how it is structured as runtime components and interactions, and how it relates to non-software elements. The document discusses several common architectural structures, including decomposition, uses, layered, class/generalization, process, concurrency, shared data/repository, client-server, deployment, implementation, and work assignment structures. It also discusses Kruchten's four views of logical, process, development, and physical.