📄 一句话概括
先写一份能被你挑刺的 SPEC;它能在动手之前挑刺,而一旦开始写代码,同样的挑刺要付出十倍代价。
📝 本节和前面几节的关系
这一节是整条产品线里最容易被跳过、也最容易事后后悔的一步。
一、Phase 0 到底产出什么
一份 SPEC,五块:一句话目标、输入、输出、边界、验收。 本节的演示真写了一份给你看,十几行就够。 它不是需求文档——它是给你自己挑刺用的。
二、【边界】这一块最值钱
输出好写,难的是不要什么:不做界面、不抓正文、不自动发送。 这三条各自挡住一类自作主张——而且它们全都是常识性动作,不写它就会顺手做掉。 这正是第 2.6 节四件套里【不要什么】那条,在项目级的落地。
三、【验收】这一块决定后面所有阶段顺不顺
验收标准写成一句可执行的话:每条都有标题、摘要、链接三样,缺一条就报错。 有了它,Phase 2 每做一小步都能立刻验证;没有它,做完了也说不清算不算好。 所以验收不是最后才想的事,它是开工前定的第一条。
四、为什么挑刺要趁早
在 SPEC 上挑一句刺,改的是一句话。 在代码上挑同样的刺,改的是一大片,还要重跑一遍。 本节的结论:挑刺的成本差十倍——所以能改的时候,改在最开始。
五、动手 Demo:Phase 0——先别急着写代码
下面真写一份 SPEC 到临时目录,看它长什么样。
spec = [u"# 一句话目标", u"把本周收集的 AI 新闻整理成一页可发送的周报。",
u"", u"# 边界(不要什么)", u"- 不做网页界面,先只产出 markdown",
u"- 不抓取网页正文,只处理我给的链接",
u" u"- 不自动发送,只生成本地文件",
u"", u"# 验收", u"每条都有标题、摘要、链接三样,缺一条就报错。"]
io.open(path, "w", encoding="utf-8").write(u"\n".join(spec) + u"\n")
实跑输出:
--------------------------------------------------------------------
Phase 0——先别急着写代码
--------------------------------------------------------------------
这一步最容易被跳过,也最容易事后后悔。下面是真跑一遍需求定型:
产出 SPEC.md:16 行
# 一句话目标
# 输入
# 输出
# 边界(不要什么)
# 验收
这份东西有一个好处:**它能在动手之前被你自己挑刺**。
而一旦开始写代码,同样的挑刺就要付出十倍的代价。
输出里那份 SPEC 只有十几行——它不是需求文档,是给你挑刺用的。 【边界】那一块最值钱:三条各自挡住一类自作主张,而且全都是常识性动作,不写就会被顺手做掉。
30 秒实验
- 把你手上那个想法写成 SPEC,五块都要有。写不出【边界】说明还没想清楚。
- 写完之后拿给一个不懂技术的人看,让他复述你要做什么。
常见误区
- 跳过 Phase 0 直接开写。同样的挑刺,改代码的成本是改 SPEC 的十倍。
- 把 SPEC 写成需求文档。它只需要五块,写多了没人维护。
自测三问(点开对答案)
1. Phase 0 产出的 SPEC 含哪五块? —— 一句话目标、输入、输出、边界、验收。 2. 哪一块最值钱? —— 边界(不要什么)——它挡住三类常识性自作主张。 3. 为什么挑刺要趁早? —— 在 SPEC 上改一句话,在代码上改一大片还要重跑——成本差十倍。- ☐ 下一节(9.3 Phase 1:项目初始化)
相关笔记
- 🐳 DeepSeek Harness技术架构原理 · 索引 — 项目结构与工程约定
- 🧡 Claude Code橙皮书 · 索引