<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Blameless Postmortem · 仁才德</title>
    <link>https://jared.lynskey.co.nz/zh-cn/tags/blameless-postmortem/</link>
    <description>关于软件工程与研发团队领导力的短文——绩效评估、招聘与团队扩张、CI/CD、DevOps 监控、智能体 AI。写于首尔。</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <copyright>© 2026 仁才德</copyright>
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/zh-cn/tags/blameless-postmortem/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>无责复盘（Blameless Postmortem）与灾难预案：IT 团队如何面对人为失误</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-10-07-handling-human-errors/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-10-07-handling-human-errors/</guid>
      <pubDate>Sat, 07 Oct 2023 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Blameless Postmortem</category>
      <category>Incident Management</category>
      <category>Disaster Recovery</category>
      <category>Human Error</category>
      <category>Risk Management</category>
      <category>SRE</category>
      <description>什么是无责复盘（blameless postmortem），一份拿来就能用的复盘模板，以及让人为失误不至于致命的几件无聊小事：写下流程、自动化，还有演练过的灾难恢复计划。</description>
      <content:encoded><![CDATA[<p>无责复盘（blameless postmortem）是对一次事故的书面复盘，它问的不是谁犯了错，而是系统怎么让这个错误有机可乘。在 IT 里应对人为失误，这是我知道的最管用的习惯，因为只有确信不会受罚，大家才会第一时间说出自己的失误。剩下的都是些无聊的事：先减少犯错的机会，再为真出大事的那天准备一份演练过的预案。</p>
<p>在新西兰时，我在电信公司 Spark 的网络运维部门干过一年。那份工作留给我的教训很简单：人会犯错，系统会宕机，而且专挑你没准备好的时候。你唯一能控制的变量，是事情发生时你准备到了什么程度。</p>

<h3 class="relative group">让人敢承认错误：无责复盘
    <div id="让人敢承认错误无责复盘" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%ae%a9%e4%ba%ba%e6%95%a2%e6%89%bf%e8%ae%a4%e9%94%99%e8%af%af%e6%97%a0%e8%b4%a3%e5%a4%8d%e7%9b%98" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>见效最大的改进不是技术层面的。要是犯错就挨罚，大家就会把错误藏起来，而被藏起来的错误，修复时间会比应有的晚上几小时甚至几天。一个能让人在几分钟内说出“是我搞坏的，我具体做了这些”的团队，恢复速度永远更快。事后的处理同样重要：别只把症状糊上就算完，要挖到根因，否则同一个错误会换张脸再回来。</p>
<p>这个“事后的处理”，就是无责复盘要做的事。只要是值得吸取教训的事故，就有人把它写下来：发生了什么、影响有多大、怎么修好的。这份复盘默认每个人在当时掌握的信息下都是出于好意行事，所以它不问该怪谁，而是问是什么让这个错误这么容易发生：少了一步确认、仪表板容易看错、根本没有运维手册。“工程师误在生产环境跑了数据库迁移”就变成了“部署脚本允许不经任何确认就在生产环境跑迁移”。写完之后要分享出去，让别的团队也能学到；最后列出行动项，每一项都有负责人和截止日期，不然它就会变成一份没人执行的文档。想看完整版，可以读 Google SRE 书里讲复盘的那一章 <a href="https://sre.google/sre-book/postmortem-culture/"  target="_blank" rel="noreferrer">Postmortem Culture: Learning from Failure</a>，书里还附了一份<a href="https://sre.google/sre-book/example-postmortem/"  target="_blank" rel="noreferrer">完整示例</a>。</p>

<h3 class="relative group">无责复盘模板
    <div id="无责复盘模板" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%97%a0%e8%b4%a3%e5%a4%8d%e7%9b%98%e6%a8%a1%e6%9d%bf" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>刚开始用下面这样的就够了。要短到大家真的愿意填。</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 复盘：&lt;简短标题&gt;
</span></span></span><span class="line"><span class="cl">日期：YYYY-MM-DD · 作者：&lt;姓名&gt; · 状态：草稿 / 已评审
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 概要
</span></span></span><span class="line"><span class="cl">两三句话：什么坏了、持续多久、怎么修好的。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 影响
</span></span></span><span class="line"><span class="cl">谁受了影响、多少人、多长时间。有没有丢数据或损失收入。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 时间线
</span></span></span><span class="line"><span class="cl">全程用同一个时区。
</span></span><span class="line"><span class="cl"><span class="k">-</span> 14:02 开始部署
</span></span><span class="line"><span class="cl"><span class="k">-</span> 14:09 第一条告警触发
</span></span><span class="line"><span class="cl"><span class="k">-</span> 14:15 开始回滚
</span></span><span class="line"><span class="cl"><span class="k">-</span> 14:21 错误率恢复正常
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 促成因素
</span></span></span><span class="line"><span class="cl">系统、流程或工具里的哪些地方让这件事得以发生。不写人名。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 做得好的
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 做得不好的
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 行动项
</span></span></span><span class="line"><span class="cl">| 行动                 | 负责人 | 截止日期   |
</span></span><span class="line"><span class="cl">|----------------------|--------|------------|
</span></span><span class="line"><span class="cl">| 给迁移脚本加一步确认 | &lt;姓名&gt; | YYYY-MM-DD |</span></span></code></pre></div></div>

<h3 class="relative group">把犯错的概率先降下来
    <div id="把犯错的概率先降下来" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8a%8a%e7%8a%af%e9%94%99%e7%9a%84%e6%a6%82%e7%8e%87%e5%85%88%e9%99%8d%e4%b8%8b%e6%9d%a5" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>这里有三件无聊的事，能干掉大部分风险。一是别让技能生锈——错误最爱过时的知识，所以定期培训不是福利，是保养。二是把流程写成文档——很多“人为失误”其实是“含糊失误”：文档不存在，只好有人靠猜。三是把重复劳动自动化——让人把同一件事正确地做五百遍是强人所难，而计算机生来就是干这个的。在这些之上，凡是有风险的操作都多加一双眼睛：同事评审也好，按清单自查也好，都能在上线前拦下多到让人脸红的问题。</p>

<h3 class="relative group">在大事来临之前把计划写好
    <div id="在大事来临之前把计划写好" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8%e5%a4%a7%e4%ba%8b%e6%9d%a5%e4%b8%b4%e4%b9%8b%e5%89%8d%e6%8a%8a%e8%ae%a1%e5%88%92%e5%86%99%e5%a5%bd" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>先做一次诚实的风险评估：内部的薄弱点，比如 IT 基础设施；外部的威胁，比如自然灾害。实时<a href="https://jared.lynskey.co.nz/zh-cn/posts/2025/2025-10-13-devops-monitoring/" >监控</a>要提前架好，那是你的预警系统。然后把计划写出来：应对各种业务中断的业务连续性计划（BCP），以及专门针对 IT 的灾难恢复计划（DR）。灾难恢复计划里要写清楚每个系统最多能停多久、最多能丢多少数据，也就是恢复时间目标（RTO）和恢复点目标（RPO）。</p>
<p>没演练过的计划只是猜想，所以要搞演习。谁在什么时候向利益相关方通报什么，也要提前定好——危机当中临场发挥的沟通，正是恐慌蔓延的方式。最后别漏掉那些不体面的杂事：跟当地相关部门保持联系，按时做维护，买对保险。</p>
<p>这些事没一件让人兴奋，大概正因如此才管用。能把故障处理好的公司不是运气好，只是趁一切安好时提前做了打算。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-10-07-handling-human-errors/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
