# Interface Design

When the user wants to explore alternative interfaces for a chosen deepening candidate, use this parallel sub-agent pattern. Based on "Design It Twice" (Ousterhout) — your first idea is unlikely to be the best.

Uses the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**, **leverage**.

## Process

### 1. Frame the problem space

Before spawning sub-agents, write a short user-facing explanation of the problem space for the chosen candidate:

- The constraints any new interface would need to satisfy.
- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](DEEPENING.md)).
- A rough illustrative code sketch to ground the constraints — not a proposal, just a way to make the constraints concrete.

Show this to the user, then immediately proceed to Step 2. The user reads while sub-agents work in parallel.

### 2. Spawn sub-agents

Spawn 3+ sub-agents in parallel using the `Agent` tool. Each must produce a **radically different** interface for the deepened module.

Prompt each sub-agent with a separate technical brief — file paths, coupling details, dependency category, what sits behind the seam. The brief is independent of the user-facing explanation in Step 1. Give each agent a different design constraint:

- Agent 1: _"Minimize the interface — aim for 1–3 entry points max. Maximise leverage per entry point."_
- Agent 2: _"Maximise flexibility — support many use cases and extension."_
- Agent 3: _"Optimise for the most common caller — make the default case trivial."_
- Agent 4 (if cross-seam): _"Design around ports & adapters for cross-seam dependencies."_

Include both [LANGUAGE.md](LANGUAGE.md) vocabulary and the project's domain terms (the glossary, from `wystack-agent-kit:glossary`) in the brief so each sub-agent names things consistently.

Each sub-agent outputs:

1. Interface (types, methods, params — plus invariants, ordering, error modes).
2. Usage example showing how callers use it.
3. What the implementation hides behind the seam.
4. Dependency strategy and adapters (see [DEEPENING.md](DEEPENING.md)).
5. Trade-offs — where leverage is high, where it's thin.

### 3. Present and compare

Present designs sequentially so the user can absorb each one, then compare them in prose. Contrast by **depth** (leverage at the interface), **locality** (where change concentrates), and **seam placement**.

After comparing, give your own recommendation: which design you think is strongest and why. If elements from different designs would combine well, propose a hybrid. Be opinionated — the user wants a strong read, not a menu.

## When to skip this skill

- Single obvious interface — no genuine alternatives worth exploring.
- Proposal is small enough that the cost of three parallel agents outweighs the value.
- User has already committed to a shape from prior work or a recorded spec decision.
