System Architecture
Design the shape of the solution before anyone builds it: what the pieces are, how they fit, and where the seams go. Aim for deep modules, not a sprawl of shallow ones.
When to use
- You have approved requirements and the work is non-trivial — a new subsystem, several components, real integration.
- Skip for a small feature; keep its structure in the bounded task or plan
rather than creating a separate architecture artifact.
- This skill owns the target system's structure.
migration-strategy owns how an
existing system reaches that target; verification-strategy owns the
initiative-wide proof battery.
Step 1: Trace and structure
Open assets/architecture-section.md now. Each step fills its section.
- Map every requirement, preserved obligation, and material risk to the
component, interface, and owning evaluator reference covering it. Define no
assurance gates here. Unmapped row → approval blocked.
- Name each module by what it does and does not do. Removing it would spread
its complexity across callers → it stays. Complexity merely relocates →
merge it.
- Follow request, response, event, and sensitive-data paths from entry to
effect. Mark ownership, authorization boundaries, source-of-truth
transitions.
- Per dependency and asynchronous path, write timeouts, retry and
idempotency, degraded operation, recovery, how each is exercised.
Step 2: Operational views and seams
- Cover each view that affects correctness: deployment and runtime topology,
scale and resource budgets, observability, rollout and compatibility
capabilities. Transition procedure belongs to the migration contract; do
not restate it.
- Omitted view → a skip record with the fields in the template's
operational-views table. Never drop one as "inapplicable" without it.
- Place a seam only for repeated behavior with a stable owner and measured
change friction, or one real volatile or external boundary with measured
impedance, failure policy, or test isolation. Hypothetical variation earns
none.
- Hard-to-reverse choice → invoke
architecture-decisions. Unresolved
material choice → invoke interview-me. Use the domain's language
throughout.
Step 3: Write, review, present
Write the immutable section to
.sdlc-skills/designs/{{YYYY-MM-DD}}-{{topic}}.md or the user-set path,
preserving approved sections around it. Fill the header: identity,
predecessor, approval rule, ledger location, stable ID delta.
High-risk design → run references/design-review.md before presenting.
Blocking.
Present and end the turn:
{{Section}} {{path}} — version {{identity}}
{{summary lines}}
1. Approve and hand off to planning
2. Request changes
3. Reject
4. Cancel
Recommendation: {{option}} — {{one sentence}}.
Only option 1 authorizes planning. Praise, silence, prior-version approval
→ nothing. Record lifecycle externally.
Normative change after issue → a successor with a per-ID added / changed / removed / preserved delta. Removal needs owning approval. Never edit an
issued identity.
Option 1, and every design section the work needs is approved →
REQUIRED SUB-SKILL: invoke writing-plans against this version.
Common mistakes
- Shallow modules — an interface as wide as the implementation behind it.
- Untested external-service paths — "it'll work in prod" is not a design.
- Components with no trace back to a requirement, or requirements with no
component and evaluator.
- A happy-path diagram with no trust, recovery, runtime, or rollout view despite
risks on those surfaces.
- Designing for hypothetical futures with no measured boundary pressure.
- Generic vocabulary that hides the domain.
For a high-risk design, use references/design-review.md before anyone plans
against it.
1---2name: system-architecture3description: Use when approved requirements need a target system design before planning or implementation: components, boundaries, data flow, failure and recovery, and which seams are worth their cost. Fires on how should we structure this and what are the moving pieces, even if nobody says architecture. Skip the transition from an existing system, and skip a small feature whose structure fits inside its own task or plan.4---56# System Architecture78Design the shape of the solution before anyone builds it: what the pieces are, how they fit, and where the seams go. Aim for **deep modules**, not a sprawl of shallow ones.910## When to use1112- You have approved requirements and the work is non-trivial — a new subsystem, several components, real integration.13- **Skip** for a small feature; keep its structure in the bounded task or plan14 rather than creating a separate architecture artifact.15- This skill owns the target system's structure. `migration-strategy` owns how an16 existing system reaches that target; `verification-strategy` owns the17 initiative-wide proof battery.1819## Step 1: Trace and structure2021Open `assets/architecture-section.md` now. Each step fills its section.22231. Map every requirement, preserved obligation, and material risk to the24 component, interface, and owning evaluator reference covering it. Define no25 assurance gates here. Unmapped row → approval blocked.262. Name each module by what it does and does not do. Removing it would spread27 its complexity across callers → it stays. Complexity merely relocates →28 merge it.293. Follow request, response, event, and sensitive-data paths from entry to30 effect. Mark ownership, authorization boundaries, source-of-truth31 transitions.324. Per dependency and asynchronous path, write timeouts, retry and33 idempotency, degraded operation, recovery, how each is exercised.3435## Step 2: Operational views and seams36371. Cover each view that affects correctness: deployment and runtime topology,38 scale and resource budgets, observability, rollout and compatibility39 capabilities. Transition procedure belongs to the migration contract; do40 not restate it.412. Omitted view → a skip record with the fields in the template's42 operational-views table. Never drop one as "inapplicable" without it.433. Place a seam only for repeated behavior with a stable owner and measured44 change friction, or one real volatile or external boundary with measured45 impedance, failure policy, or test isolation. Hypothetical variation earns46 none.474. Hard-to-reverse choice → invoke `architecture-decisions`. Unresolved48 material choice → invoke `interview-me`. Use the domain's language49 throughout.5051## Step 3: Write, review, present52531. Write the immutable section to54 `.sdlc-skills/designs/{{YYYY-MM-DD}}-{{topic}}.md` or the user-set path,55 preserving approved sections around it. Fill the header: identity,56 predecessor, approval rule, ledger location, stable ID delta.572. High-risk design → run `references/design-review.md` before presenting.58 Blocking.593. Present and end the turn:6061 ```text62 {{Section}} {{path}} — version {{identity}}63 {{summary lines}}6465 1. Approve and hand off to planning66 2. Request changes67 3. Reject68 4. Cancel6970 Recommendation: {{option}} — {{one sentence}}.71 ```72734. Only option 1 authorizes planning. Praise, silence, prior-version approval74 → nothing. Record lifecycle externally.755. Normative change after issue → a successor with a per-ID `added / changed /76 removed / preserved` delta. Removal needs owning approval. Never edit an77 issued identity.786. Option 1, and every design section the work needs is approved →79 **REQUIRED SUB-SKILL:** invoke `writing-plans` against this version.8081## Common mistakes8283- Shallow modules — an interface as wide as the implementation behind it.84- Untested external-service paths — "it'll work in prod" is not a design.85- Components with no trace back to a requirement, or requirements with no86 component and evaluator.87- A happy-path diagram with no trust, recovery, runtime, or rollout view despite88 risks on those surfaces.89- Designing for hypothetical futures with no measured boundary pressure.90- Generic vocabulary that hides the domain.9192For a high-risk design, use `references/design-review.md` before anyone plans93against it.