报告显示:AI节省时间但难兑现生产力红利
2026-06-04
2026-06-04 0
准备开始写 SDD 教程之前,我觉得有些话必须先说在前面。

因为如果只讲 SDD 有多好、TDD 有多稳、AI 有多强,很容易给人一种错觉:
但我最近一段时间踩下来的真实感受是:不是这样。
SDD、TDD、AI 都是工具。
工具一定有适用边界。
当场景合适时,它们可以极大提升稳定性和协作效率;但当场景不合适时,它们也会制造额外负担,甚至比人工手写更慢。
这篇文章不是反对 SDD/TDD,也不是唱衰 AI。
相反,我后面还会继续写 SDD 相关教程。
但在开始教程前,我想先把一个前提讲清楚:
最开始接触 SDD、TDD 和 AI 编程时,很容易被一种叙事吸引:
这些说法都没错。
但它们隐含了一个前提:
可现实里,很多复杂需求并不是这样。
有些需求一开始就是模糊的。
有些业务规则要写着写着才知道不合理。
有些边界要接入真实数据后才暴露。
有些历史逻辑没有文档,只能靠看代码和调试慢慢摸。
这种情况下,如果一上来就要求自己写完整 Spec、完整测试、完整任务拆解,很可能会出现一个反效果:
Spec 改一遍,实现改一遍。
测试改一遍,任务清单改一遍。
AI 再根据旧上下文生成一版不匹配的代码。
最后你会发现,流程很完整,但人很累,效率也没有想象中高。
我现在对 SDD 的理解发生了变化。
以前容易把 SDD 理解成:
现在我更愿意把它理解成:
这两个理解差别很大。
如果把 SDD 当成“文档优先”,就很容易写出大量自然语言描述。
这些文档看起来完整,但不一定真的降低风险。
真正有价值的 Spec,应该锁住这些东西:
也就是说,SDD 本质上不是为了让流程显得正式,而是为了降低关键路径上的错误成本。
一句话:
我现在会优先在这些场景使用 SDD,而且通常是轻量 SDD,不是一上来写长篇大论。
比如:
这些场景一旦错了,代价很高。
这时,提前写清楚规则是值得的。
比如 API 输入输出、字段语义、错误码、事件格式。
这些东西一旦被别人依赖,就不能随便改。
提前用 Spec 固化下来,可以减少后续扯皮和返工。
如果一个模块未来会有多人维护,或者会存在几个月甚至更久,那么 Spec 的价值会变高。
因为它不仅服务当前开发,还服务未来交接。
有些代码本身看不出业务意图。
比如:
这类地方非常适合写点状 Spec。
不需要长,只要把“为什么不能乱改”讲清楚。
不是所有需求都值得上完整 SDD。
下面这些场景,我现在会非常克制。
如果需求本身还在试错,比如新业务方向、交互方案、算法策略、运营活动,重型 Spec 很容易变成负担。
因为今天写下来的设计,明天可能就被推翻。
这时候更适合:
如果是你一个人做,而且生命周期很短,比如一次性脚本、临时工具、小范围修复,完整 SDD 往往不划算。
你写 Spec 的时间,可能已经够把功能写完并验证了。
很多 UI 需求不是靠 Spec 推出来的,而是靠看、试、调。
比如间距、动画、交互反馈、页面节奏。
这类需求可以有设计规范和验收标准,但不一定适合写很重的 SDD。
如果需求每天都在变,重型 Spec 会迅速过期。
过期的文档比没有文档更危险。
因为它会给人一种“这里已经被定义过”的错觉。
TDD 的价值也很大。
它能逼你先思考输入输出,能让重构更安全,也能把关键规则变成可执行文档。
但它同样不是银弹。
如果需求还没稳定,你一开始写太多测试,后面会频繁改测试。
这时候测试不再是安全网,而会变成变化阻力。
我现在更倾向于这样使用 TDD:
当然,不先写测试不代表不测试。
而是说:
高风险逻辑必须测。
低风险、高变化的逻辑,可以先验证闭环,稳定后再补测试。
现在我更认可一种混合策略:
也就是说,不要把所有地方都按同一种强度管理。
比如:
这些地方可以更严谨:
比如:
这些地方不必一开始就写重型 Spec。
可以先拆成小任务,人工判断方向,AI 辅助铺代码。
等稳定后,再把真正重要的规则沉淀下来。
以后遇到一个需求,我会先问自己几个问题。
如果会造成资损、数据不可逆、安全问题、合规问题,就值得上 SDD/TDD。
如果只是 UI 展示不对、文案有误、可快速回滚,就不一定要重流程。
如果规则已经明确,适合先写 Spec 和测试。
如果规则还在探索,先别急着把它文档化。
如果会,写清楚很重要。
如果只是一次性任务,文档成本要谨慎。
比起写一大段自然语言,我更推荐优先用:
因为这些东西不只是给人看,也能被工具和 AI 消费。
这是最重要的问题。
如果你发现自己花大量时间在同步 Spec、同步任务、同步测试,而业务没有推进,就要停下来重新评估。
流程应该帮你前进,而不是拖着你走。
AI、SDD、TDD 不是互相替代的关系。
更合理的组合是:
如果顺序反了,就容易出问题。
比如:
这看起来很自动化,但风险很高。
因为一开始的 Spec 可能就是错的。
更稳的方式是:
AI 可以提高产出速度,但不能替你判断什么是正确方向。
后面继续写 SDD 教程时,我会遵循这些原则。
只在关键规则、关键契约、关键风险点上使用。
能用类型、Schema、测试表达的,就不要只写自然语言。
先跑通,后沉淀。
高风险逻辑优先测试,低风险高变化逻辑先保证反馈速度。
AI 可以建议,可以生成,可以 review,但最终边界由人负责。
这篇文章作为 SDD 教程的前言,是想先把一个底层观点说清楚:
不要因为外面都在说 AI 多厉害,就把所有任务都交给 AI。
不要因为 SDD 看起来更工程化,就给所有需求都套完整流程。
不要因为 TDD 代表质量,就在需求还没稳定时写一堆很快过期的测试。
真正成熟的做法,是承认每种方法都有成本,然后判断这份成本是否值得。
我的阶段性公式是:
后续的 SDD 教程,我也会基于这个前提来写。
不是教大家把流程做重,而是教大家:
因为工程方法的目标,从来不是让流程看起来完整。
而是让我们更稳定、更清醒、更高效地把事情做成。