Architecture Design
When to Use
- Starting a new product or major feature that needs system design
- Choosing between monolith, modular monolith, microservices, or event-driven patterns
- Selecting a database (SQL vs NoSQL vs specialized) for a new project
- Analyzing dependencies for circular references, coupling issues, or outdated packages
- Creating architecture diagrams (Mermaid, PlantUML, ASCII) for documentation or review
- Writing Architecture Decision Records (ADRs) for technical choices
- Evaluating scalability bottlenecks or planning capacity
Context Required
From startup-context: product description, tech stack, current state (prototype/beta/scaling), team size, expected scale (users, requests/sec, data volume). If missing, ask:
- What does this system need to do? (core use cases)
- What scale are you targeting? (users, requests/sec, data size)
- What is your team size and backend experience level?
- Are there hard constraints? (compliance, latency, budget, existing infra)
Workflow
- Gather requirements — Identify functional requirements (use cases), non-functional requirements (latency, throughput, availability, consistency), and constraints (budget, team size, compliance).
- Run architecture assessment — Analyze the existing project structure to detect current patterns (MVC, layered, hexagonal, microservices indicators), code organization issues (god classes, mixed concerns), and layer violations.
- Analyze dependencies — Examine the dependency tree for circular dependencies, coupling scores, and outdated packages across npm, Python, Go, or Rust projects.
- Select architecture pattern — Use the decision workflows below to match team size, deployment needs, and data boundaries to the right pattern. For most early-stage startups, recommend modular monolith.
- Select database — Match data characteristics, scale requirements, and consistency needs to the appropriate database technology using the selection workflow below.
- Design data model — Produce an ER diagram in Mermaid. Define entity ownership: which module/service writes, others read via API.
- Define API contracts — Specify key endpoints with method, path, request/response shapes, and error codes. Version from day one.
- Generate architecture diagram — Produce a Mermaid C4 or flowchart diagram showing components, data stores, external services, and communication patterns.
- Write ADRs — Document key decisions using the ADR format below.
- Identify risks — Call out single points of failure, data consistency risks, and scaling bottlenecks with mitigations.
Output Format
Deliver a structured architecture document with these sections:
- Requirements Summary — Functional, non-functional, and constraints
- Architecture Assessment — Detected pattern with confidence, issues, recommendations
- System Diagram — Mermaid C4 or flowchart (component, layer, or deployment view)
- Domain Model — Mermaid ER diagram with entity ownership
- Module Boundaries — Table: Module, Responsibility, Owns Data, Exposes API
- API Contracts — Key endpoints with method, path, request/response shapes
- ADRs — Architecture Decision Records for key choices
- Dependency Analysis — Total deps, coupling score, circular deps, outdated packages
- Risks & Mitigations — Table: Risk, Impact, Likelihood, Mitigation
Frameworks & Best Practices
Architecture Pattern Selection
| Team Size |
Recommended Starting Point |
| 1-3 developers |
Modular monolith |
| 4-10 developers |
Modular monolith or service-oriented |
| 10+ developers |
Consider microservices |
| Requirement |
Recommended Pattern |
| Rapid MVP development |
Modular Monolith |
| Independent team deployment |
Microservices |
| Complex domain logic |
Domain-Driven Design |
| High read/write ratio difference |
CQRS |
| Audit trail required |
Event Sourcing |
| Third-party integrations |
Hexagonal / Ports & Adapters |
Default for early startups: Modular monolith with clear module boundaries that can be extracted later. Microservices add operational overhead that kills small teams.
Monolith vs Microservices Checklist
Choose Monolith when: team is small (<10), domain boundaries are unclear, rapid iteration is the priority, shared database is acceptable.
Choose Microservices when: teams can own services end-to-end, independent deployment is critical, different scaling requirements per component, domain boundaries are well understood.
Hybrid approach: Start monolith. Extract a service only when a module has significantly different scaling needs, a team needs independent deployment, or technology constraints require separation.
Database Selection
Structured data with relationships or ACID needs points to SQL. Flexible/evolving schema or document-oriented data points to NoSQL. Quick reference: PostgreSQL (default for most apps), MongoDB (document store), Redis (caching/sessions), DynamoDB (serverless auto-scaling), TimescaleDB (time-series), CockroachDB/Spanner (global distribution).
ADR Format
Use five fields: Status (Proposed/Accepted/Deprecated/Superseded), Context (what prompted the decision), Decision (what was chosen and why), Consequences (trade-offs and remaining risks), Alternatives considered (what else was evaluated and why it lost).
Key Design Principles
- Every entity has a clear owner (one module writes, others read via API)
- Use UUIDs for primary keys if multi-service or future extraction is likely
- Version APIs from day one (
/v1/resource); paginate all list endpoints (cursor-based preferred)
- Consistent error shapes:
{ "error": { "code": "...", "message": "..." } }
- Design write operations for idempotency (idempotency keys)
- Synchronous calls (HTTP/gRPC) for queries needing immediate confirmation; async events for notifications, analytics, and cross-service data sync
- Avoid distributed transactions — use sagas or eventual consistency
Related Skills
tech-stack-eval — Chain when choosing specific technologies for the architecture
security-review — Chain to review the architecture for threat vectors before implementation
code-review — Chain after implementation to verify code matches architectural intent
Examples
Prompt: "I'm building a SaaS project management tool. 3 engineers. How should I architect it?"
Good output snippet:
Given your team of 3 and early stage, I recommend a modular monolith.
Domain modules:
1. Auth Module — user accounts, roles, sessions
2. Projects Module — workspaces, projects, permissions
3. Tasks Module — tasks, assignments, comments, activity log
4. Notifications Module — email digests, in-app notifications
Each module gets its own DB schema (auth.*, projects.*) and communicates
through internal function calls with typed interfaces — not HTTP. This
gives you service-like boundaries without deployment complexity.
Architecture Assessment:
Detected pattern: Layered Architecture (confidence: 85%)
✓ controllers/ - Presentation layer
✓ services/ - Business logic layer
✓ repositories/ - Data access layer
Prompt: "Should we use WebSockets or SSE for real-time collaboration?"
Good output snippet:
## ADR-001: Use WebSockets for Real-Time Collaboration
- Status: Proposed
- Context: Document editor needs sub-200ms latency for cursor positions
and concurrent edits across 2-50 users per document.
- Decision: WebSockets via Socket.io with Redis pub/sub for horizontal
scaling. SSE only supports server-to-client; we need bidirectional
communication for operational transforms.
- Consequences: Adds WebSocket infrastructure (sticky sessions or Redis
adapter), ~2KB memory per connection. Team needs OT/CRDT knowledge.
- Alternatives: SSE + POST (simpler but higher edit latency),
Firebase Realtime DB (vendor lock-in, cost at scale).
1---2name: architecture-design3description: When the user needs to design or evaluate system architecture — service boundaries, data models, API contracts, infrastructure topology, database selection, or dependency analysis. Also activate for "design the system", "how should I architect this", "monolith vs microservices", or architecture decision records.4---5
6# Architecture Design
7
8## When to Use
9- Starting a new product or major feature that needs system design
10- Choosing between monolith, modular monolith, microservices, or event-driven patterns
11- Selecting a database (SQL vs NoSQL vs specialized) for a new project
12- Analyzing dependencies for circular references, coupling issues, or outdated packages
13- Creating architecture diagrams (Mermaid, PlantUML, ASCII) for documentation or review
14- Writing Architecture Decision Records (ADRs) for technical choices
15- Evaluating scalability bottlenecks or planning capacity
16
17## Context Required
18From `startup-context`: product description, tech stack, current state (prototype/beta/scaling), team size, expected scale (users, requests/sec, data volume). If missing, ask:
19- What does this system need to do? (core use cases)
20- What scale are you targeting? (users, requests/sec, data size)
21- What is your team size and backend experience level?
22- Are there hard constraints? (compliance, latency, budget, existing infra)
23
24## Workflow
251. **Gather requirements** — Identify functional requirements (use cases), non-functional requirements (latency, throughput, availability, consistency), and constraints (budget, team size, compliance).
262. **Run architecture assessment** — Analyze the existing project structure to detect current patterns (MVC, layered, hexagonal, microservices indicators), code organization issues (god classes, mixed concerns), and layer violations.
273. **Analyze dependencies** — Examine the dependency tree for circular dependencies, coupling scores, and outdated packages across npm, Python, Go, or Rust projects.
284. **Select architecture pattern** — Use the decision workflows below to match team size, deployment needs, and data boundaries to the right pattern. For most early-stage startups, recommend modular monolith.
295. **Select database** — Match data characteristics, scale requirements, and consistency needs to the appropriate database technology using the selection workflow below.
306. **Design data model** — Produce an ER diagram in Mermaid. Define entity ownership: which module/service writes, others read via API.
317. **Define API contracts** — Specify key endpoints with method, path, request/response shapes, and error codes. Version from day one.
328. **Generate architecture diagram** — Produce a Mermaid C4 or flowchart diagram showing components, data stores, external services, and communication patterns.
339. **Write ADRs** — Document key decisions using the ADR format below.
3410. **Identify risks** — Call out single points of failure, data consistency risks, and scaling bottlenecks with mitigations.
35
36## Output Format
37Deliver a structured architecture document with these sections:
38- **Requirements Summary** — Functional, non-functional, and constraints
39- **Architecture Assessment** — Detected pattern with confidence, issues, recommendations
40- **System Diagram** — Mermaid C4 or flowchart (component, layer, or deployment view)
41- **Domain Model** — Mermaid ER diagram with entity ownership
42- **Module Boundaries** — Table: Module, Responsibility, Owns Data, Exposes API
43- **API Contracts** — Key endpoints with method, path, request/response shapes
44- **ADRs** — Architecture Decision Records for key choices
45- **Dependency Analysis** — Total deps, coupling score, circular deps, outdated packages
46- **Risks & Mitigations** — Table: Risk, Impact, Likelihood, Mitigation
47
48## Frameworks & Best Practices
49
50### Architecture Pattern Selection
51
52| Team Size | Recommended Starting Point |
53|-----------|---------------------------|
54| 1-3 developers | Modular monolith |
55| 4-10 developers | Modular monolith or service-oriented |
56| 10+ developers | Consider microservices |
57
58| Requirement | Recommended Pattern |
59|-------------|-------------------|
60| Rapid MVP development | Modular Monolith |
61| Independent team deployment | Microservices |
62| Complex domain logic | Domain-Driven Design |
63| High read/write ratio difference | CQRS |
64| Audit trail required | Event Sourcing |
65| Third-party integrations | Hexagonal / Ports & Adapters |
66
67**Default for early startups:** Modular monolith with clear module boundaries that can be extracted later. Microservices add operational overhead that kills small teams.
68
69### Monolith vs Microservices Checklist
70
71**Choose Monolith when:** team is small (<10), domain boundaries are unclear, rapid iteration is the priority, shared database is acceptable.
72
73**Choose Microservices when:** teams can own services end-to-end, independent deployment is critical, different scaling requirements per component, domain boundaries are well understood.
74
75**Hybrid approach:** Start monolith. Extract a service only when a module has significantly different scaling needs, a team needs independent deployment, or technology constraints require separation.
76
77### Database Selection
78Structured data with relationships or ACID needs points to SQL. Flexible/evolving schema or document-oriented data points to NoSQL. Quick reference: PostgreSQL (default for most apps), MongoDB (document store), Redis (caching/sessions), DynamoDB (serverless auto-scaling), TimescaleDB (time-series), CockroachDB/Spanner (global distribution).
79
80### ADR Format
81Use five fields: **Status** (Proposed/Accepted/Deprecated/Superseded), **Context** (what prompted the decision), **Decision** (what was chosen and why), **Consequences** (trade-offs and remaining risks), **Alternatives considered** (what else was evaluated and why it lost).
82
83### Key Design Principles
84- Every entity has a clear owner (one module writes, others read via API)
85- Use UUIDs for primary keys if multi-service or future extraction is likely
86- Version APIs from day one (`/v1/resource`); paginate all list endpoints (cursor-based preferred)
87- Consistent error shapes: `{ "error": { "code": "...", "message": "..." } }`
88- Design write operations for idempotency (idempotency keys)
89- Synchronous calls (HTTP/gRPC) for queries needing immediate confirmation; async events for notifications, analytics, and cross-service data sync
90- Avoid distributed transactions — use sagas or eventual consistency
91
92## Related Skills
93- `tech-stack-eval` — Chain when choosing specific technologies for the architecture
94- `security-review` — Chain to review the architecture for threat vectors before implementation
95- `code-review` — Chain after implementation to verify code matches architectural intent
96
97## Examples
98
99**Prompt:** "I'm building a SaaS project management tool. 3 engineers. How should I architect it?"
100
101**Good output snippet:**
102```
103Given your team of 3 and early stage, I recommend a modular monolith.
104Domain modules:
105
1061. Auth Module — user accounts, roles, sessions
1072. Projects Module — workspaces, projects, permissions
1083. Tasks Module — tasks, assignments, comments, activity log
1094. Notifications Module — email digests, in-app notifications
110
111Each module gets its own DB schema (auth.*, projects.*) and communicates
112through internal function calls with typed interfaces — not HTTP. This
113gives you service-like boundaries without deployment complexity.
114
115Architecture Assessment:
116 Detected pattern: Layered Architecture (confidence: 85%)
117 ✓ controllers/ - Presentation layer
118 ✓ services/ - Business logic layer
119 ✓ repositories/ - Data access layer
120```
121
122**Prompt:** "Should we use WebSockets or SSE for real-time collaboration?"
123
124**Good output snippet:**
125```
126## ADR-001: Use WebSockets for Real-Time Collaboration
127- Status: Proposed
128- Context: Document editor needs sub-200ms latency for cursor positions
129 and concurrent edits across 2-50 users per document.
130- Decision: WebSockets via Socket.io with Redis pub/sub for horizontal
131 scaling. SSE only supports server-to-client; we need bidirectional
132 communication for operational transforms.
133- Consequences: Adds WebSocket infrastructure (sticky sessions or Redis
134 adapter), ~2KB memory per connection. Team needs OT/CRDT knowledge.
135- Alternatives: SSE + POST (simpler but higher edit latency),
136 Firebase Realtime DB (vendor lock-in, cost at scale).
137```