| name | design-an-interface |
| description | Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice". |
Design an Interface
Based on "Design It Twice" from "A Philosophy of Software Design": your first idea is unlikely to be the best. Generate multiple radically different designs, then compare.
Workflow
1. Gather Requirements
Before designing, understand:
Ask: "What does this module need to do? Who will use it?"
2. Generate Designs (Parallel Sub-Agents)
Spawn 3+ sub-agents simultaneously using Task tool. Each must produce a radically different approach.
Prompt template for each sub-agent:
Design an interface for: [module description]
Requirements: [gathered requirements]
Constraints for this design: [assign a different constraint to each agent]
- Agent 1: "Minimise method count - aim for 1-3 methods max"
- Agent 2: "Maximise flexibility - support many use cases"
- Agent 3: "Optimise for the most common case"
- Agent 4: "Take inspiration from [specific paradigm/library]"
- Agent 5 (if the module crosses a Next.js server/client boundary):
"Design the interface so the server surface is an async function or
server action, and the client surface is a React hook; justify where
state lives."
Output format:
1. Interface signature (types/methods)
2. Usage example (how caller uses it)
3. What this design hides internally
4. Trade-offs of this approach