以 CATALK 2.1 为例,拆解发现需求、提出方向、让 AI 给方案、选择并修正、落入文档、开发测试六步,讲清每一步人和 AI 各做什么;附三段可直接复制的提示词。
像聊天一样想到哪改到哪,项目会越改越乱。一次有效迭代分六步:点子先进需求池;按版本目标挑需求,每个决定带理由;你给方向、AI 出三个方案比稿;先选方向再精准反馈逐轮修改;定下来的写进 PRD;最后才开发,边写边测并列出没验证的。前五步都不写代码。

很多新手做 Vibe Coding,还在沿用和 AI 聊天的方式:想到一句就丢给 AI 一句,这里改个颜色,那里加个按钮,这个 bug 修一下。
结果不是改了这里,就是坏了那里,越改越乱。这一版到底做了什么,自己都说不清;过几天再打开,下一版也不知道从哪开始。

这一篇以作者自己做的 App CATALK(记录猫咪叫声的软件,已上架 App Store)为例,讲一次完整的迭代闭环怎么做。作者把它分成了六步:

注意,最后一步才是开发。
很多人做迭代,想到一个点子马上丢给 AI,冒出来一个就开干一个。发现需求不是想到就做,而是先把需求攒起来,建一个需求池。
需求一般来自三个方面:

不管点子是什么、从哪来,冒出来时都先不急着做,统一记进一个项目文件里,这就是你的需求池。
在 CATALK 里,需求池是 TODO.md。它有一个规矩:所有新想法都只记在这一个地方,写清楚是什么问题、在哪发现的、哪天记的。

TODO.md 的「迭代方向」一节开头就写着:新想法只记在这里,这是想法和候选功能的唯一入口。
想到一个点子时,先别让 AI 开始干活,这样跟它说:
记录一个问题:(你发现的问题或想法)
把它记进 TODO 的需求池,写清楚是什么问题、在哪发现的、哪天记的。先不要改代码,也不用现在解决。
发现需求不是想到就做,而是先进需求池。需求池和版本目标的更多细节,可以看 有了新点子要不要马上做。
开新版本时,不是把需求池里的全做了。既然是池子,就要挑。用什么标准挑?版本目标。有了目标,需求才有重要程度和优先级。
比如 CATALK 2.1 只解决一件事:让记录更方便。
有了目标,就能让 AI 把项目现状读一遍,按目标列出候选。做 2.1 时,作者开工只说了一句话:
检查一下当前版本还有哪些待排队的修正或者需求。
AI 就按「方便记录」这个目标,列了 8 个候选。
AI 列完候选,很多人只回两个字:做,或者不做。这样 AI 只拿到一个结论,不知道你为什么这么选。作者的习惯是:每一个决定都带一个理由。
比如当时 AI 建议给 CATALK 加一个快捷入口:在主屏幕长按图标就能直接开始录制。作者说这个不做,理由是:自己平时在小区里遇到流浪猫,第一反应是快速打开手机的录像,而不是打开 CATALK。
就这一句话,快捷入口被砍掉了,重点也跟着挪到另一件事上:把相册里已经拍好的视频处理得更好用。

一个需求为什么做、为什么不做,一定要想清楚再开工。这个理由,就是产品的方向。
方向定了,接下来是具体怎么做。新手在这里容易走两个极端:

根据作者的经验,细节问题,AI 往往想得比人更全面;但产品方向,只有你自己知道。正确的分工是:你给方向,AI 推细节。

作者的做法是:只说清楚要做个什么东西、大概包含哪些内容,不让 AI 直接动手,而是在同一个方向上给出三个不同的方案,每个方案都写清楚为什么这么设计。
三个摆在一起,好坏一比就出来了,你自己到底想要什么也会跟着想清楚;每个方案都带着理由,选的时候就知道自己在取舍什么。

2.1 时,作者想把记录流程的第三步从「写一个场景」改成「补充更多信息」。跟 AI 说的只是一个方向:这一步要放封面、视频片段和场景,页面具体怎么排拿不准,先出几个设计稿对比一下,不要急着改。

AI 给了三个方案:
| 方案 | 好处 | 问题 |
|---|---|---|
| ① 一页平铺:封面、视频、场景从上到下全摆出来 | 一眼看全 | 太长,小屏手机按钮被挤出去 |
| ② 封面为主:用大相框放封面 | 像在手账里贴了张照片 | 封面存在感太强,这是录音记录,不是图片记录 |
| ③ 简洁行 + 场景:封面和视频各收成一行,点进去再改 | 和现在的页面交互最接近 | 用户可能不知道封面能换 |

除了三个方案,AI 还在下面列了一张表,把这个页面要面对的问题都抛了出来:没有视频的记录怎么办?点场景快捷词会不会把已经写好的字覆盖掉?每个方案分别怎么解决?

