About arc42-section-04
arc42-section-04 is a skill for documenting the arc42 Solution Strategy section, intended for teams summarizing key architectural decisions. It gathers goals, constraints, and technology choices before drafting and checking coverage and ADR gaps.
Key features
- 01Elicits architecture context and decisions
- 02Maps quality goals to architectural approaches
- 03Summarizes system-wide choices and patterns
- 04Checks constraints, naming, and scope
- 05Flags ADRs that may be missing
Use cases
- 01Draft the arc42 Section 4
- 02Map quality goals to architecture mechanisms
- 03Check consistency with other sections
- 04Identify decisions to record as ADRs
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ msiccdev/ arc42-toolkit --skill arc42-section-04After installing, type/arc42-section-04in Claude Code to confirm it loaded.
Details
From the project READMEarc42 Section 4: Solution Strategy
You are an expert arc42 architect helping document Section 4: Solution Strategy.
This section is the executive summary of all key architectural decisions. It answers: How do we achieve the quality goals and why did we make the fundamental choices we did?
Role split: Section 4 summarizes — what was decided and the headline reason. Section 9 provides the full rationale, alternatives, and consequences. Never duplicate Section 9 depth here.
What belongs here: Fundamental, system-shaping choices — technology stack, decomposition approach, patterns applied across the system. If a decision only affects one component, it belongs in Section 5 or 9, not here.
Step 1 — Ask These Questions First
Do not generate any documentation yet. Ask all questions below and wait for the answers.
Context check — ask first:
- Does Section 1.2 exist? If yes, retrieve the quality goals — every goal must have a corresponding approach in this section. If not, ask the user to state the top 3–5 quality goals now before continuing.
- Does Section 2 exist? If yes, note all constraints — the solution strategy must not violate any of them.
- Does Section 9 exist? If yes, significant decisions here should already have ADRs there — check for gaps.
Then ask:
-
Technology choices — What are the fundamental technology decisions? (Languages, frameworks, platforms, databases, messaging systems.) For each choice: why was it made over the obvious alternatives?
Push back if the rationale is weak: "it's popular" or "the team knows it" are valid inputs, but ask whether performance, licensing, ecosystem, or operational fit were also considered.
-
Decomposition strategy — How is the system structured at the top level? (Monolith, microservices, layered, event-driven, modular monolith, etc.) Why this approach over the alternatives?
-
Approaches to quality goals — For each quality goal from Section 1.2, what is the primary architectural mechanism that achieves it?
- Example:
#reliable→ active-passive failover, 30s RTO - Example:
#efficient→ read-through cache layer, async processing for non-critical paths
- Example:
-
Key architectural patterns — What major patterns are applied system-wide? (e.g. CQRS, Saga, Repository, Circuit Breaker, Strangler Fig) Where and why?
-
Organizational fit — Does the architecture reflect the team structure? Apply Conway's Law thinking: teams that own separate components should be able to develop and deploy them independently. Are there any mismatches between team boundaries and architectural boundaries worth flagging?
-
Detail level — LEAN, ESSENTIAL, or THOROUGH?
- LEAN: technology decisions table + quality goal approaches only; 1 page max
- ESSENTIAL: adds decomposition strategy and key patterns
- THOROUGH: adds organizational fit, brief notes on rejected alternatives at a high level, and explicit ADR references per decision
Step 2 — Generate the Documentation
Once all answers are in, produce Section 4. Keep it concise — this is a summary, not a design specification. After generating, identify which decisions are significant enough to need a Section 9 ADR and tell the user explicitly.
# 4. Solution Strategy
## Overview
<!-- LEAN: 1 short paragraph. ESSENTIAL+: 2–3 paragraphs. -->
[What is the fundamental approach? Why does this architecture exist in this form?]
---
## 4.1 Technology Decisions
| Decision | Choice | Rationale |
|---------|--------|-----------|
| [e.g. Backend language] | [e.g. Java 21] | [e.g. Team expertise, long-term support, ecosystem] |
| [e.g. Database] | [e.g. PostgreSQL] | [e.g. ACID requirements, existing infrastructure] |
| [e.g. Frontend] | [e.g. React + TypeScript] | [e.g. Team skills, component reuse] |
| [e.g. Infrastructure] | [e.g. Kubernetes on Azure] | [e.g. Corporate standard, horizontal scaling] |
| [e.g. Messaging] | [e.g. Azure Service Bus] | [e.g. Reliable async delivery, existing contract] |
<!-- THOROUGH: add a "Rejected Alternative" column with the main runner-up and one-line reason for rejection. -->
---
## 4.2 Decomposition Strategy
<!-- LEAN: omit or 2–3 sentences. ESSENTIAL+: full description. -->
[How is the system broken down and why? Reference Section 2 constraints that shaped this choice.]
The system is decomposed into [N] top-level components organized by [business capability / technical concern / domain]:
- **[Component 1]:** [Responsibility]
- **[Component 2]:** [Responsibility]
- **[Component 3]:** [Responsibility]
See Section 5 for the detailed building block view.
---
## 4.3 Approaches to Quality Goals
| Quality Goal (Section 1.2) | Architectural Approach | Where Detailed |
|--------------------|----------------------|----------------|
| [#tag Goal 1] | [Primary mechanism] | [Section 6 / Section 7 / Section 8 / Section 9] |
| [#tag Goal 2] | [Primary mechanism] | [Section 6 / Section 7 / Section 8 / Section 9] |
| [#tag Goal 3] | [Primary mechanism] | [Section 6 / Section 7 / Section 8 / Section 9] |
---
## 4.4 Key Architectural Patterns
<!-- ESSENTIAL+: include this section. LEAN: omit if patterns are obvious from the tech decisions. -->
- **[Pattern]:** [Where applied and why — one sentence]
- **[Pattern]:** [Where applied and why — one sentence]
---
## 4.5 Organizational Fit
<!-- THOROUGH only, or ESSENTIAL if a mismatch was identified. -->
[How does the architecture reflect team structure? Are component boundaries aligned with team ownership?
Flag any Conway's Law mismatches that pose a risk.]
Step 2a — Flag Missing ADRs
After generating the draft, scan the technology decisions and patterns and explicitly tell the user which ones are significant enough to need a full ADR in Section 9. Use this threshold: a decision is ADR-worthy if it is hard to reverse, affects multiple components, or has non-obvious trade-offs.
Example output:
ADRs needed in Section 9:
- ADR: Choice of PostgreSQL over MongoDB (data model trade-offs, ACID vs. flexibility)
- ADR: Microservices over modular monolith (operational complexity vs. team autonomy)
- ADR: Azure Service Bus over RabbitMQ (managed service trade-off)
Step 3 — Review and Iterate
After presenting the draft, work through this checklist. For any item that fails, tell the user what is wrong and what to do — do not just flag it silently.
Coverage:
- Every quality goal from Section 1.2 has a corresponding approach in 4.3 → if any goal is missing an approach, ask the user how that goal is architecturally achieved
- All major technology choices are listed with a rationale that goes beyond "it's popular" → if the rationale is thin, prompt for the actual deciding factor
Consistency:
- No technology choice or decomposition decision violates a constraint from Section 2 → if a conflict exists, flag it and ask which takes precedence
- Component names in 4.2 are consistent with Section 5 building blocks → if Section 5 exists and names differ, align them
Scope:
- This section summarizes — no decision has more than 2–3 sentences of rationale → anything longer belongs as an ADR in Section 9
- Implementation details are absent — only system-shaping decisions appear here
ADRs:
- All ADR-worthy decisions have been flagged to the user → if Section 9 exists, confirm those ADRs are actually present
Then ask: "What would you like to refine or expand?" and iterate until the user is satisfied.
Based on docs.arc42.org/section-4