三个月后回看自己的记录,最常见的感受不是"用上了",而是"看不懂"。工单里一行 待处理,笔记里一句 这里有问题,回头看看。写下时上下文完整得不需要解释;三个月后剩下的只有这行字,和它带来的困惑。
备忘失效的根因只有一句话:它假设了未来的你还拥有现在的上下文。上下文不在纸上,它在短期记忆、刚开过的会、刚踩过的坑里,这三样的衰减速度都以天计。下面给判据:什么必须落纸、什么写多了反而误事、怎么知道自己写的到底有用。
1. 失效的三条机制:缺的不是信息,是坐标
把一次备忘失效拆开看,缺的永远是三样东西中的一样,而它们的补写成本差两个数量级。
| 缺失 | 重读时的表现 | 写时多花 |
|---|---|---|
| 问题状态:当时在解决什么 | 不知道这行字针对哪个需求 | 一句话 |
| 排除集:已确认不行的路 | 把死路重新走一遍 | 半行 |
| 动作意图:当时打算做什么 | 猜不出"待处理"是什么动作 | 一行 |
代价最不对称的是排除集。它是唯一"不写就完全丢失"的东西——失败的尝试不留痕迹,成功的尝试会留在代码和系统里。三个月后你只会重新怀疑那个已被排除的方案,再花掉和第一次一样多的时间排一遍。
粗糙但有效的检验:把备忘读给旁边的人听,问他能不能接着干。对方判断不出下一步动哪,说明缺的是坐标而非信息。还原成本超过十分钟的内容,等于没写。
2. 四个格子:记录时该补什么
一条能用的备忘在回答四个问题。这不是格式要求,是成本分水岭:填满多花约三十秒,缺任何一格,重建成本从三十秒跳到半小时。
| 格子 | 回答的问题 | 缺了它 |
|---|---|---|
| 触发 | 在解决什么问题、谁推动 | 不知还算不算数 |
| 排除 | 确认过哪些方向不行 | 重复最贵的劳动 |
| 依据 | 为什么选这个方向 | 结论过期无法复算 |
| 动作 | 下一步动什么、何时动 | 永久停在"待处理" |
内容按重建难度排序,而非按重要性:最重要的结论往往最容易重算,最难重建的恰恰是排除集和别人的口头约束。真实顺序常是"先写排除集,最后写结论"。
反向错误同样常见:把记录写成工作日志。"上午看了 A,下午看了 B"三天后没人读——它记的是过程而非状态。
3. 结论与依据分开:结论会过期,依据不会
混在一段里写,代价是结论一过期整条报废,哪怕里面的依据今天依然成立。
| 内容 | 三个月后 | 一年后 |
|---|---|---|
| 结论:选方案 A | 需复核 | 大概率失效 |
| 依据:A 延迟低一个量级,无额外组件 | 仍成立 | 部分成立 |
| 依据里的前提:QPS 在万级以下 | 需确认 | 可能不成立 |
判定方法:句中出现"所以/因此/决定",后面是结论;出现"因为/前提是",前面是依据。分行加标签,未来的你才知道该复核哪一半。
依据里最值钱的是前提条件。"选了 A"会过期;"选 A 是因为当时 QPS 不到一万、只有一个人维护"不会——它把结论绑在可检验的变量上,条件一变结论自动作废,无需重新推导。
// 反面:结论与依据粘连,过期即全废
选了方案 A,性能更好。
// 正面:三段分开,可分别复核
结论:方案 A。
依据:写入延迟低一个量级;无额外运维组件。
前提:单表日增 < 500 万行;团队 <= 2 人。
复核信号:日增破千万或团队扩到 5 人 → 重评。
4. 动作写成可执行形式:动词 + 对象 + 触发条件
"研究一下""跟进一下"不是动作,是情绪。它们无法判断完成与否,所以永远停在原地——更糟的是,它们看起来像已经安排好了。
| 写法 | 触发 | 完成标志 | 三月后能执行 |
|---|---|---|---|
| 研究一下缓存 | 不明 | 不明 | 不能 |
| 评估是否加二级缓存 | 不明 | 出一份结论 | 勉强 |
下周复现慢查询,若全表扫就给 order_id 建索引 |
下周一 | 索引上线且慢查询消失 | 能 |
触发条件比动作细节更重要。行动力分布不均匀:未来的你不是每天想干活,而是"刚好在做相关的事"时顺手能干——带触发条件的条目会自己找上门。
动作:<动词> + <对象>
触发:<时间点 | 事件 | 前置条件满足>
完成标志:<可观察的结果>
阻塞项:<等谁、等什么>
最后一栏值得单独留。多数卡住的备忘不是没人做,而是在等一个不在场的人或一件没发生的事。写出等待对象,未来的你才知道该催谁,而不必重新分析为什么还没做。
4.1 锚点与链接:时间、人、原始材料
上下文里最容易丢、也最容易补的两类锚点是时间和人,它们是找回原始材料的唯一钥匙。
| 锚点 | 写什么 | 作用 |
|---|---|---|
| 时间 | 具体日期,不写"上周" | 定位群聊/工单的时间窗 |
| 人 | 谁提的、谁拍的板、谁在等 | 找谁确认,不重复问 |
| 场合 | 哪个会、哪次评审、哪个工单 | 直接跳到原始记录 |
| 来源 | 哪份文档、哪版设计 | 判断依据是否已过时 |
硬规则:写绝对时间。"上周三"在第二周就失效,"3 月 14 日"不会。"老板说"不如"张工在 3 月 14 日评审会上说"——前者三个月后还会让你怀疑记岔了。
比锚点更值钱的是原始链接。摘要会骗人,原始材料不会:摘要只留了当时你认为重要的部分,而三个月后你需要的往往正是被裁掉的那部分。优先贴链接,转述只在原文不可访问时做。
// 链接优于摘要:先存指针,再决定要不要展开
// 原文 > 摘录 > 复述,依次降级
$ grep -rn "TODO\|待处理\|回头看看" ./notes | wc -l // 盘存量
$ find ./notes -name '*.md' -newermt '90 days ago' | wc -l // 看增量
5. 过期机制、清单之别、长度上限与度量
有明确失效条件的备忘,必须在写下时就写出来。不写它就永不过期——已作废的结论留在清单里比没有更危险,因为它会被当成有效输入。
| 失效条件 | 写法 |
|---|---|
| 时间型:下季度末没上线就作废 | 写死日期 |
| 事件型:等新版本发布后重评 | 写触发事件 |
| 前提型:变量变了就重评 | 写变量名与阈值 |
| 上下文型:换人后重看 | 写依赖的角色 |
待办与备忘是两种东西,混着写两头失效。待办是承诺,有别人在等,期限由外部约定,以清空为导向;备忘是状态,只对你自己有意义,以保留为导向。前者失败是失信,后者失败是上下文丢失。
长度标准只有一个:够让未来的你重建上下文即可。经验上一条 3 到 8 行;超过一段通常说明你在记录过程而不是结论;只剩一行关键词的那是提醒,不是备忘。存量笔记可以直接扫一遍,找最可疑的那批:
// 一行关键词 + 无触发无动作 = 三个月后必然看不懂
$ grep -rnE "^(待处理|TODO|跟进一下)$" ./notes // 只有状态没有动作
$ grep -L "trigger:\|next:" ./notes/*.md // 缺坐标的条目
三类内容在写之前就该拦掉:能从系统查到的事实(配置值、版本号、接口签名——那属于查询)、明显会变的信息(临时价格、本周排期)、纯粹的情绪。前两类记下来会变成维护负担,第三类会污染未来的判断。
| 不该记 | 为什么 | 替代 |
|---|---|---|
| 系统里能查到的 | 会与事实源漂移 | 记查它的命令 |
| 会快速变化的 | 三天后即误导 | 记信息来源而非值 |
| 情绪与抱怨 | 无行动价值 | 写完即弃 |
度量只看五个数,都不要凭感觉。
| 指标 | 采集方式 | 关心什么 |
|---|---|---|
| 回看命中率 | 重读时帮上忙的比例 | 写得值不值 |
| 失效条目比例 | 过期未标注的占比 | 过期机制生效否 |
| 无法理解条目数 | 重读看不懂的条数 | 上下文够不够 |
| 重建上下文时间 | 读到能动手的时长 | 核心效用 |
| 复查周期 | 上次回看距今多久 | 只写不读否 |
5.1 排错:五种"写了等于没写"
| 现象 | 原因 | 修法 |
|---|---|---|
| 停在"待处理"不动 | 没有动作与触发条件 | 补动词 + 对象 + 触发条件 |
| 三个月后看不懂 | 缺问题状态与排除集 | 补上下文与已排除方向 |
| 同一件事反复重提 | 只记结论,没记否决原因 | 依据与否决理由一并留档 |
| 记录越多越查越慢 | 把查询类事实也记进来 | 只留判断,事实改记入口 |
| 结论过期连带依据作废 | 两段混写 | 分行打标签 |
最隐蔽的是第四条:记录量到某规模后,检索成本上升会超过记录收益,于是你觉得"记了也没用"。不是记录没用,是里面混进了该留在系统里的部分。
5.2 边界:什么时候完整写法本身就是浪费
| 场景 | 怎么记 | 理由 |
|---|---|---|
| 一次性任务,当场做完 | 不记或一行 | 没有未来读者 |
| 半小时内的调研 | 只记结论一行 | 记忆还在,重建成本近零 |
| 纯事实备忘(路径、参数) | 记查询方式不记值 | 值会漂移 |
| 紧急故障现场 | 只记时间、现象、动作 | 事后补复盘 |
| 需要交接他人 | 按交接文档写 | 读者不是你 |
最后一条值得注意:写给别人的和写给自己的是两套写法。给自己的可省背景,因为你知道自己在做什么;给交接对象的必须补全,因为对方连"大概"都没有。混成一套模板,结果是给别人的太简、给自己的太繁。
// 一条七行备忘的最小骨架
trigger: "3/14 张工评审提出对账延迟高"
excluded:
- "方案 B:需引入新组件,运维成本不可接受"
basis: "A 延迟低一个量级;前提:日增 < 500 万行"
next:
action: "用 explain 复现慢查询"
when: "前置:灰度环境可写"
done_mark: "索引上线且慢查询消失"
blocked_by: "等 DBA 开灰度库写权限"
6. 自测
- 三个月后打开笔记看不懂某行字,最该补回的第一个格子是什么?
- 为什么排除集比其他三格更容易被彻底丢掉?
- 一句"选了方案 A",怎么拆成结论与依据两段?
- "研究一下缓存"这类条目缺的是哪两个要素?
- 备忘与待办在存量策略上的根本差别是什么?
- 哪三类内容应该在写下之前就被拦掉?