Definition
- The architecture of a software system is the shape given to that system by those who build it. The form of that shape is in the division of that system into components, the arrangement of those components, and the ways in which those components communicate with each other.
Goals
- leave as many options open as possible, for as long as possible
- minimize lifetime cost of the system and maximize programmer productivity
- support life cycle of the system ()
- makes the system easy to understand, easy to develop, easy to maintain and easy to deploy
- low-level components depend on high-level components (Dependency Inversion Principle)
- reduces impact of change
- trivial but urgent changes at the lowest levels of the system have little to no impact on the higher, more important, levels
- reduces impact of change
- centered on so that can describe the structures supporting those use cases without committing to frameworks/tools/environments
Consists of
- policies
- business rules and procedures
- where the true value of the system lives
- details
Roles
Additional literature
Resource
- 2022-11-07 ◦ GitHub - mehdihadeli/awesome-software-architecture: A curated list of awesome articles, videos, and other resources to learn and practice software architecture, patterns, and principles.
- Also check out awesome-architecture.com
- 2022-11-07 Road Movie Architecture
Books
- 2023-11-06 ◦ mhadidg/software-architecture-books: A comprehensive list of books on Software Architecture
Articles
- 2023-07-12 ◦ How To Design Software Architecture For Startups
- 2023-03-27 ◦ Architects, Anti-Patterns, and Organizational Fuckery – charity.wtf