为什么我们需要文档驱动开发?

—— 重新思考 AI 时代的开发范式

An image to describe post

系列导读:这是《用一份 .md,把想法变成产品》系列的第1篇。在这个系列中,我们不仅会讨论文档驱动开发的方法论,更会从零开始构建一个真实的博客系统。跟随卡皮巴拉的旅程,你将学会如何用文档驱动的方式,让 AI 成为你可靠的开发伙伴。


开篇:卡皮巴拉的困境

让我给你讲个故事。

有一只叫卡比的卡皮巴拉,它是一名开发者(是的,水豚也会写代码)。某天,它突然有了一个想法:"我要做一个个人博客,分享我在池塘边的技术思考!"

于是,卡比打开了最新的 AI 编程助手,兴奋地输入:

"给我生成一个个人博客!"

几秒钟后,AI 哗啦啦吐出了一大堆代码。卡比激动地复制粘贴,运行……然后,懵了。

代码能跑,但这不是它想要的博客。样式是 Bootstrap 4(它想要 Tailwind),数据库是 MySQL(它只想用 Markdown 文件),评论系统用的是 Disqus(它想要更轻量的方案)。更糟糕的是,代码结构非常混乱,想改却不知道从哪里下手。

这是 AI 时代开发的第一个困境:生成容易,但不一定是你想要的。

一、当前开发模式的困境:Vibe-coding 的三次失败

An image to describe post

让我们跟随卡比的三次尝试,看看传统的"边想边做"模式在 AI 时代遇到了什么问题。

第一次尝试:直接让 AI 生成

卡比的做法

Prompt: "用 Next.js 做一个个人博客,要有文章列表、详情页、分类功能。"

结果:AI 生成了代码,但是……

  • 使用了 Pages Router(卡比想要 App Router)

  • 文章内容存在 Prisma + PostgreSQL(卡比只想用 Markdown 文件)

  • 样式用的是 CSS Modules(卡比更习惯 Tailwind CSS)

  • 包含了一大堆不需要的功能(RSS、Newsletter、暗黑模式……)

更要命的是,当卡比想要修改时,发现代码高度耦合,改一处牵扯一大片。最后只能推倒重来。

问题根源:AI 不知道你的真实意图,只能根据常见模式生成"看起来合理"的代码。

第二次尝试:详细描述需求

卡比吸取教训,这次写了一个超级详细的需求文档,足足 2000 字,涵盖了:

  • 技术栈(Next.js App Router + Tailwind CSS + TypeScript)

  • 数据存储(本地 Markdown 文件 + frontmatter)

  • 功能清单(文章列表、详情、分类、标签、搜索)

  • 性能要求(首屏加载 < 2s)

  • 设计风格(极简、优雅、响应式)

这次 AI 生成的代码质量好多了,技术栈对了,架构也基本符合预期。

但新问题出现了

  1. 无法演化:当卡比想添加"作者系统"时,发现需要大改数据结构,牵一发动全身。

  2. 需求理解偏差:AI 对"极简"的理解和卡比不一样,生成的页面过于简陋。

  3. 缺乏上下文:后续迭代时,AI 记不住之前的决策,每次都要重新解释一遍架构。

问题根源:需求文档只是"一次性输入",没有形成可持续演化的知识体系。

第三次尝试:文档驱动开发

这次,卡比改变了策略。它没有急着让 AI 生成代码,而是先写了三份文档: