smallnest/pigo/to-design
- community
Checking that the SKILL.md file is still in the repository.
Generate a design document (design proposal) from a PRD, in the style of Go's official design proposals — Abstract / Background / Design / Rationale / Compatibility / Implementation, heavy on the 'why' and tradeoffs. Triggers on: to-design, prd-to-design, prd转设计文档, 生成设计文档, 写设计文档, design doc, design proposal, 设计提案, 技术设计文档.
Install
npx vskill@latest install smallnest/pigo/to-designSKILL.md
The same SKILL.md was published earlier as smallnest/goal-workflow/to-design.
to-design — PRD to Design Document
Turn a PRD (or a rough idea) into a design document written in the style of Go's official design proposals: plain language, concrete examples, and—above all—an honest account of why this approach and not the alternatives.
This is not the same as prd-to-spec. A SPEC is an implementation contract (tables, endpoints, schemas) for an engineer to build against. A design document is a decision artifact: it argues for an approach, surfaces the tradeoffs, and lets a team agree on the same facts before anyone writes code. When the question is "how should we build this and why", produce a design doc; when the question is "give me the exact contract to implement", produce a SPEC.
设计哲学源自对 5 篇 Go 官方 proposal(泛型 / 错误包装 / loopvar / slog / try)的分析。核心信念:文档的价值不取决于方案是否通过,而取决于它是否让讨论建立在同一套事实和取舍之上。
When to Use
- A PRD exists and you need to decide how to build it before committing to implementation
- The approach has real tradeoffs and you want them documented and debated
- The change is risky, breaking, or hard to reverse (a design doc forces the compatibility conversation early)
- Multiple people need to agree on a direction before work fans out
- You want a durable record of "why we chose X and rejected Y" — even if the proposal is later rejected
If the team just needs the concrete contract to code against, use /prd-to-spec instead (or run to-design first, then prd-to-spec).
The Job
- Locate input — find or receive the PRD (or idea)
- Analyze context (optional) — scan the codebase for existing patterns, constraints, and prior art
- Surface the decisions — identify the real design forks and ask clarifying questions (max 3-5)
- Generate the design doc — following the structure and writing style below
- Review — present for feedback, especially on the Rationale and Compatibility sections
- Save — write to the agreed location
Step 1: Locate Input
A design doc can start from a half-formed idea, not only a polished PRD. If the input is thin, lean harder on Step 3.
Step 2: Analyze Context (Optional)
Skip for greenfield. Otherwise scan to ground the design in reality:
- Existing patterns the design should match (naming, error handling, module boundaries)
- Prior art — has something similar been tried or rejected here before?
- Constraints — compatibility promises, public APIs, data the design can't break
- Real pain — find the actual buggy/awkward code the design fixes, so Background can quote it
The most persuasive Background sections quote real code from the user's own repo, not hypotheticals.
Step 3: Surface the Decisions
A design doc lives or dies on its Rationale. Before writing, find the real forks in the road — the points where a competent engineer could reasonably go two ways — and resolve them.
Ask only about genuine forks:
For every fork, also note the option you are NOT choosing — that becomes the Rationale.
Step 4: Design Document Structure
This is the standard skeleton distilled from the 5 Go proposals. Keep section names; drop sections that genuinely don't apply (and say why if the omission is notable).
Writing Style (照搬 Go 文档的文风)
Structure is the skeleton; style is the muscle. Enforce these — they're what make the doc readable.
Voice / 主语
- 决策用 "我们 / We" — 把设计说成一群人可负责的选择,不是客观真理。("We propose…", "我们决定移除…")
- 行为用代码本身当主语 — "this code has a bug" / "这段代码会…",让注意力落在程序上。
- 说理对读者用 "你 / you" — 像面对面解释。
- 禁止无主语的被动腔 — 不写"据建议应当…""It is suggested that…"这类推卸责任的句式。
Sentences / 句子
- 判断用短句,论证用长句。先用一个极短的句子拍板("这段代码有 bug。"),再用信息密集的长句铺开机制。
- 长短交替制造节奏。不要通篇绕来绕去的长句。
Paragraphs / 段落
- 一段只讲一件事,观点放段首(结论先行)。
- 小标题写成一句完整的论点,而不是名词短语。
- 写
老代码不受影响,编译结果与之前完全一致,而不是兼容性。 - 读者光看标题就能读完整条论证链。
Tone / 语气
- 克制的诚实,甚至自嘲。承认代价、承认自己也踩过坑,比形容词更有说服力。
- 强调要省着用。全文只在最关键处加粗/斜体一次,反而最醒目。
Step 5: Review & Iteration
Present the doc and steer feedback to the sections that matter most:
Step 6: Save
Mapping: PRD → Design Doc
| PRD 部分 | Design Doc 部分 | 转化方式 | |
|---|---|---|---|
| Problem / 背景 | Background | 找到真实的痛点代码/场景,量化它 | |
| Goals / 目标 | Abstract + Background | 提炼成"最重要的承诺"埋进摘要 | |
| User Stories / 需求 | Design | 转成渐进式的设计示例 | |
| Technical Considerations | Design + Rationale | 约束 → 设计决策 + 取舍论证 | |
| Non-Goals | Rationale | 写成"我们没做 X,因为 Y" | |
| Risks / 风险 | Compatibility + Implementation | 风险 → 兼容性代价 + 迁移/灰度方案 | |
| 隐含的备选方案 | Rationale | 显式列出并解释为何不选 |
Quality Criteria
A good design doc should pass these checks:
- [ ] 标题是一句"做什么"的结论,不是名词短语,且附了讨论链接
- [ ] 摘要里埋了最重要的承诺/约束
- [ ] Background 用了具体例子或真实代码讲痛点,而非形容词
- [ ] Design 遵循"声明 + 示例 + 边界",并有渐进式教学
- [ ] Rationale 主动列出了至少一个被放弃的方案及原因(最关键的检查项)
- [ ] 凡破坏性变更,Compatibility 都正面承认并列出代价
- [ ] Implementation 用数据/工具支撑"可落地",而非空喊"风险可控"
- [ ] 文风:决策用"我们"、行为用代码、无无主语被动腔;长短句交替;小标题是论点句
- [ ] 没有 "TBD / TODO"——要么解决,要么挪进 Open Questions
Edge Cases & Fallback
| 场景 | 处理 | |
|---|---|---|
| PRD 含糊不全 | 在 Step 3 多问,把缺失项写进 Open Questions / 假设 | |
| 没有真实痛点代码可引 | 用最小可信的示例代码代替,并注明是构造的 | |
| 没有备选方案可写 | 强迫思考"最朴素的做法是什么、为什么不够"——总有一个被否决的基线 | |
| 不是破坏性变更 | Compatibility 一句话说明"纯增量、无破坏",不必硬凑 | |
| 方案最终被否决 | 照样写好——记录"这条路为什么走不通"本身就是高价值产物,Status 标 Rejected | |
| 特性太大 | 拆成多篇 design doc(按边界),互相链接 | |
| 用户只要实现契约 | 提示改用 /prd-to-spec,或先 to-design 再 prd-to-spec |
Anti-Patterns to Avoid
- 别只论证你选的方案。 不写被放弃的备选项,文档就少了一半价值。
- 别用形容词讲痛点。 "现状很糟"没有说服力;一段真实的 bug 代码才有。
- 别藏代价。 性能变慢、行为变化、迁移成本——都明说,再给迁移路径。
- 别把标题写成名词。 "兼容性" → "老代码不受影响,编译结果完全一致"。
- 别用无主语的被动腔。 决策要有人负责,主语用"我们"。
- 别写成 SPEC。 设计文档讲"为什么这么选"和"取舍",不是字段级的实现契约。
- 别因为方案可能被否就敷衍。 文档质量与提案是否通过无关。
Relationship to Other Skills
- /prd 产出 PRD(本 skill 的输入)
- /to-design 产出设计文档:论证方案、暴露取舍、对齐认知(本 skill)
- /prd-to-spec 产出实现级 SPEC:字段、接口、schema 契约
- /code-to-spec 从既有代码逆向出 SPEC(互补:正向 vs 逆向)
写设计文档的终极目的不是"说服别人同意你",而是"让所有人在同一个事实和取舍基础上做决定"。
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckinginternal/builtinskills/skills/to-design/SKILL.md
Popularity
- Repository stars
- 458
- Repository forks
- 63
- 7-day trend score
- 31
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/smallnest/pigo/to-design)