Frameworks & Governance
TOGAF, Zachman, and C4 Models.
Architectural Frameworks
In my experience, strictly following enterprise frameworks (like doing full TOGAF) is overkill for most modern tech companies. However, the mental models they provide are excellent for ensuring you haven't missed a blind spot.
TOGAF (The Open Group Architecture Framework)
The standard for heavy enterprise arch. The useful part is the ADM (Architecture Development Method) loop, specifically the BDAT layers:
- Business: What are the goals? Processes?
- Data: What are the entities? How do they move?
- Application: What are the systems? Integrations?
- Technology: Hardware, Cloud, Network.
The Takeaway
You don't need the paperwork, but when designing a system, ask: "Does this aligns with the Business? Do I know where the Data lives? Which App owns it? What Tech runs it?"
The Zachman Framework
Think of this as a Periodic Table for enterprise assets. It's a 6x6 matrix intersecting:
- Perspectives: Planner, Owner, Designer, Builder, Subcontractor.
- Questions: What (Data), How (Function), Where (Network), Who (People), When (Time), Why (Motivation).
It enforces completeness. If you can't answer "Who" accesses the data (Security) or "Where" it lives (Infrastructure), the design is incomplete.
The C4 Model
Created by Simon Brown. This is my go-to for visualizing software architecture. It zooms in like Google Maps.
Level 1: Context
The System + Users. Shows the big picture interactions.
Level 2: Containers
Applications, Databases, Microservices. The deployable units.
Level 3: Components
Modules inside a container (e.g., BillingController).
Level 4: Code
Classes and Interfaces. Usually too detailed for diagrams.
Why use C4? UML is too strict. Whiteboard sketches are too vague. C4 provides just enough structure to communicate design without getting bogged down in syntax.
C4 Model: E-Commerce Platform Example
Level 1: Context Diagram
Shows the big picture - your system and how it interacts with users and external systems.
Key Questions Answered:
- Who uses the system? (Customers, Admins, Support)
- What does it do? (Online sales platform)
- What external systems does it integrate with? (Payment, Shipping, etc.)
- How do users interact with it? (Web interface, admin panel)
Level 2: Container Diagram
Breaks down the system into containers (applications, databases, services).
Container Details:
- Web Application: Single-page React application
- API Gateway: Routes requests and handles authentication
- User Service: Manages user accounts and authentication
- Order Service: Handles order processing and workflow
- Product Service: Product catalog and inventory management
- Payment Service: Payment processing and refunds
Level 3: Component Diagram
Zooms into a single container to show its internal components.
Component Responsibilities:
- OrderController: HTTP request handling
- ValidationController: Input validation and sanitization
- OrderManager: Core business logic and orchestration
- PaymentProcessor: Payment workflow management
- InventoryManager: Stock level management
- OrderRepository: Database operations
- PaymentAdapter: External payment gateway integration
Level 4: Code (Optional)
Shows class-level details. Usually skipped unless critical for understanding.
When to Use Level 4:
- Complex algorithms need visualization
- Onboarding new team members
- Critical business logic documentation
- Refactoring discussions
Example Focus:
- Class relationships and dependencies
- Key method signatures
- Design pattern implementations
Practical C4 Guidelines
Best Practices
Start with Context:
- Always begin with Level 1 (Context)
- Get stakeholder agreement on scope
- Identify all users and integrations
Zoom Incrementally:
- Only go deeper when necessary
- Create Level 2 for developers/DevOps
- Create Level 3 for team-specific discussions
- Skip Level 4 unless critical
Consistency Matters:
- Use standard notation and colors
- Include legends and descriptions
- Keep diagrams focused and uncluttered
- Version control your diagrams
Common Pitfalls
Too Much Detail:
- Don't show every component at Level 2
- Avoid including all classes at Level 4
- Skip implementation details
Inconsistent Abstraction:
- Don't mix levels in same diagram
- Maintain clear separation of concerns
- Keep audience in mind
Outdated Documentation:
- Update diagrams when architecture changes
- Treat diagrams as living documents
- Link diagrams to implementation decisions