code is cheap, show me your design 分享一个我的 AI 时代的软件开发范式 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bingordinary

code is cheap, show me your design 分享一个我的 AI 时代的软件开发范式

  •  
  •   bingordinary 4 天前 1038 次点击
    最近一年,我自己项目里的代码,从 AI 生成 70% 到现在基本接近 100%。但一个有点反直觉的变化是:写代码反而不再是瓶颈,真正变难的是设计。

    我自己以前的软件开发流程其实很典型先写代码,再补设计,最后再修 bug 。
    在没有 AI 的时候,这套方式是成立的,因为实现本身就是最耗时、最稀缺的部分。但当 AI 开始参与之后,这个前提消失了:代码可以很快生成,甚至几乎没有成本,可系统却开始变得越来越混乱。你会发现,问题不再是“怎么写”,而变成了一个更根本的问题你到底想让这个系统长成什么样?

    当实现不再构成约束,设计就从“附属品”变成了真正的核心。也正是因为这个变化,我开始刻意反过来做一件事:不再从代码出发,而是从设计出发,把“spec”放在最前面,让它成为整个开发过程的起点。SpecFlow 就是在这样的背景下慢慢形成的一个实践方式( https://github.com/Bingordinary/SpecFlow )。

    它本质上不是一个框架,而更像是一种组织开发过程的方式:先定义设计( spec ),再让 AI 按照设计去实现,然后通过持续的 Q&A 去修正系统行为,让结构逐步收敛。你可以把它理解为一种“设计驱动”的开发范式,只不过这里的执行者不再是纯粹的人,而是人和 AI 的协作系统。

    这个项目现在还很早期,也谈不上成熟,但我越来越确定一个方向:当实现变得廉价之后,真正决定系统质量的,不再是代码本身,而是你如何描述、约束和组织这个系统的结构。

    这个不是一个框架,只是一个范式的探索,你可以在这个基础上按照自己的开发习惯进行改造。

    如果你也在用 AI 写代码,或者已经开始觉得“代码不是问题,结构才是问题”,或许我们在面对的是同一个拐点。欢迎一起讨论。Btw ,希望路过的老哥能赏个 Star
    9 条回复    2026-04-23 00:42:37 +08:00
    ohoh
        1
    ohoh  
       4 天前
    spec-kit
    open-spec
    superpower
    gsd
    gstack

    对比优势是?
    bingordinary
        2
    bingordinary  
    OP
       4 天前
    @ohoh 这个问题挺关键的,我一开始其实也用过 bmad 、spec-kit 这类工具。

    后来决定自己做一套,主要是因为我遇到的不是“流程不够好”的问题,而是另外一类问题:

    当 AI 参与之后,仓库里到底什么才算“真”。

    比如:

    spec 还在,但实现已经变了
    代码是对的,但设计已经过期
    agent 按旧理解在执行
    人又在用新的描述去改

    这时候其实没有一个稳定的“真相”,系统是会慢慢漂的。

    所以我在做 SpecFlow 的时候,重点不在“让 AI 更好地执行”,而是在尝试解决另一件事:如何在持续修改中,维护一个一致的设计真相。

    比如:

    谁有权修改
    修改后哪些结论自动失效
    spec / 代码 / 行为不一致时以谁为准

    如果一定要对比的话,我的理解是:

    这些项目更多是在优化 “怎么让 AI 把事情做完”
    SpecFlow 更关注 “做完之后,什么才算是系统的真实状态”

    另外它确实不太像一个 framework 。framework 更像是在既定流程里提供工具和角色( planner / executor / agent 这些),而 SpecFlow 更像是在调整一个更前面的问题:开发应该从哪里开始,以及什么东西才是整个过程的锚点。

    在 AI 参与之前,这个锚点通常是代码;
    但在 AI 参与之后,我觉得这个锚点需要变成“设计本身”
    ohoh
        3
    ohoh  
       4 天前
    也就是每个公司都有自己的一些流程上的差异。
    一个常见的流程:需求 -> 设计 -> 开发 -> 测试。
    实际后面 3 个流程任何一个都可能回归到需求这里的变更,也就是原定的 spec 需要更新,这时候的 spec 不是后续开发的 spec ,更像是你说的对齐标准的,假设我们定义为 PRD.md ,spec 才再是基于 PRD.md 的分解,但是这个 PRD 如何维护,相当于是 PRD -> spec -> plan -> task -> build/implement 。
    对齐的是 PRD ,目前我看到的一些插件,更多的是任务完成后对行为或经验的沉淀,而不是需求的沉淀。
    bingordinary
        4
    bingordinary  
    OP
       4 天前
    @ohoh 我大概理解你的意思,是把 PRD 作为最终的对齐锚点,这个在传统流程里是成立的。

    但我自己在用 AI 的过程中有个感觉:

    PRD 和 spec 这两层开始没那么分得清了。

    以前要分开,是因为:

    PRD 给人看
    spec 给工程师实现

    但现在实现很多是直接交给 AI ,其实更需要的是一份: 既表达需求,又能约束实现的东西

    不然很容易出现:

    PRD 是一版
    实现已经是另一版
    中间改动又是第三版

    最后其实很难说哪个才是“现在的真实状态”。

    所以我现在用 spec 这个词可能不太准确,更像是在指一个把需求和设计揉在一起的描述。

    大概是这个方向,还在摸索。当然,我这么设计的另外一个主要原因是我是个人开发者,所以在我的开发过程中,分工不会像公司那么明确。
    lozzow
        5
    lozzow  
       4 天前
    @bingordinary #2 需要不停的重构,ai 写代码会越来越趋向于补丁,所有要不停的重构,并且以代码量减少作为标准
    bingordinary
        6
    bingordinary  
    OP
       4 天前
    @lozzow 以代码量减少作为标准,这点还蛮有意思的。学习了
    R0Nnn
        7
    R0Nnn  
       2 天前 via iPhone
    请教一下有没有在 AI 接管下的 UI/UX 的设计范式
    Cabana
        8
    Cabana  
       2 天前 via Android
    的确,我也在 vibe 过程中有意无意的意识到这点,然后会下意识的然让 ai 每次修改都需要对应的把涉及到的设计文档同步修改为新的语义
    bingordinary
        9
    bingordinary  
    OP
       2 天前
    @R0Nnn 我现在这个实践方式还是比较适合后端。前端和 UIUX 我最近也在思考怎么弄,我也没想好。我觉得可能的一个方式是对 UI 组件库进行建模和统一调度。但是这种实践就会对开发方式进行强耦合,感觉没有那么优雅。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2873 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 07:34 PVG 15:34 LAX 00:34 JFK 03:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86