breadboarding

star 6

This skill should be used when shaping a software change and needing to breadboard the solution at the right level of abstraction (places, affordances, connections), including mapping an existing system via UI + code affordances, producing a wiring diagram, a parts/BOM plan, a fit check, and (when relevant) an extract-vs-duplicate analysis.

marchatton By marchatton schedule Updated 2/11/2026

name: breadboarding description: This skill should be used when shaping a software change and needing to breadboard the solution at the right level of abstraction (places, affordances, connections), including mapping an existing system via UI + code affordances, producing a wiring diagram, a parts/BOM plan, a fit check, and (when relevant) an extract-vs-duplicate analysis.

Breadboarding

Purpose

Produce a Shape Up style breadboard that is concrete enough to guide a build, without collapsing into pixel-perfect UI spec or a full-code hairball.

Based on Shape Up and Ryan Singer's work.

Treat affordances as the simplifying primitive.

  • UI affordances: things a user can do (type, click, scroll) or see (states/messages) that matter to the flow.
  • Code affordances: things the system can do (call a function, observe an observable, write/read state, navigate) that cause the UI affordances to change.

Use those to build a lightweight model of the current system and the proposed change.

When to use

  • Reach the “rough out the elements” stage and need to turn an idea into buildable parts.
  • Shape a change to a pre-existing system and need to understand what the system actually does today.
  • Compare a new concept against an existing feature and decide whether to duplicate vs extract shared logic.
  • Pick up a shaping effort after a gap and need a fast re-orientation: current state, chosen approach, and what’s still unsolved.

Inputs to request or infer

Prefer working with whatever exists. If inputs are missing, use ask-questions-if-underspecified skill

  • Appetite / timebox and any hard boundaries.
  • Problem statement and success definition.
  • Brief (problem, goals, in/out scope). If missing, pause and draft a brief first.
  • Requirements list (or a rough list of must-haves).
  • Entry point(s): where the user starts, how they discover the feature.
  • Existing system context: routes/screens, key components, services, data stores.
  • Any comparable feature(s) to analyse for reuse.

Workflow

1) Establish the “right level of abstraction”

  • Avoid full wireframes and visual design.
  • Prefer words and connections over pictures.
  • Focus on “what’s connected to what” (topology) and “what changes state”.

Use the breadboard primitives:

  • Places: screens/pages/modals/menus that can be navigated to.
  • Affordances: actions and information at a place (buttons, fields, copy, empty/loading states).
  • Connection lines: how an affordance moves between places or triggers work.

2) Breadboard the user flow

  • Start at the entry place.
  • List the minimum affordances needed to serve the use case.
  • Draw (describe) connection lines for navigation and “cause/effect” transitions.

Stop when the flow answers these shaping questions:

  • Where in the current system does the new thing fit?
  • How does a user get to it?
  • What are the key components/interactions?
  • Where does it take the user next?

3) Inventory UI affordances

Create a numbered list (recommended prefix U):

For each UI affordance, record:

  • ID: U1, U2…
  • Component / place: where it lives
  • Affordance: “search input”, “loading spinner”, “no results message”, etc
  • Control: type/click/scroll/render/iterate
  • Wires out: what it triggers (calls, navigation, messages)
  • Reads (optional): what state/data it depends on

Keep UI affordances at the interaction level, not implementation detail.

4) Inventory code affordances

Create a numbered list (recommended prefix N):

For each code affordance, record:

  • ID: N1, N2…
  • Component/service: where it lives
  • Affordance: function, observable subscription, store write/read
  • Control: call/observe/write/read
  • Wires out: what it calls, writes, triggers, or returns

Interpretation rule:

  • If it’s something that can be “operated” from a whole-system POV to make something happen, it’s an affordance.

5) Build a wiring diagram from affordances

Convert the inventories into a simple directed graph using beautiful-mermaid skill.

  • Nodes: places, UI affordances, code affordances, external services, browser events.
  • Edges:
    • Solid for “wires out”: calls, triggers, writes
    • Dashed for “returns/reads”: return values, store reads

Keep it legible:

  • Draw only the parts touched by the change.
  • Collapse deep internals into a single node when they aren’t central to the shaped behaviour.
  • If it becomes a hairball, split into sub-diagrams per place or per flow.