这些细节作者一开始根本没想到,但现在不用自己去想,只要看,然后选。
我想做(一个什么功能 / 页面),它大概要包含:(列出几项内容)。
先不要写代码。在这个方向上给我出 3 个不同的方案,做成能直接看的设计稿HTML,放在一起对比。
每个方案写清楚:为什么这么设计、好处是什么、代价是什么。
最后列出这个功能要面对的问题,每个方案分别怎么解决这个问题
这样既能让你参与到产品设计里,又不用从头去想按钮多大、颜色放什么、文字怎么写。方向和最后拍板的权力在你手上,细节由 AI 补全。
AI 出了几套方案,接下来要选。注意:这时的方案代表的是一种方向,而不是最终定稿。所以不要直接跟 AI 说「就按这个来」。
正确的做法分两步:
AI 第一版给了三套组合,作者选中其中一套布局。布局没问题,但信息太多,显得很拥挤。于是作者指出:提示文字有点多,有一句话出现了两次,一处在大标题下面,一处在输入框里,只要保留一个地方就行。

之后每一轮,作者都只说一两个问题,比如「标题挪到卡片上方」「字数放进输入框里」。前后一共改了 6 版才定稿。

底部更换封面的菜单,三个选项明明已经居中对齐,看着还是有点乱。这时不能跟 AI 说「给我改整齐一点」,而是要找到核心原因:文字长度不一样。让它都改成四个字的选项就可以了。

反馈越具体,AI 越容易做出你想要的结果。
方案定了,很多人就直接说「那你开始写代码吧」。刚定下来的东西全留在聊天记录里,换一个窗口或者多聊几轮,AI 就开始混乱。
正确的做法是:定下来一条,就让 AI 写进 PRD 文档,再照着 PRD 去开发。靠文档驱动 AI 开发,把记忆留在文档里。
把刚才定下来的写进 PRD,每条都写上为什么这么定,不做的也写上原因。
先不要写代码,先改完文档和我确认。
PRD 就是产品需求文档,是一份跟着产品版本走的动态文档。比如前面那条「不论视频长短,流程都一样」的决定,就以日期加理由的形式写在 CATALK 的 PRD 里:

这样,所有迭代讨论在本地都有一个固定的位置。尤其是做较大改动、需要跨对话工作时,也能确保和最初讨论出来的东西一致。为什么要把讨论落成文档,可以看 AI 的记忆该存在文档里,而不是对话里。
到了第六步,才轮到 AI 写代码。但千万不要 AI 说「写完了」就当功能做完了,那只代表代码写完了。功能是不是真的能用,得靠测试。
所以开发时,作者让 AI 一边写一边测,做完再把还没验证的地方列出来,写进项目的进度文件。
CATALK 开发时,AI 做了一套完整的测试用例,让程序把页面自动点一遍,每次开发新功能都跑一次全流程测试。比如 App 会自己合成一段 90 秒的测试视频,在 12 秒、47 秒、75 秒各放一声猫叫,用来走真实的选视频路径。

收尾时,AI 还列了一份还没验证的清单:自动测试做不到、需要在真机上用几分钟真实视频测一遍的项目。这些都写进了项目说明,等作者去测。
到这一步,一次版本迭代的所有步骤才算告一段落,才是一次真正的有效迭代。全流程测试的具体做法,可以看 让 AI 当测试工程师。
再过一遍六步:

| 步骤 | 要点 |
|---|---|
| 1. 发现需求 | 先别急着做,统一记进需求池 TODO.md |
| 2. 提出方向 | 确定这一版的目标,再从池子里挑;每个决定都带上做或不做的理由 |
| 3. 让 AI 给方案 | 你给方向,AI 推细节;拿不准就让它出三个方案比稿 |
| 4. 选择并修正 | 先选方向,再一处一处改细节,反馈要具体 |
| 5. 落入文档 | 定下来的写进 PRD,没讨论过的默认值单独确认 |
| 6. 开发和测试 | 边写边测,把没验证的问题写清楚 |
不要觉得麻烦。你会发现前五步都不是在写代码,而是在思考和留档,为开发做准备。
一句话做个小 demo、一个简单单页,没有问题。但如果想做一个真正能用的产品,就得把想法细化成方案,把方案做成文档,再用文档推动 AI 开发。这样做出来的东西,每一处都经过你的思考,有明确的想法,也能追溯回去。
每一步里「人」该做什么判断,可以接着看 AI 这么强了,人还能干什么。
六步:发现需求(先进需求池)、提出方向(按版本目标挑,每个决定带理由)、让 AI 给方案(同一方向出三个方案比稿)、选择并修正(先选方向,再精准反馈逐轮修改)、落入文档(写进 PRD)、开发和测试(边写边测,列出没验证的)。
先不要。让 AI 把它记进 TODO 的需求池,写清楚是什么问题、在哪发现的、哪天记的,先不改代码。开新版本时再按版本目标从池子里挑。
只说清楚要做什么、包含哪些内容,让 AI 先不写代码,在同一方向上出 3 个能直接看的 HTML 设计稿,每个写清为什么这么设计、好处和代价,并列出要面对的问题和各方案的解法。你负责看和选。
每一轮只改一两处,说清楚改哪里、改成什么样、为什么改。不要说「改整齐一点」这种模糊要求,要先找到核心原因,比如菜单看着乱是因为选项字数不一样。