Structurizr Model Checklist¶
Quick reference for C4 model completeness and quality.
Workspace Setup¶
- Workspace has meaningful name
- Workspace has description
-
!identifiers hierarchicalfor clarity - File structure appropriate for size
Level 1: System Context¶
Elements¶
- Main software system defined
- All user types (people) identified
- All external systems identified
- Each element has a description
Relationships¶
- User-to-system relationships defined
- System-to-external relationships defined
- Each relationship has a description
- Relationship direction is correct
View¶
- System context view exists
- All elements visible
- Layout is readable
- Description provided
Level 2: Container¶
Elements¶
- All major containers identified
- Container types are clear (web, api, db, etc.)
- Technologies specified
- Appropriate tags applied
- Each container has description
Container Types Checklist¶
| Type | Identified | Named | Tagged |
|---|---|---|---|
| Web Application | |||
| Mobile App | |||
| API/Backend | |||
| Database | |||
| Cache | |||
| Message Queue | |||
| Worker/Jobs | |||
| File Storage |
Relationships¶
- User-to-container relationships
- Container-to-container relationships
- Container-to-external relationships
- Technologies/protocols specified
- Descriptions are meaningful
View¶
- Container view exists
- Shows all containers
- External systems shown where relevant
- Layout is readable
Level 3: Component (if applicable)¶
Selection¶
- Containers needing decomposition identified
- Level of detail appropriate
Elements¶
- All significant components identified
- Components grouped by responsibility
- Technologies specified
- Each has description
Component Categories¶
| Category | Examples | Covered |
|---|---|---|
| Controllers/Handlers | API endpoints | |
| Services | Business logic | |
| Repositories | Data access | |
| Clients | External integrations | |
| Utilities | Cross-cutting |
Relationships¶
- Component-to-component relationships
- Component-to-external relationships
- Data flow is clear
View¶
- Component view(s) exist
- Each container with components has view
- Layout is readable
Relationships Quality¶
Completeness¶
- No orphan elements (unconnected)
- All interactions represented
- Bidirectional flows shown (if applicable)
Clarity¶
- Descriptions answer "what does A do to B?"
- Technology/protocol specified
- Avoid vague descriptions ("uses", "connects")
Examples of Good vs Bad¶
| Bad | Good |
|---|---|
user -> api |
user -> api "Submits orders via" "HTTPS" |
api -> db "uses" |
api -> db "Persists order data to" "SQL" |
service -> queue |
service -> queue "Publishes events to" "AMQP" |
Views Quality¶
Coverage¶
- System Context view
- Container view
- Component view (for complex containers)
- Dynamic views (for key flows)
- Deployment views (if infrastructure matters)
Layout¶
-
autoLayoutor manual positioning - Direction appropriate (tb, lr, etc.)
- No overlapping elements
- Readable at expected zoom
Descriptions¶
- Each view has description
- Description explains purpose
- Target audience clear
Styles Quality¶
Element Styles¶
- People styled (Person shape)
- Software systems styled
- Containers styled
- Components styled (if used)
- External systems distinguishable
- Infrastructure shapes appropriate
- Database: Cylinder
- Queue: Pipe
- Webapp: WebBrowser
- Mobile: MobileDevice
Color Consistency¶
- Color scheme consistent
- External systems different color
- Color conveys meaning (optional)
Relationship Styles¶
- Async relationships distinguishable (optional)
- Different protocols styled (optional)
Naming Conventions¶
Elements¶
| Type | Convention | Example |
|---|---|---|
| Person | Role name | "Customer", "Admin" |
| System | Product name | "Order System" |
| Container | Type + Purpose | "Web Application", "Order API" |
| Component | Technical name | "OrderController", "PaymentService" |
Identifiers¶
| Type | Convention | Example |
|---|---|---|
| Person | camelCase | customer, adminUser |
| System | camelCase | orderSystem |
| Container | camelCase | webApp, orderApi |
| Component | camelCase | orderController |
Consistency Check¶
- All names follow convention
- No mixed conventions
- Identifiers match names (where sensible)
Tags¶
Standard Tags Applied¶
-
databasefor data stores -
queuefor message queues -
cachefor caching systems -
webappfor web applications -
mobilefor mobile apps -
Externalfor external systems
Custom Tags (optional)¶
- Team ownership tags
- Criticality tags
- Security tags
Validation¶
Syntax¶
- No syntax errors
- No warnings
- All references resolve
Semantic¶
- Model matches reality
- No outdated elements
- No missing elements
- Relationships are current
Documentation¶
In Workspace¶
- Workspace description
- View descriptions
- Complex relationships explained
External¶
- README for the workspace
- How to run locally
- How to update
- Link to rendered diagrams
Quick Quality Score¶
| Criterion | Score (0-2) |
|---|---|
| All elements have descriptions | |
| All relationships have descriptions | |
| Technologies specified | |
| Views exist for each level | |
| Styles applied consistently | |
| No orphan elements | |
| Naming is consistent | |
| Model matches current state | |
| Total | /16 |
Rating: - 14-16: Excellent - 11-13: Good - 8-10: Adequate - Below 8: Needs improvement
Before Commit Checklist¶
- Validate with CLI
- Preview locally
- All new elements have descriptions
- All new relationships have descriptions
- Views updated if needed
- Styles cover new elements