From cc10x
Designs greenfield system architecture by mapping functionality flows, defining component boundaries, and planning APIs and observability. Best for new multi-component or integration-heavy projects.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cc10x:architectureThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Design systems from scratch: map flows, then draw components. For retrofitting existing code, use `codebase-hygiene` instead.
Design systems from scratch: map flows, then draw components. For retrofitting existing code, use codebase-hygiene instead.
| Request type | Use |
|---|---|
| New system/major feature (greenfield) | This skill |
| Existing code with shallow modules | codebase-hygiene |
| Multi-component integration | This skill |
| Single-component refactor | planning + building |
Map every user flow end-to-end before designing any component:
Flow: [name]
1. [step] → [what the system does] → [what the user sees]
2. [step] → [what the system does] → [what the user sees]
Error paths:
- [error] → [system response] → [user sees]
Every flow must have its error paths mapped. Unmapped error paths become unmapped components.
Translate flows into components:
For each component:
Before finalizing any component boundary, apply the Deletion Test and Two-Adapter Rule (defined below under Architecture Vocabulary). A component that fails the deletion test (complexity vanishes if deleted) or fails the two-adapter rule (only one caller/adapter exists) is not a real boundary yet — fold it into its caller or defer the split until a second concrete need appears.
Box diagram: your system + external systems it talks to. One paragraph per external system: what it provides, what you depend on.
Internal boxes: web app, API, database, queue, worker. Arrows show data flow. One paragraph per container: technology choice, responsibility.
Inside each container: the modules/classes. Arrows show call relationships. This is what the builder will implement.
Use LSP to understand existing architecture before designing new:
Design APIs from the flow, not from the data model:
// Good: functionality-aligned
POST /orders/{id}/cancel → { status, cancelledAt }
// Bad: data-model-aligned
PUT /orders/{id} → { ..., status: "cancelled", ... }
For each integration:
| Field | Value |
|---|---|
| System | [name] |
| Protocol | [HTTP/gRPC/CLI/message queue] |
| Direction | [we call them / they call us / both] |
| Contract | [request/response schema or event schema] |
| Failure mode | [what happens when it's down] |
| Retry policy | [retries, backoff, circuit breaker] |
| Class | Meaning | Example |
|---|---|---|
| Owned | We control the code and deploy it | Internal service |
| Wrapped | We depend on it but wrap it in our interface | Third-party SDK behind adapter |
| Consumed | We depend on it directly, no wrapper | External API called directly |
| Infra | Platform-level dependency | Database, message queue |
Wrapped dependencies can be swapped. Consumed dependencies cannot. Track which is which — it determines your coupling risk.
For each component:
Use these terms exactly — don't substitute. They make trade-offs explicit and carry precise meaning from Ousterhout's "A Philosophy of Software Design":
| Term | Meaning | Signal |
|---|---|---|
| Module | A unit of code with an interface and a hidden implementation | — |
| Interface | The surface a module exposes — the contract, not the signature | — |
| Deep module | Small interface, lots hidden inside (high leverage: complexity hidden ÷ interface size) | Good — complexity is contained |
| Shallow module | Interface as complex as implementation | Bad — wrapper adds complexity without hiding any |
| Concealed complexity | Work done behind a simple interface | The goal of deep modules |
| Leaky abstraction | Interface exposes internal details callers must know | Design defect — fix the interface |
| Temporal coupling | Caller must know the order of operations | Design defect — remove or document explicitly |
| Seam | A place where behavior can be substituted (test boundary, adapter point) | — |
| Adapter | Code that bridges your interface to an external system | — |
| Locality | Whether related logic lives together — good locality means changes touch few files | — |
For every module or abstraction, ask: "If I deleted this module and inlined its code at every call site, where does the complexity go?"
This is a falsifiable test, not a matter of taste — apply it before accepting any new module boundary.
When wrapping a third-party dependency, the first adapter is allowed (it isolates the external API). A second adapter stacked on top of the first is a smell — it means the first adapter's interface is wrong; fix the first adapter instead of stacking abstractions. Don't introduce a new seam until you have two concrete adapters that need it.
When a module's interface is non-trivial, design it twice:
Compare both. The first design is usually shallow — it mirrors the implementation. The second design reveals what the interface should hide. Use the better one, or a hybrid.
Why: One-pass interfaces optimize for the implementer. Two-pass interfaces optimize for the caller.
For architectural decisions with material trade-offs:
### Decision: [Title]
**Context:** [why this decision is needed]
**Options:** [2-3 alternatives with trade-offs]
**Decision:** [what was chosen]
**Rejected:** [what was not chosen and why]
**Consequences:** [what this enables and prevents]
**Reversibility:** [reversible or irreversible — irreversible decisions need more evidence]
Deep-module vocabulary, the Deletion Test, and the Two-Adapter Rule are defined once above under Architecture Vocabulary (Precise Language), and Phase 3 (Design Components) applies them directly. There is no second copy.
npx claudepluginhub romiluz13/cc10x --plugin cc10xDesigns system architecture and high-level technical strategy. Use for new systems or subsystems, major refactors, technology selections, system boundaries, and long-term decisions with broad impact.
Designs system architecture, creates ADRs, evaluates trade-offs, and plans scalability. Activates on architecture, system design, or microservices discussions.
Designs new system architecture, reviews existing designs, and creates ADRs. Useful for scalability planning, pattern selection, and technology evaluation.