用薄切片让 /sdd-flow 不再压垮我
TL;DR
用 /sdd-flow 一次性搞定功能确实管用——直到你野心太大、项目太复杂,还同时并行两三个。解决方法就是放慢脚步,交付更薄的切片 (slice),把评审和交付物都控制在自己手里。全新的逐切片 (per-slice) 交付模式已经上线了。
一大坨翔
我以为自己已经掌握了用 Claude Code 做规格驱动开发,甚至觉得自己成了智能编程超人。然而,当野心超过能力的那一刻,一切都崩了。智能编程越来越强大,但在更复杂的场景下,开发者仍然需要保持密切监督。
大约六个月前,我为软件项目构建了这个 SDD 开发工作流插件,用来把"研究—规划—实现"的循环应用到项目开发中。从使用经验中不断学习,我持续调整插件,加入了额外的评审阶段和自动纠错步骤。效果好到让我觉得可以把整个流程更充分地自动化,于是创建了 /sdd-flow 技能。这让我能一次性搞定功能(我这里"一次性"用得比较宽泛,因为还是有澄清和评审步骤的)。这招挺好用的,直到项目变复杂,"一次性"意味着同时处理太多需求和期望。简而言之,我把 Kool-Aid 喝进去了,真信了 AI 能搞定一切。
同时并行推进好几个项目,只会让这团乱更乱。我有点不知所措,然后开始无视正常操作,变得急躁又粗心。说实话,我就是想赶紧到达终点。我不理智地迷上了"交付"这件事。结果我确实交付了——用了三周开发、一周调试、试图把项目掰回正轨之后,我交付了一堂重要的课。我重新发现了智能编程和 AI 模型能力的边界,以及我自己作为人类的局限。
更薄的切片
于是我退了几步,重新审视我的开发流程,包括我自己主导的部分和代理运行的部分。
首先要解决的是编程代理通常构建多层应用的方式。它们会把整个层级凭空生成出来,再移步下一层。拿一个有前端和后端的应用来说:代理先交付整个前端——通常是大量功能——然后再搞后端。这样走好几轮都没法做端到端测试。
接下来的问题更讽刺:虽然我对应用做了完整的单元测试和端到端测试,结果却越来越糟。我过于依赖这些测试作为质量和完整性的保证,结果跳过了人工评审。压力之下,我走了捷径,直接输入下一条提示词,掷骰子,继续赌。这真的很蠢。
为了找到更好地影响编程代理交付方式的方法,同时纠正我自己的行为,我思考了一个问题:如果用"老方法"、GenAI 之前的方式来做这样的项目,我通常会怎么做?如果你有一个功能丰富的应用,甚至只是一个复杂的功能,你会专注于把一个非常具体的切片 (slice) 做成。你会从头到尾开发它,把从后端到前端的各层全部打通,让人类用户尽早能够测试到实际可用的东西。
这种垂直切片 (vertical slice) 的开发方式,应用到编程代理上,会:
- 强制代理更专注。
- 让我更容易测试和评审交付的内容。
- 帮我更好地追踪交付进度,更快纠正偏差。
最后一点很关键,因为它关联到我需要解决的另一个行为问题。我太在乎速度,又被之前的成功冲昏了头,结果开发得太多、太快。我需要放慢。
切片开发让我更容易消化工作内容,坚持做更彻底的评审。与其每个功能都走一遍研究→规格→实现的循环,不如提前把功能拆解成垂直切片 (vertical slice)。你保留了循环内的速度优势(阶段间无需人工交接),同时找回了监督优势。你评审的东西小到真的能看懂,也愿意花时间看。对于用编程代理并行开发多个项目来说,这是更合适的方式。
软件开发是很个人的事。这套方法符合我的风格、我的约束和我的经验。
重拾掌控感
最终,并行开发的三个项目里,有两个顺利上线了。第三个,也是最复杂的那个——正是这次整个反思的导火索——我把它冲进了马桶。它乱成一锅粥,我对它完全没有信心,重头来反而更明智。而且这让我得以开始测试这篇文章里讨论的一切。
结果让我非常满意,无论是代理现在的行为方式,还是它倒逼我改变自己的行为方式。应用现在有了一套更专注的初始功能。我对自己在做什么、如何持续推进,有了更清晰的把握。
这种掌控感让我得以重新并行推进另外两个项目。三个项目似乎是我的神奇数字。但我现在以更理智、更健康的节奏运转了。
放大视角——更深的含义
编程代理不是你直接拿来用的成品。对很多场景,它们开箱即用;但对很多更复杂的场景,它们需要根据你的开发方式进行调整和定制。你必须达到一个程度,理解在一个开发周期里,对自己来说以及对代理来说,事情是怎么流转的。
有一些人非常积极地分享对他们有效的方法,我也是其中之一。参考多种视角和经验很重要,它有助于为你自己的实验提供素材,但归根结底,还是要靠你综合这些信息,找到适合自己、符合自己风格、契合自己流程的东西。这需要投入和实验。
这个寻找正确对齐的过程包含一些非正式的"感觉"评估。要想从这些工具中获得最大价值、发挥最大效用,你需要更科学的方法。幸运的是,最近有一些新发布的工具,让做正式评估和捕获全面追踪变得容易,从而帮你找出编程代理哪里出了问题、哪里可以改进。下一篇文章会详细聊这个。
在那之前,请记住:一个智能编程工具一开始就是一把大铁锤。把手柄定制成适合你手的形状。当工作需要精准时,把它变成一把螺丝刀。不断把这项美妙而令人生畏的技术塑造成服务于你自己目标的样子。
使用切片模式
这个技能需要加上一个标志来启用垂直切片开发模式:/sdd-flow delivery_mode: per-slice
该技能属于 agent-engineering 插件。