反事实不是因果关系

2021-07-27 07:52:47

假设我们最近在 Kubernetes 集群上遇到了一个错误。正如我们系统中经常发生的问题一样,我们首先注意到可见错误,我们可以将其声明为“构建未完成”。现在我们要回溯以找出发生了什么。一种常见的技术是精益思想普及的“五个为什么”。所以我们问“为什么构建没有完成”,我们发现“Kubernetes 无法启动 pod,并且操作在 1 小时后超时。”我们当然可以在一个步骤中辩论这是否是一个“为什么”或其中的两个,但这不是现在的关键话题。主要的是,这是关于因果关系的直接陈述。 “Pod no start”直接导致“build no done”。此分析的下一步显示 pod 无法启动,因为卷已满,文件过多。再次,直接因果关系。接下来是棘手的部分。为什么卷已满,文件太多?在这一点上,我们很可能会看到解释的性质发生了变化。可能会提供以下内容的一些变体:您是否注意到所有这些“原因”是如何以未发生的事情的形式陈述的?它们是“反事实”。反事实是关于如果过去发生的事情不同,现在世界可能会如何不同的陈述。这是一种“另类历史”的想法。这就是问题所在:反事实不能成为原因。根据定义,反事实没有发生,因此它不可能引起任何事情。只有实际发生的事件才能成为其他事件的原因。因果关系应以“Because X then Y”的形式表述。 “If not X then not Y”这句话不是一种解释,而是一种对过去可能如何以不同方式展开的一厢情愿的思考。

在执行五个为什么时,重要的是要避免这种反事实的飞跃。坚持实际发生的事件。请注意,在我之前概述的事件分析中,列出了三个反事实。他们每个人都独立地足以避免这一事件。但这并不是我们可以构建的仅有的三个反事实:我可以继续,但你可能觉得前三个比这三个更合理。在某种程度上,原始系列比这三个更“接近”现实。尽管如此,我可以在无限的时间内继续构建反事实。 “如果地球不适合居住,那么我们就不会在这里关心我们的 CI 构建没有完成。”一旦你开始制作反事实,它们真的没有尽头。同样,那是因为这些不是发生的事件。只有有限数量的事件实际发生,所以因果关系链是有限的。无数的事情没有发生,所以我们总能找到更多的“缺失的东西”来责备。这也是人们在分析事件链时发生冲突的地方。一个人可能会假设一个不同的人或团队没有做过的事件的反事实。那个人或团队自然会生气——感觉就像他们受到了指责。 (更糟糕的是,因为没有做某事而被指责,所以他们被称为疏忽大意!)他们将被迫提出自己的反事实,这可能会吸引另一支球队。如果负面结果很重要,那么这片假设云就会变成一场“责备风暴”,希望像雨点一样降临在某人身上。防御上升,学习停止。反事实的飞跃表明人们在哪里停止寻找原因并跳到思考解决方案。尝试将反事实重新表述为关于未来预防的声明:如果我们监视“卷已满”情况,则不会再发生这种情况如果我们从旧版本中清除文件,则不会再发生这种情况。

这些都是有用的陈述。当以这种方式表述时,他们显然是在谈论未来,而不是假设另一段历史。 (你可能已经注意到,我还偷偷用了一堆“我们”陈述来代替上面更具体的属性。)只要我们清楚这些反事实不是已经发生的问题的原因,而是变化对于我们可以防止未来发生的现实,我们可以使用它们而不会引发指责风暴。作为一种实用技术,在五个为什么或事后审查期间,当有人提出反事实作为原因时,我建议在停车场的前瞻性版本中捕捉潜在变化。这种重新表述还有助于剔除更牵强的概念......那些感觉有点“在那里”甚至以前很傻的人。让我们用上面的第二组来试试:如果我们在 CI 集群中使用静态 VM 而不是 Kubernetes,那么这种情况就不会再发生了。 (可能是正确的说法,虽然有些缺乏支持。)如果我们使用人类在命令行而不是 CI 工作,那么这种情况就不会再发生了。 (可能。人类的适应性更强,可以确定何时清除文件。但可能还有其他不良影响。)如果我们直接在生产实例上编辑文件而不是将代码放入存储库,那么这种情况就不会再次发生. (嗯……绝对是治愈比疾病更糟糕的情况!)

最后一个也让我说明了之前的反事实。你可能会对第二组感到更多的阻力,因为如果那句话是真的,你会不自觉地考虑负面后果。人类非常擅长假设这些反事实。面对糟糕的结果,我们的大脑会不由自主地立即猜测出一棵大树的交替历史。并且同样迅速地,我们修剪那些我们知道会产生比我们的结果更糟糕的其他负面影响的树枝的树。试想一下,“如果我们挑起一场终结文明的核战争,那么这种 CI 构建失败就不会再发生了。”因此,当我提出一个反事实说“如果我们直接在生产实例上编辑文件,这种情况不会再次发生”时,您的本能反应是说,“是的,但是。”这是现在考虑离当前现实的两步之遥。第一步是想象发生反事实的替代历史。第 2 步是推断该替代历史后果的负面结果。有时,我们甚至通过假设更多的反事实来弥补第一个的负面后果,从而进一步远离现实。反事实对实际发生的事情没有任何说明。他们表达了一厢情愿的想法,希望能有一段没有发生坏事的历史。因为它们代表“没有发生的事件”,所以它们不可能引起任何事情。然而,陈述一个反事实可能会引发一轮无益的指责风暴。尝试重新表述作为对过去事件的解释提供的反事实,这样您就可以将它们表述为注入以防止再次发生。当然,您还必须考虑这些注射会产生什么其他影响!在分析任何事情时,要注意反事实的陷阱。当您需要重建事件链时,这是事后审查、回顾、项目事后分析和其他情况的常见陷阱。