The C4 model by Simon Brown describes software architecture as four levels of zoom, like a map. Each level is for a different audience.
| Level |
Shows |
Audience |
| 1. System Context |
Your system as one box, plus users and external systems |
Everyone, including non-technical people |
| 2. Container |
Deployable/runnable units: web app, API, database, queue |
Developers, ops, architects |
| 3. Component |
The main building blocks inside one container |
Developers |
| 4. Code |
Classes, interfaces (often UML), usually generated |
Developers, rarely needed |
Most teams get 90% of the value from levels 1 and 2. Draw those first.
graph TB
user([Customer]) -->|Places orders| shop[Web Shop<br/>Our system]
shop -->|Sends emails via| mail[Email Service<br/>External]
shop -->|Takes payments via| pay[Payment Provider<br/>External]
graph TB
user([Customer]) --> web[Blazor Web App<br/>.NET]
web --> api[Orders API<br/>ASP.NET Core]
api --> db[(PostgreSQL)]
api --> queue[[Message Queue]]
queue --> worker[Email Worker<br/>.NET]
- Every box gets a name, type/technology and a one-line responsibility
- Every arrow gets a label ("reads orders from", "publishes events to")
- Add a legend, since notation is free but must be explained
- C4 complements UML; use UML sequence or deployment diagrams where they fit better