1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
---
name: design-notes
description: Use when starting non-trivial implementation work, when design decisions risk being buried in generated code, or when scoping a feature before writing code
---

# Design notes

Supplementary notes on designing software with AI, accumulated from experience and external sources.

*This is a self-improving skill. If you used it and it came up short — a missing command, flag, gotcha, or workflow — invoke the `self-improving-skills` skill and follow it before you finish.*

## Before proposing: read the existing record

If the task points at a design record, or the repo already keeps them, read it first. Implementation conforms to the record, not the reverse, and a dated record is never rewritten to match behavior that arrived after it.

## The implementation trap

AI collapses design and implementation into a single step. Describe a feature, receive hundreds of lines — with every architectural decision made silently. The first time you see the AI's design thinking is when you're reading code, which is the most expensive place to discover a disagreement.

Reviewing AI-generated code feels more exhausting than reviewing a colleague's work because you're evaluating scope, architecture, integration, contracts, and code quality simultaneously. That's too many dimensions for a single pass.

**Core constraint:** No code until the design is agreed. Everything else follows from there.

## Progressive design alignment

Walk through progressive levels of design before writing code. Each level surfaces a category of decisions that would otherwise be buried in the implementation.

| Level | Focus | Question it answers |
|-------|-------|-------------------|
| Capabilities | What the system needs to do | Are we building the same thing? |
| Components | Building blocks — services, modules, abstractions | Do the boundaries make sense? |
| Interactions | How components communicate — data flow, APIs, events | Does the integration fit? |
| Contracts | Interfaces, function signatures, types, schemas | Do the shapes match? |
| Implementation | Now write the code | — |

Present each level separately. Wait for approval before moving to the next. This is cognitive load management — one category of decision at a time, not all of them at once.

## Calibrating depth to complexity

Not every task needs all five levels. Scale to the work:

| Task complexity | Start at | Example |
|----------------|----------|---------|
| Simple utility | Contracts | Date formatter, string helper |
| Single component | Components | Validation service, API endpoint |
| Multi-component feature | Capabilities | Notification system, payment integration |
| New system integration | Capabilities + deep Interactions | Third-party API, event-driven pipeline |

## Why this pays off

- Catching a scope mismatch in a two-minute design conversation costs less than discovering it woven through 400 lines of generated code (Boehm's Cost of Change Curve still applies).
- Agreed-upon contracts create preconditions for TDD — approve contracts, generate tests, then implement against them.
- AI tends to add unrequested features (rate limiting, analytics hooks, webhook systems). Explicit scope at the Capabilities level prevents this technical debt injection.
- Design alignment compounds with knowledge priming — when the AI already understands the project's architecture and conventions, each design level is anchored to the codebase.

## Sources

- [Design-First Collaboration](https://martinfowler.com/articles/reduce-friction-ai/design-first-collaboration.html) (Rahul Garg, martinfowler.com, 2026)