|
| 1 | +logseq-entity:: [[Logseq/Entity/concept]] |
| 2 | +alias:: [[Software Architecture]], [[Software/Architecture]] |
| 3 | +see-also:: [[C4]], [[Architecture/Decision/Record]], [[Structurizr]] |
| 4 | + |
| 5 | +- # Software architecture |
| 6 | + - ## Overview |
| 7 | + - **Software architecture** names the **major structures** of a software system—the **parts**, their **responsibilities**, and the **rules** governing how they relate—so that the system stays **understandable**, **evolvable**, and **fit for its quality goals** (performance, security, operability, cost, etc.). |
| 8 | + - It is not only **diagrams**; it is the set of **decisions** that are costly to reverse plus the **shared mental model** a team uses when changing the system. |
| 9 | + - ## Context |
| 10 | + - Sits between **product intent** and **implementation detail**: narrower than “everything about the system,” broader than a single module or framework choice. |
| 11 | + - Overlaps with **design** and **engineering leadership**; in many organisations, “architecture” highlights **cross-cutting** or **long-lived** choices (integration, data ownership, deployment shape, failure modes). |
| 12 | + - Common **views** and notations include the **[[C4]]** model, ADRs (**[[Architecture/Decision/Record]]**), and architecture-as-code tools such as **[[Structurizr]]**—each answers different audiences and lifecycles. |
| 13 | + - ## Key principles |
| 14 | + - **Stakeholder fit** — Architecture is **good** only relative to stated **drivers** (latency, compliance, team topology, time-to-market); there is no universal “best” shape. |
| 15 | + - **Constraints and trade-offs** — Prefer explicit **trade-off** language over buzzwords; every important gain usually costs something elsewhere. |
| 16 | + - **Integrity over time** — Guard **boundaries**, **interfaces**, and **invariants** so incremental work does not silently erode the model. |
| 17 | + - ## Mechanism |
| 18 | + - Practitioners capture architecture through **models** (structural, deployment, runtime), **records** (ADRs, RFCs), **reviews**, and **linting or validation** in code when possible. |
| 19 | + - **Refactoring** and **strangling** legacy areas are architecture work as much as greenfield diagrams. |
| 20 | + - ## Examples |
| 21 | + - Choosing **sync vs async** integration between bounded areas; defining **service** or **module** boundaries aligned with team ownership. |
| 22 | + - Publishing a **container-level** diagram for onboarding and incident response; using **C4** context + container views as the default communication set. |
| 23 | + - ## Misconceptions |
| 24 | + - “**Architecture = ivory tower before coding**” — **Often false**; healthy architecture is **continuously** refined as the system and risks become visible. |
| 25 | + - “**One UML diagram is enough**” — **Usually insufficient**; different stakeholders need **different abstractions** (see **[[C4/Diagram]]** for a structured split). |
| 26 | + - “**Microservices = good architecture**” — **Oversimplified**; distribution is a **cost** you pay for specific scaling or organisational goals, not a quality in itself. |
0 commit comments