--- name: think-right-then-well description: 思维模型:先做对,再做好。写代码分两轮:做对只求验收标准逐条过、测试先红后绿,不打磨;做好一轮不加能力,只改实现;好不好由结构读数、差分变异和一份品味核对单判,核对单每问指到代码位置作答。开始实现一个切片或一个修复、做对之后准备收口、发现自己一边找正确一边打磨时加载;人说「先做对」「做好一轮」「品味呢」,或点名 /think-right-then-well 时也加载。只改文档、不写代码不加载。 --- # 先做对,再做好 回答的问题:按什么顺序建,怎样算好。做对是「需求要的能力正确兑现」,例如五条验收标准全过、测试先红后绿。做好是「同样的能力,实现更简洁、放在对的位置」,例如把散在三处的同一个状态判断收进一个类型。两件事分两轮做。 ## 三句动作 1. **做对:只求验收标准逐条过,测试先红后绿。** 这一轮不打磨。还不知道对的形状时,打磨的是猜测。 2. **做好一轮:不加能力,只改实现。** 更简洁,更优雅,放到架构上正确的位置,spec 写明的性能要求不退化。两轮分开做,每一轮都短;混在一起会一边找正确一边打磨,两头都慢。 3. **好不好由三样东西判。** 结构读数:复杂度、依赖方向、哪些函数变差了。差分变异:测试有没有真的守住这次改动。品味核对单:架构位置、领域边界、SOLID 五条各一问。前两样机器给,第三样每问指到代码位置作答。 做好一轮做完,三样都交代过,才进收口。读数与核对单没有可改的,也要写出看过哪里。 ## 各类工作里怎么用 | 这类工作 | 做对是什么 | 做好一轮是什么 | 展开 | | --- | --- | --- | --- | | 实现一个切片 | 开工包写的会红的测试变绿,本片的验收标准逐条过 | 按读数与核对单收拾本片改动的代码 | [两轮](two-rounds.md) | | 修一个缺陷 | 先写复现它的测试,看它变红,再修到绿 | 修的位置对不对、为绕开它加的东西删了没有 | [两轮](two-rounds.md) | | 有性能要求 | spec 写了要求或测量显示不满足,优化属于做对 | 不为读数好看再优化 | [两轮](two-rounds.md) | | 派写者 | 简报写清做对的判据与验收命令 | 简报写明要不要做好一轮、核对单由谁核 | [两轮](two-rounds.md) | | 做好一轮 | 不适用 | 结构读数、差分变异与核对单逐项过 | [品味核对单](taste-checklist.md) | ## 写在哪 不新开文档。开工包「细化的推进方案」写做对与做好一轮两步,里程碑待办清单各一项。收口清单的「做好一轮」一项写改了什么,品味核对单的答案写在它下面。没有产出的小活,在回复里各写一句:怎样算做对了,做好一轮改了什么。 ## 什么时候必须重做 - 测试还没绿,就开始改名、抽函数、挪文件。 - 做好一轮里加了能力,或改了行为。 - 结构读数有变差的函数,没有交代。 - 核对单有一问没有指到代码位置。 - 一个切片的提交越来越多,而验收标准还没过完。 ## 相邻的模型 `think-ought-vs-is`:这件事的工作到底是什么。`think-orthogonal`:这个问题的空间怎么拆。`think-model-first`:代码该长成什么形状。`think-evidence`:怎么知道它是真的。`think-closed-loop`:这件事该由谁做,一次做多大,多久看一次。