--- name: think-orthogonal description: 思维模型:正交、分形、矩阵。列清单、拆设计、划边界或定位一类反复出现的问题之前,先拆出独立变化的轴,每条轴归一个拥有者;把轴交叉成表逐格看,每格要么有答案要么写明不适用;再问这个结构在大一层和小一层是不是同一个,是就只设计一次。凭感觉列清单、同一个判断在两处各写一遍、一个概念的状态在决定另一个领域的事、特例越补越多时加载;人说「先找轴」「拆成矩阵」「这是同一个结构」,或点名 /think-orthogonal 时也加载。只有一个量在变、没有可拆的不加载。 --- # 正交、分形、矩阵 回答的问题:这个问题的空间怎么拆。正交是「几个量各自变化,互不决定」,例如流程走到哪一步与这一步怎么想是两件事,任何一步都可能用到任何一种想法。矩阵是把这样的轴交叉成表逐格看,例如 13 个环节乘 5 个思维模型,每一格问一次有没有关系。分形是同一个结构在大小尺度上重复,例如一程和一个切片都走拆、找差异、定形、建、证五步。 ## 三句动作 1. **正交:这个问题里有哪几个独立变化的量,每个量归谁管。** 剥掉问题里的机制名,问真正在变的是什么。一个量的取值不该决定另一个量;决定了,就是两条轴缠在了一起。 2. **矩阵:把轴交叉成表,逐格看。** 每格要么有答案,要么写明不适用。空着的格是漏掉的,重复的格是多余的。 3. **分形:这个结构在更大和更小的尺度上是不是同一个。** 是,就只设计一次,每一层复用同一套;不是,写明差在哪。 拆不出轴,说明问题还停在症状上。先回到「真正在变的是什么」,不急着列方案。 ## 各类工作里怎么用 | 这类工作 | 轴从哪找 | 矩阵的格是什么 | 展开 | | --- | --- | --- | --- | | 需求与验收 | 角色、场景、情形(正常、失败、未知、取消与清理、外部效果) | 每个角色在每种情形下看到什么 | [需求与设计](requirements-and-design.md) | | 领域与边界 | 身份、授权、落点、寿命、观察、装配 | 每条事实归哪条轴、哪个拥有者 | [需求与设计](requirements-and-design.md) | | 状态与操作 | 状态、操作 | 每个操作在每个状态下的答复,即全化表 | [需求与设计](requirements-and-design.md) | | 切片与验收 | 验收标准、切片 | 每条验收落在哪一片 | [计划与收口](planning.md) | | 定位一类反复的问题 | 输入、环境、时序 | 哪几格复现、哪几格不复现 | [定位与重构](diagnose-and-refactor.md) | | 重构或写一套规则 | 规则要回答的问题、用到它的场合 | 每条规则在每个场合里成不成立 | [定位与重构](diagnose-and-refactor.md) | ## 写在哪 不新开文档。轴与矩阵写在本来就要写的产出里:领域影响分级表的轴与拥有者、spec 的失败语义表、开工包的全化表与关键位置、plan「顺序与并行」的「切片的轴」一行。没有产出的小活,在回复里写一句:拆成了哪几条轴。 ## 什么时候必须重做 - 凭感觉列了一张清单,说不出为什么是这几项。 - 同一个判断在两处各写了一遍。 - 一个概念的状态在决定另一个领域的事,或一个默认值悄悄成了边界。 - 特例越补越多。 - 一个答案有两个来自不同领域的理由。 ## 相邻的模型 `think-ought-vs-is`:这件事的工作到底是什么。`think-model-first`:代码该长成什么形状。`think-right-then-well`:按什么顺序建,怎样算好。`think-evidence`:怎么知道它是真的。`think-closed-loop`:这件事该由谁做,一次做多大,多久看一次。