Skip to content

Evolution Vs Iteration ​

解决什么问题:让团队区分"迭代"和"演化"——避免把"渐进式变更"当作"结构性重构",避免把"长期架构变形"压成"短期小步快跑"。两者节奏、单位、可逆性完全不同,混在一起就会出错。

它是什么 ​

演化(Evolution) 和 迭代(Iteration) 都是"系统随时间变化",但变化的对象、节奏、可逆性完全不同:

  • 迭代(Iteration):在同一个架构内做小步改动——加 feature、修 bug、调参数、做 AB。架构的形状不变。
  • 演化(Evolution):架构的形状本身变了——单体拆微服务、关系库换事件溯源、单团队变多团队、串行变并行。结构变了。

钱学森 Ch 18 §18.1 开篇区分了两类控制系统: "第一类是具有完备先验信息的系统……第二类是掌握不完备先验信息的系统"。 迭代 = 第一类(在已知结构内优化),演化 = 第二类(结构本身在变)。

SE@G Ch 22 直接指出: "Large-scale changes are fundamentally different from regular code changes——regular change 修改的是行为,large-scale change 修改的是结构。"

关键属性 ​

属性迭代(Iteration)演化(Evolution)
变化对象行为 / 参数 / 数据结构 / 边界 / 拓扑
节奏短周期(小时 ~ 天)长周期(季度 ~ 年)
可逆性容易回滚(一次提交回滚)难回滚(结构变了回不去)
决策者个人 / 小组架构师 / 跨团队
测试粒度单元 / 集成测试端到端 / 混沌 / 跨团队演练
失败模式短期性能 / 体验下降长期熵增 / 协调成本失控
对应控制论自适应(参数变)Ch 18演化(结构变)Ch 18+21
对应 SE@G普通 code changeLarge-Scale Change Ch 22
对应 V2 节点B5 反馈微调B7 演化(主节点)

怎么用 ​

场景 1:判断"这是迭代还是演化" ​

提问清单:

1. 这次改动有没有改变模块边界 / 服务边界 / 团队边界?
   → 没变 = 迭代;变了 = 演化

2. 这次改动需要跨团队协调吗?
   → 不用 = 迭代;需要 = 演化

3. 这次改动一旦上线,6 个月内能回滚吗?
   → 能 = 迭代;难 = 演化

4. 这次改动会不会改变数据模型的核心 schema?
   → 不变 = 迭代;变 = 演化

判断反例:把"拆服务"用迭代的方式做(一次提交拆完)= 失败;把"加一个开关"用演化的方式做(开架构评审)= 浪费。

场景 2:迭代的工程纪律 ​

迭代应该:

  • 短周期(< 1 周)
  • 单团队决策
  • 灰度发布 + 快速回滚
  • AB 实验验证效果
  • 不动结构

工具:CI/CD、feature flag、AB 测试平台、监控告警。

场景 3:演化的工程纪律 ​

演化应该:

  • 长周期(季度级)
  • 跨团队协调
  • 渐进式重构(不是 big-bang)
  • ADR(架构决策记录)明确目标
  • 有明确的"完成定义"(什么时候算演完了)

工具:SE@G Ch 22 Large-Scale Changes、LSC 工具链、deprecation 纪律(Ch 15)、monorepo(Ch 16)。

场景 4:迭代累积成演化(最常被忽略) ​

迭代 1:  加一个 if 分支处理新场景
迭代 2:  再加一个 if 分支
迭代 3:  函数已经 7 层嵌套
迭代 4:  测试覆盖下降,bug 频发
迭代 5:  必须重写 ← 这就是演化

教训:迭代累积是"演化的最常见诱因"——
     不是"我们要演化",而是"我们不演化就死了"

应对:每个迭代周期(季度)做一次"演化审视"——是不是某些迭代已经累积到必须演化的程度。

常见误区 ​

  1. "迭代 = 演化" ——错。迭代不改结构,演化改结构。把"拆微服务"当迭代做 = 一次性大爆炸;把"加 feature"当演化做 = 浪费
  2. "演化 = 一次大重构" ——错(V2 B7 段 5 反对)。演化 = 渐进式,让结构自己长出来,不是 big-bang 切换
  3. "演化 = 架构师的事,迭代 = 工程师的事" ——错。每次迭代都可能触发演化,工程师必须能识别"什么时候该升级到演化"
  4. "演化 = 可选" ——错。V2 B7:业务在演化,架构必须跟着演化,不演化 = 系统死亡
  5. "迭代快就好" ——错。迭代快但不改结构 = 在腐烂的结构上加 feature。迭代速度 × 演化纪律 = 长期能力

关键洞察 ​

迭代改行为,演化改结构。 迭代 = 在已知结构内优化(B5 反馈 + 自适应);演化 = 结构本身在变(B7 自然演化)。 控制论 Ch 18 的两类系统(完备 vs 不完备先验信息)正是这两个的数学分界。 判断标准:改了模块边界 = 演化;没改 = 迭代。别把演化当迭代,也别把迭代当演化。

相关链接 ​

从名家方法论与工程化思路中蒸馏出自己的工程体系。