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 change | Large-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: 必须重写 ← 这就是演化
教训:迭代累积是"演化的最常见诱因"——
不是"我们要演化",而是"我们不演化就死了"应对:每个迭代周期(季度)做一次"演化审视"——是不是某些迭代已经累积到必须演化的程度。
常见误区
- "迭代 = 演化" ——错。迭代不改结构,演化改结构。把"拆微服务"当迭代做 = 一次性大爆炸;把"加 feature"当演化做 = 浪费
- "演化 = 一次大重构" ——错(V2 B7 段 5 反对)。演化 = 渐进式,让结构自己长出来,不是 big-bang 切换
- "演化 = 架构师的事,迭代 = 工程师的事" ——错。每次迭代都可能触发演化,工程师必须能识别"什么时候该升级到演化"
- "演化 = 可选" ——错。V2 B7:业务在演化,架构必须跟着演化,不演化 = 系统死亡
- "迭代快就好" ——错。迭代快但不改结构 = 在腐烂的结构上加 feature。迭代速度 × 演化纪律 = 长期能力
关键洞察
迭代改行为,演化改结构。 迭代 = 在已知结构内优化(B5 反馈 + 自适应);演化 = 结构本身在变(B7 自然演化)。 控制论 Ch 18 的两类系统(完备 vs 不完备先验信息)正是这两个的数学分界。 判断标准:改了模块边界 = 演化;没改 = 迭代。别把演化当迭代,也别把迭代当演化。
相关链接
- L5 Index——L5 演化层是什么
- Refactor——演化的战术工具
- Large-Scale Changes——演化的 SE@G 模板
- [V3 涌现之时] · 演化——主节点:自然演化
- [V3 涌现作为] · 反馈——迭代的反馈驱动
- 工程控制论 Ch 18 §18.1 自镇定与自适应——两类控制系统的分界
- SE@G Ch 22 Large-Scale Changes——演化的工程模板