Required output format (both, not either/or):

  1. Source code: include Mermaid source in a fenced ```mermaid block in the Markdown artefact.
  2. Static render: generate and save a rendered diagram asset (SVG preferred) via beautiful-mermaid, and embed it in the Markdown artefact.
  3. Fallback: also generate a terminal-safe ASCII/Unicode render (.txt) when practical.

Compatibility note:

  • Some Markdown/SVG renderers (for example Zed) do not fully support CSS variables or color-mix() inside SVG.
  • If the render appears as black blocks, post-process the SVG to use literal color values (hex) for fill/stroke/text.

Naming convention (recommended):

  • <doc-base>-wiring.svg
  • <doc-base>-wiring.txt

Place static assets adjacent to the breadboard Markdown file so links stay portable. Use template references/templates/wiring-diagram-mermaid-template.md.

6) Produce a parts list (BOM)

Write a numbered parts list (recommended prefix F for “shape/feature parts”):

  • Each part is a buildable chunk with a clear mechanism.
  • Include deletes/migrations explicitly (e.g., “remove letters from widget-grid”).

For each part:

  • Name the part
  • Summarise the mechanism in 1–2 lines
  • Call out notable trade-offs (scope cuts, simplifications)

Use references/templates/parts-bom-template.md.

7) Fit check: requirements × concept

Create a simple table:

  • Rows: requirements (R0…)
  • Columns:
    • requirement statement
    • status (core goal / must-have / nice-to-have / out / undecided)
    • fit with current concept (✅/❌/⚠️)

Then:

  • Call out the unsolved requirement(s) as explicit shaping questions.
  • Identify the decision needed (product/UX judgement vs technical unknown vs policy).

Use references/templates/fit-check-template.md.

8) Duplicate vs extract analysis (when overlap exists)

When a new change overlaps an existing feature, decide reuse via an affordances overlap rather than vibes.

Steps:

  • Identify the comparable feature (existing) and the new concept.
  • List shared affordances and divergent affordances.
  • Compare requirements that drive divergence (URL shape, guards, state model, pagination mode, etc).
  • Estimate the real code coupling cost vs the amount of duplication avoided.

Produce:

  • A “Keep Shared vs Duplicate” table
  • A recommendation (default bias: duplicate feature-level orchestration; extract infrastructure-level types/utilities)
  • 3–5 concrete reasons, with emphasis on:
    • divergent requirements
    • lines of code vs coupling cost

Use references/templates/extract-vs-duplicate-template.md.

9) Package the breadboard as a single artefact

Output a “Breadboard Pack” as Markdown:

  • Current State (what exists today)
  • Proposed Breadboard (places, affordances, connections)
  • UI Affordances table
  • Code Affordances table
  • Wiring diagram:
    • embedded static image link (.svg)
    • Mermaid code block (source of truth)
    • optional .txt fallback path
  • Parts/BOM
  • Fit check + unsolved questions
  • Rabbit holes / out-of-bounds / cuts
  • Optional: extract vs duplicate analysis

Use references/templates/breadboard-pack-template.md.

Quality bar

  • Stay rough, but solved: enough detail to unblock building, not enough to constrain visual design.
  • Keep a consistent numbering scheme (U*, N*, R*, F*).
  • Make every edge in the wiring diagram traceable back to an affordance row.
  • Ensure diagram portability: a reader without Mermaid support must still see the static diagram.
  • Prefer small, explicit trade-offs over implied complexity.

Bundled resources

  • references/shapeup-breadboarding-notes.md — summary of Shape Up breadboarding concepts.
  • references/templates/* — reusable templates for breadboard pack, tables, diagrams, fit checks.
  • references/templates/brief-template.md — brief template used by the brief skill.
  • references/examples/letter-search-example.md — an end-to-end example using UI+code affordances.
  • scripts/render_mermaid_from_edges.py — optional helper: JSON edge list -> Mermaid code (render via beautiful-mermaid)
Install via CLI
npx skills add https://github.com/marchatton/agent-skills --skill breadboarding
Repository Details
star Stars 6
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator