Learning
VOL. XI · NO. 12 · Bonus Models · 01 JAN 1970

路径依赖:历史的选择比理性更强大

额外模型 · 01 JAN 1970 · 12 min read · 3,037 words
· · ·

你现在为什么用 QWERTY 键盘?不是因为它是打字最快的布局——而是因为历史。路径依赖告诉我们:现在的选择往往不是"最优的",而是"历史上被选中的"——然后锁定住了。

**预计时间:**25 分钟读完 + 25 分钟做练习 = 50 分钟。

本课核心论点
路径依赖(Path Dependence)说的是:一旦某个选择被做出(即使它当时不是最优的),后续的选择就会被这个初始选择限制住——即使现在看来这个选择不是最好的,切换的成本也高于留在原地的成本。它不是说你不能改变——而是说改变的成本可能会让你"理性地"选择留在次优选项上。理解路径依赖,你才能理解为什么很多系统和技术选择看起来"不合理"。

一、路径依赖的经典例子

1.1 QWERTY 键盘

QWERTY 布局最初的设计是为了降低打字速度(防止机械打字机卡键)。电子打字机出现后,卡键问题不存在了——理论上应该切换到更快的布局(如 Dvorak)。但全体用户已经习惯了 QWERTY → 切换的成本(重新学习、硬件更换)远大于留在 QWERTY 的好处 → 锁定了。到现在所有人还在用 19 世纪为了”变慢”而设计的键盘。

1.2 VHS vs Betamax

技术上 Betamax 更好(更清晰的画质)。但 VHS 的录制时间更长,更适合录电影。一旦 VHS 在市场上占据了早期优势 → 更多电影发行 VHS → 更多用户买 VHS 播放器 → 更多内容商发 VHS → Betamax 死了。不是技术最优的赢了——是占据了早期路径的赢了。

1.3 Java 的时间类库

Java 早期的时间类库(java.util.Date)设计有严重问题(可变、线程不安全、月份从 0 开始)。但 Java 8 之前的每一次改进都不能太激进——因为几百万 Java 项目已经依赖了旧的 API。最终只能在 Java 8 中新加一套全新的时间 API(java.time),和旧 API 共存。

二、路径依赖在科技项目中的表现

场景路径依赖表现影响
技术栈选型早期选了某个框架 → 团队都熟练了 → 即使更好的框架出现也不换技术债务积累,团队缺少对新技术的了解
数据库选型MySQL 能满足需求 → 所有项目都用 MySQL → 某天项目需要非关系型数据 → 但团队不会别的 → 用 MySQL 硬撑架构限制,长期维护成本上升
业务规则”我们一直这么做的” → 没人问”为什么这么做”流程僵化,业务规则和实际需求脱节
API 接口一个接口设计得不好 → 但已经被多个客户端用了 → 改不动了 → 一直留着反面接口维护多个版本的 API,复杂度增加
团队分工”一直是交易团队做这个模块的” → 即使换了组织也没调整资源分配不合理

三、如何对抗路径依赖

3.1 定期做”零基审查”(Zero-Based Review)

问自己:如果今天是 Day 0,给我无限自由,我会怎么设计这个系统/流程/规则?然后对比现在的状态——差距就是”路径债务”。

3.2 计算”切换成本”完整的 TCO

很多时候我们能换——但我们低估了不换的长期成本。做一个完整的对比:(a) 留在原路径的 3 年总成本;(b) 切换到新路径的 1 次性切换成本 + 3 年维护成本。你会惊讶地发现,很多路径的切换成本看起来高,但 3 年 ROI 是正的。

3.3 建立”历史包袱”清单

记录团队的每个”历史决策”——包括当时为什么做这个决策、当时的约束条件是什么、那些约束条件现在还在不在。很多时候约束条件已经变了——但大家还在按旧路径走。

3.4 刻意引入”外部视角”

新加入团队的成员是路径依赖的天然对抗者——因为他们没有被旧路径”锁定”。他们的”为什么我们要这么做?“是最宝贵的问题。鼓励新人提问,不要用”我们一直这样”来回答。

芒格怎么说
芒格讲过一个故事:有人问他"为什么你们还在用 QWERTY 键盘?"芒格说:"因为每个人都在用。路径锁定不是靠理性打破的——是靠一个足够大的外部冲击(如重大失败、监管变化、技术颠覆)来解锁的。"芒格的建议:在锁死之前,保持选择权(optionality)——不要让自己被一个选择锁死。

四、实战案例

