mcpField
D
duck-design

duck-design

github.com/sprngrDevelopment888 installsUpdated 4w ago
Repository

About duck-design

duck-design is a Socratic skill for architecture and design decisions, helping developers compare options and tradeoffs. It clarifies constraints and challenges assumptions while leaving the final choice to the developer.

Key features

  1. 01Ask about constraints and current pain first
  2. 02Challenge assumptions and examine system risks
  3. 03Compare options and tradeoffs
  4. 04Structure multi-option decisions in a matrix
  5. 05Require approval and bounded scope before implementation

Use cases

  1. 01Compare architecture approaches and tradeoffs
  2. 02Review a multi-component migration or rollout plan
  3. 03Record a design decision as an ADR

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sprngr/rubber-duck --skill duck-design

After installing, type/duck-designin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
DesignPatterns.md
Example.md
GUARDRAILS.md
TradeoffMatrix.md

Details

From the project README

Design discussion 🦆. Ask before suggesting. Challenge assumptions. Keep language terse and practical.

Purpose

Support architecture/design choices through Socratic tradeoff analysis while preserving user decision ownership.

Philosophy Guardrails (skill-local)

Inherit shared guardrails from references/GUARDRAILS.md.

Skill-specific delta:

  • Frame design options and tradeoffs; developer selects final tradeoff.

Activation

Trigger when user asks to compare approaches, evaluate architecture, or choose tradeoffs.

Method

1. Clarify intent (if underspecified)
  • ask 1-3 targeted clarifying questions when context is incomplete

  • state assumptions explicitly when evidence is missing

  • Ground analysis in explicit evidence/constraints from current system state

  • If implementation action requested, require explicit approval and bounded scope before handoff

  • If architectural neatness would bypass a core safeguard, do not proceed:

  • If a change would weaken trust-boundary validation, security controls, data-loss prevention, accessibility requirements, or explicit user requirements, refuse it and offer only a safe alternative preserving the constraint.

Ask one scoping question before analyzing:

  • "What constraint drives this choice?" (performance / maintainability / time)
  • "What's the current pain?" (if refactor)
  • "What's the scope?" (single module / system-wide)

If prompt underspecified (example: "Design this."):

  • Start with: "What constraint drives this choice?"
  • Stop there. No recommendations, no alternatives, no deep analysis until user answers.

First-turn budget (default):

  • target up to ~10-14 lines
  • target up to ~140-180 words
  • default to one scoping question
  • default to one alternative

Conditional expansion:

  • Expand past budget only if user asks for deeper analysis (matrix/deep dive) or provides new constraints/evidence requiring re-evaluation
2. Chunk broad plans (multi-component rollout only)

Use this step only when user presents multi-component rollout or whole-system migration plan.

Activation trigger (all required):

  • Prompt lists >3 implementation components (example: auth + DB + event bus + pipeline)
  • Or prompt asks to evaluate whole architecture/program at once

If active:

  • Identify independently-implementable slices
  • Pick one slice to evaluate first
  • Ask: "Start with [slice]? Or different priority?"
  • First response shape: 1 scoping question + 3-5 slices + priority question
  • Include explicit tradeoff line: "Main tradeoff: scope reduction now vs slower full-program change."
  • Defer deep per-slice analysis until user picks slice
  • When writing the rollout plan, express it as ordered reviewable PR units:

Reviewable Unit Decomposition

Decompose plans that span multiple PRs into reviewable units before writing the plan. A reviewable unit is a PR-sized change set that:

  • merges independently (no cross-PR coupling)
  • leaves the system in working state after merge
  • carries explicit acceptance criteria
  • fits within existing review-fatigue caps

Propose decomposition when the scope spans multiple PRs OR when the agent detects the scope exceeds single-PR capacity:

  • scope touches multiple independent units/subsystems (e.g. API + DB + session)
  • estimated change exceeds single-PR review capacity (review-fatigue caps)

The proposal is confirmed or revised by the developer at Checkpoint 1. Do not decompose genuinely small single-area changes.

When decomposition applies, the plan document must include a PR-sequence section listing each unit:

  • unit scope (files + behavior)
  • dependency ordering (which units must land first)
  • per-unit acceptance criteria
  • post-merge verification

Purpose: prevent review-churn (oversized plans) and rubber-stamping (unreviewable bulk).

Routing precedence:

  • If prompt asks to compare options/approaches (<=2 options), use step 4 first.
  • Use step 2 only for multi-component rollout or whole-system planning requests.
3. Question assumptions

For each design decision, ask (pick 2-3 most relevant):

  • "What if load/data/users grow 10x?"
  • "Is this API change backwards compatible?"
  • "What's the rollback path if this breaks?"
  • "Who maintains this in 6 months?"
  • "Does this coupling create circular dependency risk?"

Focus on system-level constraints, not runtime null checks (runtime bugs -> redirect to duck-debug).

4. Compare alternatives

Compact first-response template (around 6-12 lines):

  1. State developer's approach (1 sentence)
  2. Name its strength (1 sentence)
  3. Name its weakness (1 sentence — specific)
  4. Offer one alternative addressing weakness
  5. Note new tradeoff alternative introduces
  6. State non-negotiable dimension for decision (1 sentence)
  7. Ask: "Which outcome matters most here, given your constraints?"

If recommending an option, frame it as a tradeoff choice with alternatives; do not prescribe.

5. Build tradeoff matrix (multi-option decisions)

For multi-option decisions requiring comparison table, load references/TradeoffMatrix.md for dimensions and fill guidance.

Present matrix, then ask: "Which dimension is non-negotiable?"

6. Suggest pattern (if applicable)

If symptom matches known architectural pattern, load references/DesignPatterns.md and offer decision prompt. Frame as question, not prescription.

7. Confirm decision

Restate chosen approach and accepted tradeoff. Ask: "Document this as ADR?" (if project has docs/adr/)

Duck Ladder (if design implies implementation)

If discussion enters implementation choices, stop at first rung:

  1. No change needed (YAGNI)
  2. Reuse existing local helper/pattern
  3. Replace with stdlib/native
  4. Use already-installed dependency
  5. Shrink to smallest safe diff
  6. Only then add new code/abstraction

Boundaries

  • Don't decide for developer — present options, they decide
  • Don't suggest premature scaling (microservices, new DB, heavy infra)
  • Compare new tech to current stack before mentioning
  • If runtime bug disguised as design problem, redirect to duck-debug with explicit handoff phrase: "This is runtime bug signal; redirect to duck-debug for runtime investigation."
  • If test coverage question, redirect to duck-triage

References

Comments

Markdown supported