非目标
Non-goal也常被叫作:这次不做什么不在范围内Out of scope
「本来只想做个登录,做到一半冒出来找回密码、验证码、第三方登录……」
非目标 Non-goal
明确写下这次不做哪些事,让一个需求不会自己长大。
我们打包交付的那天,「不带走清单」和功能清单一样长:任务数据(381MB)不带、游戏截图不带、内部工具不带、密钥绝对不带。这份清单的价值在事后才显现——泄漏扫描直接照单执行,四道检查没有一项需要临场纠结「这个该不该带」。没有它,每次打包都要把同样的纠结重新过一遍。
做需求时同理。需求膨胀有个特点:每一条追加都很合理。做登录,那当然要有找回密码;有找回密码,那要发邮件;发邮件,那要配邮件服务……每一步都对,合起来就是这个功能永远做不完。
非目标就是这根刹车。它不否认那些事值得做,只是说这一轮不做。和 AI 协作时它还有一个特别的作用:防止它替你补齐。你说做登录,它可能顺手把注册、找回密码、记住我全做了——然后你面对一堆没验证过的代码,不知道从哪儿开始验。写清「这次只做邮箱密码登录,其余都不做」,交付面就小到你能验完。
写非目标有两条实用心法。第一,要写具体名字,不要写「其他复杂功能不做」。「其他」这个词等于没有写——AI 和你对「复杂」的理解完全不同。把每一个你担心会混进来的东西点名写出来:找回密码、第三方登录、验证码、发邮件、记住我。第二,砍掉的东西要记在别处。非目标不是否决,是排队。把「以后要做」的清单单独放在一边,这一轮结束、或者产品真正需要时再捡起来。
最后诚实地说:非目标写得好不好,自己最容易骗自己。检验方法很简单——回头看看这一次的交付里,有没有出现清单上没有的东西。出现了,就是非目标没写到位,或 AI 没遵守;一次都没有,才说明这条刹车真的在工作。
长什么样 真实可交互,不是截图
登录成功跳回首页
密码错误给提示
第三方登录
验证码
发邮件
记住我
右边不是「不重要」,是「不在这一轮」。写出来它们就不会偷偷混进这次的交付里。
拆开看,里面有这几块
-
1
本轮目标 In scope
这次要做成的事,少而明确。
-
2
非目标 Out of scope
这次明确不做的事。要写具体名字,不要写「其他都不做」。
-
3
以后再说 Later
把砍掉的东西记在一个地方。非目标不是否决,是排队。
容易搞混?这样区分
什么时候用得上
先写三条非目标。三条写不出来,说明你还没想清这次到底要什么。
它建议的往往是对的。回一句「有道理,但这一轮不做,先记下来」。
多半是范围偷偷长大了。回头补非目标,砍回能验完的大小。
你可以这样跟 AI 说
直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。
【本轮目标】只做 [一件具体的事] 【本轮非目标】以下这些**这次都不做**,即使你觉得顺便做了更完整: - [具体功能 1] - [具体功能 2] - [具体功能 3] 【处理方式】如果你在实现中发现某个非目标是必须的,先停下来告诉我为什么,等我决定,不要自己加上。 【交付】做完后明确告诉我:本轮目标达成了没有;有没有任何非目标里的东西被顺带实现了(如果有,说清是哪些)。
最后一问「有没有非目标被顺带实现」很有用:顺带做的功能通常没验证过,而它会跟着这次改动一起上线。
它说「做好了」,你怎么自己验
这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「实现」这层:代码写完了,能读能改,但没被验证过。
要亲眼看到这些,才算数
- 对照非目标清单,逐条确认没有被实现(顺带实现的东西也是未验证的东西)。
- 本轮目标是不是完整达成了——非目标的作用是聚焦,不是给缩水找理由。
- 问一句「你有没有为将来的功能提前埋代码」。提前埋的通常没人验、也没人记得。
- 确认被砍掉的需求记在了某个地方,不是消失了。
它常这么糊弄你
- 「我顺便把找回密码也做了」——听起来是效率,实际是把未验证的代码塞进了本次交付。
- 「为以后扩展预留了接口」——预留的东西通常无人使用、无人验证,却会被一起上线。
- 用非目标当借口交付一个半成品:本轮目标本身也没做完。
- 非目标写得太抽象(「其他复杂功能不做」),等于没写。要写具体名字。
非目标验到「实现」层就够:对照清单看有没有多做,不需要运行。
考考你 选一个你觉得对的
AI 说「我顺便把找回密码功能也一起实现了,这样更完整」。最合适的回应是?
顺带实现的功能不是免费的:它会跟着本次改动一起进入线上,但没有验收标准、没人测过。A 先守住本轮目标,再把多出来的东西暴露成一个需要决定的事项。C 太急(也许留着有用),D 会让交付面直接失控。