design-an-interface

Gere múltiplos designs de interface radicalmente diferentes para um módulo usando subagentes paralelos. Use quando o usuário quiser projetar uma API, explorar opções de interface, comparar formatos de módulo ou mencionar "projete duas vezes".

npx skills add https://github.com/mattpocock/skills --skill design-an-interface

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:

  • What problem does this module solve?
  • Who are the callers? (other modules, external users, tests)
  • What are the key operations?
  • Any constraints? (performance, compatibility, existing patterns)
  • What should be hidden inside vs exposed?

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: "Minimize method count - aim for 1-3 methods max"
- Agent 2: "Maximize flexibility - support many use cases"
- Agent 3: "Optimize for the most common case"
- Agent 4: "Take inspiration from [specific paradigm/library]"

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

3. Present Designs

Show each design with:

  1. Interface signature - types, methods, params
  2. Usage examples - how callers actually use it in practice
  3. What it hides - complexity kept internal

Present designs sequentially so user can absorb each approach before comparison.

4. Compare Designs

After showing all designs, compare them on:

  • Interface simplicity: fewer methods, simpler params
  • General-purpose vs specialized: flexibility vs focus
  • Implementation efficiency: does shape allow efficient internals?
  • Depth: small interface hiding significant complexity (good) vs large interface with thin implementation (bad)
  • Ease of correct use vs ease of misuse

Discuss trade-offs in prose, not tables. Highlight where designs diverge most.

5. Synthesize

Often the best design combines insights from multiple options. Ask:

  • "Which design best fits your primary use case?"
  • "Any elements from other designs worth incorporating?"

Evaluation Criteria

From "A Philosophy of Software Design":

Interface simplicity: Fewer methods, simpler params = easier to learn and use correctly.

General-purpose: Can handle future use cases without changes. But beware over-generalization.

Implementation efficiency: Does interface shape allow efficient implementation? Or force awkward internals?

Depth: Small interface hiding significant complexity = deep module (good). Large interface with thin implementation = shallow module (avoid).

Anti-Patterns

  • Don't let sub-agents produce similar designs - enforce radical difference
  • Don't skip comparison - the value is in contrast
  • Don't implement - this is purely about interface shape
  • Don't evaluate based on implementation effort

Mais skills de mattpocock

improve-codebase-architecture
mattpocock
Encontre oportunidades de aprofundamento em uma base de código, informado pela linguagem de domínio em CONTEXT.md e pelas decisões em docs/adr/. Use quando o usuário quiser melhorar a arquitetura, encontrar oportunidades de refatoração, consolidar módulos fortemente acoplados ou tornar uma base de código mais testável e navegável por IA.
developmentcode-reviewapi
tdd
mattpocock
Desenvolvimento orientado a testes com ciclo red-green-refactor. Use quando o usuário quiser construir funcionalidades ou corrigir bugs usando TDD, mencionar "red-green-refactor", quiser testes de integração ou pedir desenvolvimento orientado a testes.
developmenttesting
handoff
mattpocock
Compacte a conversa atual em um documento de handoff para que outro agente possa continuar.
communicationproject-managementdocument
prototype
mattpocock
Construa um protótipo descartável para desenvolver um design antes de se comprometer com ele. Roteia entre dois ramos — um aplicativo de terminal executável para questões de estado/lógica de negócios, ou várias variações de UI radicalmente diferentes alternáveis a partir de uma rota. Use quando o usuário quiser prototipar, verificar um modelo de dados ou máquina de estado, criar um mockup de UI, explorar opções de design, ou disser "prototipe isso", "deixe-me brincar com isso", "tente alguns designs".
developmentdesigncreative
triage
mattpocock
Triar problemas através de uma máquina de estados orientada por funções de triagem. Use quando o usuário quiser criar um problema, triar problemas, revisar bugs ou solicitações de funcionalidades recebidas, preparar problemas para um agente AFK ou gerenciar o fluxo de trabalho de problemas.
developmentproject-managementcommunication
obsidian-vault
mattpocock
Pesquise, crie e gerencie notas no vault do Obsidian com wikilinks e notas de índice. Use quando o usuário quiser encontrar, criar ou organizar notas no Obsidian.
productivitydocument
edit-article
mattpocock
Edite e melhore artigos reestruturando seções, aprimorando a clareza e refinando a prosa. Use quando o usuário quiser editar, revisar ou melhorar um rascunho de artigo.
documentcreative
writing-great-skills
mattpocock
Referência para escrever e editar skills bem — o vocabulário e os princípios que tornam uma skill previsível.
documentdevelopment