C4 Diagram Review Checklist¶
Use this checklist when creating or reviewing C4 diagrams to ensure quality and consistency.
Completeness¶
- All key software systems relevant to the scope are shown
- All significant users/actors are represented
- External systems and dependencies are included
- No orphaned elements (every element has at least one relationship)
- System boundary is clearly defined (Levels 2 and 3)
- The diagram has a descriptive title
Clarity¶
- Every element has a meaningful name (not abbreviations or codenames alone)
- Every element has a brief description explaining its responsibility
- Technology choices are labeled on containers and components
- Relationship arrows have verb labels describing the interaction
- Communication protocols/technologies are noted on relationships
- Text is readable at the intended display size
- A legend or key is included (or use
LAYOUT_WITH_LEGEND())
Consistency¶
- Element names are consistent across all diagram levels
- Technology labels match actual implementation
- Color coding follows team conventions (internal vs external)
- Arrow direction consistently represents dependency or data flow
- Naming conventions are applied uniformly (e.g., "Service" suffix, "DB" suffix)
Audience Appropriateness¶
- Level 1 (Context): Understandable by non-technical stakeholders
- Level 2 (Container): Appropriate for technical leads and architects
- Level 3 (Component): Appropriate for developers working on the system
- Level 4 (Code): Only created when it adds value beyond reading the source
- Detail level matches the intended audience -- not too much, not too little
Accuracy¶
- Diagram reflects the current state of the system (or clearly labeled as target/future state)
- No stale elements from previous versions of the architecture
- Data flows match actual runtime behavior
- Deployment boundaries match actual infrastructure
Maintainability¶
- Diagram source is stored in version control (
.pumlfiles preferred) - Diagram is generated from code, not manually drawn (when possible)
- Last-updated date is noted or version-controlled
- Diagram is referenced from relevant documentation (README, wiki, ADR)