判断系统坏了,最省事的信号是它报错。真正难办的是不报错却跑错的系统:屏幕上一切正常,结果却悄悄错了。本课讲遇到这种情况时该看哪里、按什么顺序看。
这一课处理的是:已经建好的自动化不再按预期运转的那一刻。目标是让您靠有次序的收窄而不是靠猜来找到问题,并且让找到的修正长久有效。当诊断不再依赖搭建系统的那个人,而成为公司自己的本事时,自动化才站得住。
课程结束时您手里会有一套诊断次序、一张填好的故障单,以及一个显示修正确实起作用的验证步骤。缺了这三样就动手,往往会造出第二个故障。
前置条件:第一课的流程图。查故障时用来比对的书面预期就是它。
不工作这句话一次盖住了三种不同的情形,而这三种的诊断各从不同的地方起步。在对话一开始就分清面对的是哪一种,查找范围立刻就窄了。
自动化根本不动。触发没有到达,或者在第一步就掉了。这是最好处理的一种,因为症状看得见,通常也会在记录里留下痕迹。
流在跑,也生成记录,也不报警,可是结果是错的。这是代价最高的一种,因为错误会积上几周,发现时还得往回清理。
结果没错,却没能按时到。通常不是单一故障,而是积压的负荷或者新加进来的一步。没有测量,这一种就一直可以被争论。
三种的共同点是:只要预期没有写下来,故障就无法界定。不该是这样这句话,在没有应该是这样的书面记录时,变不成诊断。
自动化很少吵吵闹闹地坏掉。没有错误提示,没有红灯,流看上去是绿的。可输出还是错的:消息发给了错的人、某个字段空着、记录开了两次、日期写成了另一种格式。
无声故障的源头多半是输入换了形状。表单里多了一个字段,门户开始用另一种写法发手机号,某位员工把字段填得不一样。规则没变,输入变了,结果就悄悄跑偏。
最后一条最重。团队一旦开始手工修输出,系统其实早就坏了;因为没人上报,故障也就没有进过任何记录。
昨天还行的东西今天不行了,说明中间有什么变了。这是诊断的第一个问题,多数故障就在这个问题上收口。在没有变更清单的系统里,同一个问题要花上几个小时。
变化不只发生在系统里。流程里、人身上、输入里也会发生。可能是员工走了,可能是门户改了字段名,也可能是供应商换了文件格式。查找请从这张清单开始,而不是从代码内部开始。
诊断从写下症状开始。不工作不是症状,那是感觉。症状是这样的:在哪条记录上、什么时候、本来预期什么、结果发生了什么。这四栏没填满之前,查找范围不会变窄。
写症状时,预期结果要从第一课的流程图里取。没有流程图就先写它;没有书面预期的诊断,会变成拿一个人的记忆去比对系统的行为。
最后两问决定诊断的方向。只在一条记录上出现,问题多半在输入;全部都出现,多半在规则;一部分出现,多半在条件。
重现不了的东西不要动手修。手里没有一个想复现就复现的例子,也就没法证明您改的那一下是否起了作用。许多被当作修好了的故障,其实只是那天没有再犯。
重现的意思是把同一条记录放到测试环境里,或者用一个无害的例子跑一遍。如果必须在线上试,请挑一个能撤回的步骤,并且事先告诉团队。
收窄查找范围最快的办法,是把流程从中间切开。在流程中间的某个点上,数据是对的还是错的?对的,故障在后半段;错的,故障在前半段。每切一次,要查的范围就少一半。
这个办法与工具无关。无论看记录界面、中间表、发出去的消息,还是系统留下的日志,问的都是同一个问题:数据到这里时还是对的吗?
每切一次就把结果写下来。不写下来的切分会被重复,诊断就因为把同样的地方看第二遍而拖长。
范围收窄之后,按次序排查第一课的五个部分。下面六个来源在现场最常遇到,多数诊断都在它们里面收口。
事件可能根本没到。连接可能断了,授权可能过期了,地址可能变了。如果记录没有生成,故障在流程的门口,不在里面。
这是最常见的来源。字段可能被改名,日期可能换了格式,开头的零可能掉了,空格或者大小写可能不一致。
可能出现了新情形,落在写好的路径之外。条件之外的记录通常会悄悄掉下去,因为没人为它们写过路。
密码可能改了,密钥可能到期了,某个账号可能被删了。这类故障往往某一天突然开始,事先并不打招呼。
两步可能跑反了次序,或者其中一步没等另一步的数据就开跑。忙时出、闲时不出的故障,通常就在这里。
对方可能没有接受:某字段变成必填、额度满了、格式被拒绝。回来的应答没人读的时候,这类故障就一直是哑的。
不要同时改好几处。改了两处结果变好,不知道是哪一处让它变好;结果变坏,也不知道是哪一处让它变坏。到这一步,诊断就又变回了猜测。
每改一处,就把第二步的例子再跑一遍。验证既包括故障走了,也包括别处没被弄坏。为此,请在动手之前把哪些记录本来是跑得好的写下来。
把故障弄走只是一半的活。另一半是放下标记,让同样的故障不能再悄悄形成。不做这一步,几个月后同样的诊断要从头再来一次。
长久有效来自三样东西:故障会显形的地方放一个提醒、一个探查输入边界的检查,以及一条定好的例外通道。三样都待在自动化内部,并不需要另起一套系统。
我们把方法放在一个故障上,从头走到尾。例子走的是销售流程,不过这个次序在任何流程里都一样。
症状:新提出咨询的客户收不到报价邮件。销售团队最先发现,说上周有几位客户一直在等回复。记录看上去是建了的。
什么变了:最近两周表单里加了一个新字段,门户那边也做了一次更新。两个候选。
重现:把其中一条受影响的记录用同样的输入再跑一遍。故障复现了,也就是说手里有了可测量的例子。
对半切:去看流程中间的那张表。记录在,但邮箱字段是空的。那么故障在前半段,在输入这一侧。
五个部分:去看输入格式。表单里新加的字段把邮箱字段改了名。流程在找旧名字,找不到,就传了个空值,邮件那一步于是悄悄掉了。
只改一处并验证:把流程改成读取新的字段名。故障例子再跑一遍,邮件发出去了。再跑两条此前正常的记录,它们也仍然正常。
长久有效:邮箱字段为空时,流程现在会停下,记录挂起等待,并通知负责人。流程图上的字段名做了更新。用到同一字段的另一条流也被排查并改好。
诊断不是等故障出现那天才学的本事。在平静的日子里演练过,需要它的那天它就在手边。下面的练习就是为此准备的。
每一条会悄悄放过去的流,都是日后会造出无声故障的流。这个练习在多数公司里都能翻出至少一条。
下载诊断检查清单(xlsx) · 故障单、什么变了、把流程二分、五个部件的排查,以及持久修正的步骤。
最先被看的通常是规则,可最常见的来源是输入。规则从昨天到现在没动过,那变的多半是送到它面前的数据。
改两处再看结果,并不能把诊断做完,只会把它搅浑。哪一处起了什么作用无从判断,修正也变得无法重复。
在无法复现的故障上做的修正,没法验证。故障会消失一阵子,然后从同一个地方回来。
多数流程都会把自己做过什么记在某处。不看日志的诊断,是不听系统说话就下判断。
口头传递的症状,每传一次就变一次。没写下来的症状,会变成两个人在找两个不同故障的诊断。
没有加提醒和检查就关掉的故障,会以同样的样子回来。第二次来的时候诊断从头再做,信任又被磨掉一层。
在关掉一个故障之前,最好对下面每一条都能说是。缺哪一条,这个故障就不是关掉了,而是被推后了。
诊断对话里会用到的术语。团队有了共同的说法,故障交接就更快。
这一课我们讲了怎样有次序地收窄故障、怎样让修正长久有效;您也看到,很大一部分故障出在输入这一侧。
课程里其余的模块正在准备中。发布之后就会归到课程里的位置上,并出现在培训页面。
如果怀疑某个系统正在悄悄跑错,写信给我们,一起看看。
通过WhatsApp获取报价