🧡 第九章 从零开始构建一个完整产品
📄 一句话概括

先写一份能被你挑刺的 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 秒实验

  1. 把你手上那个想法写成 SPEC,五块都要有。写不出【边界】说明还没想清楚。
  2. 写完之后拿给一个不懂技术的人看,让他复述你要做什么。

常见误区

  1. 跳过 Phase 0 直接开写。同样的挑刺,改代码的成本是改 SPEC 的十倍。
  2. 把 SPEC 写成需求文档。它只需要五块,写多了没人维护。
自测三问(点开对答案) 1. Phase 0 产出的 SPEC 含哪五块? —— 一句话目标、输入、输出、边界、验收。 2. 哪一块最值钱? —— 边界(不要什么)——它挡住三类常识性自作主张。 3. 为什么挑刺要趁早? —— 在 SPEC 上改一句话,在代码上改一大片还要重跑——成本差十倍。

相关笔记