构造反证问题的核心,是先写下一个能被证伪的预测:如果这个解释成立,那么在某个可观测指标上应该看到什么;如果看不到,就排除或改写它。反证不是再找一条支持证据,而是主动寻找与假设冲突的证据。这一步决定了你接下来是保留原判断、改写它,还是退出这条排查路线。
假设“首页变慢是因为新增了第三方脚本”。这句话本身无法验证,因为它没有说明在什么条件下会看到什么。把它改写成可证伪形式:如果第三方脚本是主因,那么在屏蔽该脚本的对照加载中,首页的主要速度指标应明显改善,而其他页面不受影响。
这个预测包含三个可核对要素:对照条件、观测指标、预期差异。缺少任何一个,反证都无法执行。常见错误是只写“应该会变慢”,这既无法区分主因和伴随现象,也无法判断改善幅度是否足以支撑结论。
反证问题应当优先选择能产生“是/否”或“明显差异/无明显差异”结果的观测方式。连续型指标也可以,但需要事先说明在什么范围内算支持、什么范围内算不支持。
反证跑完后,结果通常落在三种情形之一,每种对应不同的下一步动作。
取舍的关键在于:保留需要预测成立且竞争解释已被排除;改写需要原假设仍有部分证据支撑;退出则适用于连观测条件都不成立的情况。三者之间不要求全部走一遍,只选择与当前证据匹配的那一个。
一个异常往往同时存在多个合理解释。例如某页面加载变慢,可能的解释包括:新增资源、服务端响应变慢、CDN 缓存未命中、测量工具本身的口径变化。此时不要把所有指标都测一遍,而是设计能区分它们的对照。
假设要区分“新增资源”和“服务端变慢”,可以构造这样一组对照:
这个对照的价值在于:它让两个解释产生不同的预测,而不是让它们同时被同一组数据支持。如果两个解释预测相同,就需要引入新的观测维度,例如按时间段拆分、按地域拆分,或按是否命中缓存拆分。
反证结论依赖证据链的完整性。一个可核对的证据链至少包含:观测条件、原始记录、计算方式、结论与预测的对应关系。任何一环缺失,结论都只能算暂定。
需要特别注意的是,第三方估算流量、搜索引擎报告与站内统计的口径并不相同,三者之间不能直接互相替代。某项指标归零或某项统计消失,也不能单独证明处理正确,它还可能由采集方式变化、过滤规则调整、访问来源结构变化等原因造成。因此,反证问题应尽量落在你能直接控制观测条件的指标上。
假设你发现某页面在站内统计中的平均加载时间下降,但第三方估算的访问量也在下降。此时不能直接说“速度改善导致访问下降”,也不能反过来说“访问下降导致速度看起来改善”。合理的做法是先确认两组数据的采集口径和时间窗口是否一致,再决定是否需要重新设计对照。
反证的目的不是证明谁对谁错,而是决定下一步把资源投向哪里。一个实际动作是:在完成对照后,把结论写成一句话,并标注它支持哪个假设、排除了哪个假设、还有哪个假设未被检验。
如果结论支持“新增资源是主因”,下一步应优先处理资源加载路径,而不是继续扩大测量范围。如果结论排除了“新增资源”,但未能区分“服务端变慢”和“缓存未命中”,下一步应设计能区分这两者的对照,例如在相同页面上分别测试命中缓存和未命中缓存的请求。如果结论无法判定,下一步应先修复观测条件,再重新执行反证。
这样做的结果是:每一次反证都缩小了不确定范围,而不是增加一堆彼此无关的数字。保留、改写或退出的决定,也就有了可核对的依据。