职业生涯早期,我调试问题全凭感觉。系统出故障了,我就盯着代码看,改点东西,重新部署,然后祈祷。有时能奏效,但更多时候反而让情况更糟。
当你构建的是人们依赖的系统时,你经不起靠猜测来解决问题。我总结了一套系统化调试的框架。它并不华丽,但每次都能奏效。
框架:ISOLATE
I — 识别症状(而非原因) S — 界定影响范围 O — 观察数据(日志、指标、链路追踪) L — 列出假设(至少3个) A — 用证据评估每个假设 T — 在隔离环境中测试修复方案 E — 解释发生了什么(事后复盘)
让我用一个真实案例来讲解。
真实案例:仪表盘加载耗时30秒
I — 识别症状。 用户反馈质量仪表盘需要30多秒才能加载完成。本地环境只需2秒。仅生产环境出现此问题。
先别急着下结论说"是数据库的问题"或"是网络的问题"。只需描述你看到的现象。
S — 界定影响范围。 是所有用户还是特定用户?所有浏览器?从什么时候开始的?是否与某次部署相关?
在这个案例中:所有用户都受影响,问题始于3天前,且在此期间没有部署操作。这就排除了"我们发布了有问题的代码"这一原因。
O — 观察数据。
\\