4.1 案例 1:一个”一直这么做的”审批流程

某金融公司有一个”所有交易对手方变更必须经过三层审批”的规则——10 年前设计时是为了防止操作风险。10 年后,交易系统已经自动化了大部分风控检查——但审批流程还在。每个变更仍然要走 3 周审批。

零基审查:如果今天设计这个流程——“自动风控检查 + 异常情况人工复审”就够了。

结果:审批流程从 3 周降到 1 天——而且风险水平没有变化(因为自动风控检查比 10 年前的人工检查更可靠)。

4.2 案例 2:API 版本兼容性

某 OTP 系统的 API 在 5 年前设计时,交易记录列表接口返回了一个叫 status 的字段,值是”0/1/2”(没有解释)。5 年下来,至少有 8 个外部系统依赖了这些 magic number。任何人想加一个新的状态(如 3=已冻结),都得先确认这 8 个系统不会崩溃。

路径彻底锁死了——不是技术原因,是”切换成本”(通知 8 个系统、测试、同步上线)太高。

缓解方案:新的 API 版本(v2)从一开始就设计为返回字符串(如 “ACTIVE”/“PENDING”)——但即使这样,老客户也没动力迁移,因为运行着好好的。

4.3 案例 3:早期的”选一个”锁定

创业公司早期为了快,选了一个轻量级的数据库(SQLite)。产品成功了,用户量暴增。现在要迁移到 PostgreSQL——但是所有 SQL 查询、ORM 配置、存储过程都是 SQLite 语法。迁移成本极高。创始团队后悔没在一开始就选 PostgreSQL——虽然当时 SQLite “也够用”。

教训:早期选择时要考虑”未来的切换成本”——即使你现在不需要 PostgreSQL 的能力。

五、测验(11 题)

1

路径依赖的核心含义是?

2

QWERTY 键盘的例子说明了?

3

VHS 打败 Betamax 的根本原因是?

4

对抗路径依赖最有效的方法是?

5

"我们一直这么做的"——这句话在路径依赖视角下意味着?

6

创业公司早期应该怎么对抗路径依赖?

7

公司的一个 API 接口"status 返回 0/1/2"——5 年后还在用,因为外部系统依赖了——这是?

8

新人的"为什么我们要这么做"的问题为什么重要?

9

路径依赖和"沉没成本谬误"的区别?

10

芒格的"保持选择权(optionality)"在路径依赖下是什么意思?

场景题

R1

R1. 场景:你加入了一个新公司,发现他们用 5 年前的 Spring Boot 版本 + Java 8,所有新项目也强制用这个组合。开发效率低,但大家说"一直这么用的"。你的路径依赖分析?

R2

R2. 场景:业务方说"我们的结算流程是 8 年前设计的一直没改过,现在业务复杂了,流程撑不住了"。怎么做?

六、答题提示

展开提示

  • Q1-3 核心:初始选择 → 锁定 → 切换成本 > 切换收益。
  • Q4-5 零基审查是抗路径依赖的王牌方法。
  • Q6-7 早期选型要考虑”退出成本”。“一直这么做”是最危险的词。
  • Q8-10 新人是天然破锁者;不要混淆路径依赖(成本锁定)和沉没成本(心理锁定)。
  • R1-R2 渐进式解绑路径依赖——不要试图一次性解决所有锁定。

七、本课行动清单

  1. 找出你当前项目中”一直这么做”的三个事情——做零基审查,看它们是不是路径依赖。
  2. 对团队的技术栈做一次”切换成本评估”:如果今天重新选,会选什么?切换到新方案的代价是什么?值不值得?
  3. 建立一个”技术债务 + 路径依赖”清单——不是所有旧的都是路径依赖(有些旧的是经过验证的好)。把真正的路径依赖标识出来。
  4. 下次做任何早期选型时(框架、工具、流程),不仅问”现在够不够”——也问”如果未来要换,成本高不高”。

八、参考来源

  • ② 经典:Paul A. David,“Clio and the Economics of QWERTY”(1985)——路径依赖经济学的经典论文
  • ③ 严肃著作:W. Brian Arthur,《Increasing Returns and Path Dependence in the Economy》——路径依赖在市场经济中的系统运作
  • ③ 严肃著作:Jared Diamond,《Guns, Germs, and Steel》——文明层面的路径依赖分析
  • ④ 实用读物:Shane Parrish,《The Great Mental Models》——路径依赖作为决策模型的实用介绍

**下一步:**看 Lesson 0013 · 网络效应与临界点