
Shift Left:把时间花在编码之前
过去几个月,Coding Agent 基本成了我每天都会用的工具,我自己已经很少直接写代码了。 去年差不多这个时候,我还在问:Claude Code 真的能在一个维护了 6 年的 repo 里完成实际的开发工作吗?现在看来,这个问题的答案已经很清楚了。 但很长一段时间内,让我头疼的不是 Coding Agent 能不能写出合格的代码,而是我怎么和它一起工作。 之前有一段时间,我同时开了太多 thread。每个 agent 都在疯狂输出,看起来所有的事情都在推进,但最后交付的结果没有一个真正令我满意。也是从那时候开始,我尝试做 Human Context Engineering ,限制同时进行的事情,把自己的注意力留给设计和判断。 这样工作了两个月之后,这个适合我的工作流慢慢清晰了起来。 它其实很简单:Shift Left。 软件工程从来不只是写代码。粗略一点,可以把它分成两部分:左边是理解问题,右边是代码实现。 刚工作那几年,我的大部分时间都花在右边。随着经验越来越丰富,花在左边的时间也越来越多。在 Coding Agent 出现之前,两边大概是 50/50。 我以前会有意识地给写代码留出至少一半时间。因为不管前面想得多清楚,只要代码还没跑起来,接下来会遇到什么其实是个未知数。 可能是兼容性问题导致服务挂了,也可能是刚升级的包改了接口。很多问题必须真的跑一次才会出现。出现以后,还要看 changelog、搜 Stack Overflow,再一个个试可能的解法。 这些事情很花时间。所以我的习惯一直是:不要让计划占据大部分的时间,至少留一半时间给实现。 这个方法以前一直有效,我也很相信它。 Coding Agent 出现之后,这套方法开始不太适用了。 我不可能比 Pi 或 Claude Code 写得更快,也不可能比它更快读完一堆 changelog。到了睡觉时间,我要去睡觉,它还可以继续跑。 但快不代表结果一定可靠。对我来说,最难受的情况并不是 agent 跑得慢,而是它跑了很久之后,交回来一个我不敢用的结果。时间花了,token 也花了,最后还得重新来一遍。 Agent 有点像一辆开到 300 km/h 的赛车。方向对了,很快就能到;方向错了一点,也会很快撞上去。 所以我开始改变分工:把大部分时间放到左边,想清楚之后再交给 agent。 现在我会反复校订 spec,直到它能清楚回答这几个问题: ...


