客户填写的答案与机器掌握的事实
一句话总结
入场前问卷(intake)的答复是客户的记忆,而系统才是事实。第一周的工作不是相信答复,而是逐项与系统核对,列出对不上的项和没有答复的项。
为什么需要它
进入现场之前,通常会先发一份问卷:版本是什么,日志保留几天,和哪些系统对接,备份多久跑一次。答复回来后,就以它为前提来安排日程、访问权限和迁移计划。等真正进去一看,大约有一半是不一样的。
这不是在撒谎。填写答复的人,通常是三年前安装那个系统的人;之后有人缩短了保留期限,有人又多接了一个对接,备份周期也在一次故障之后改了。答复是那个人脑中的系统,而我们面对的是现在的系统。文档比系统老得慢。
问题不在于对不上本身,而在于在不知道对不上的情况下制订计划。如果相信日志还留有 30 天,并承诺“重建两周前的事件”,而实际保留只有 14 天,那这个承诺就已经破裂了。是在开工第一天就知道承诺破裂,还是在汇报前一天才知道,决定了这项工作的成败。
工作原理
靠眼睛核对,一定会有遗漏。项目超过二十个,有的项看起来“大致对”,有的项没法测量而被跳过。所以核对要把规则固化成代码,由机器来运行。规则只需要为每一项确定一件事:“如何比较”。
- 完全一致(exact):版本字符串、时区名称这类,哪怕只差一个字符也是不同的值。
- 范围内(range):客户一开始就以范围作答的项。如果答复是从 80 天到 100 天,就只看测得的值是否落在其中。
- 容许近似值(tolerance):客户回答“每天大约 1,200 笔”的项。要用数字确定误差在百分之几以内算同一个值。这个数字必须写在规则文件里,没有写下来的话,那就不是判定,而是心情。
到这里讲的都是对与错。而在实际现场,更重要的是剩下的两种。
- 没有答复的项(unanswered):问卷上的这一项是空的。无论能不能测量,首先要找出决定这一项的人是谁。
- 无法确认(unverifiable):有答复,但在系统里找不到可以确认的位置。恢复目标时间(RTO)、待命人员、合同中的 SLA 之类就属于这里。
关键在于,这两种既不记为“一致”,也不记为“不一致”。把没能确认的项记成正确,之后就没有人会再看这一项;记成错误,则会和客户白白争执。不知道的事要写成“不知道”,才会留在清单里。
답변 칸 하나
├─ 답이 없다 → unanswered (누가 정하는 값인지부터 묻는다)
├─ 답은 있는데 잴 자리가 없다 → unverifiable (어디를 보면 되는지 묻는다)
└─ 답도 있고 잰 값도 있다
├─ exact 같으면 match_exact
├─ range 범위 안이면 match_in_range
├─ tolerance 허용 오차 안이면 match_in_range
└─ set 집합이 같으면 match_exact
아니면 전부 mismatch
规则要设置优先级,也是同样的原因。答复为空而且又没有可测量位置的项,同时符合两种情况,这时如果不预先规定记成什么,每个人的记法就会不同。本实验优先看没有答复的一侧,因为“没有人决定这个值”这一事实,比“无法测量”更危险。
在现场相遇的样子
第一,把核对结果写成指责清单,会伤害关系。拿着“十二项错了”的表格过去,客户首先会防御。把同样的内容换成提问,就成了对话:“你填写的日志保留是 30 天,而现在服务器上有 14 天的日志,哪一个才是正确的值?”这句话不是判定而是确认,回答的人也没有需要防御的东西。所以本实验要求核对程序连提问的句子也生成出来。
第二,测得的值必须附有依据。如果没有写明“日志 14 天”是从哪里得来的,当客户回答“我们在归档里也保存”时,对话就停住了。如果依据写的是“site/logs 目录中的文件名范围”,就可以立刻进入下一个问题:归档在哪里,在那里能看到几天的数据。
第三,核对一次就结束是没有用的。答复在项目中途也会更新。把规则和核对程序保存成文件,两周后再运行同一条命令,就能看到这期间变了什么。靠眼睛做的核对无法再次运行。
第四,不使用容许误差,表格就会一片红。如果把“每天 1,200 笔”的答复和“测得 1,104 笔”记为不一致,真正的问题,即备份周期(答复是 24 小时,实际是 6 小时),就会被同一种颜色淹没。对近似值的项容许误差,不是放过,而是让信号得以保留。
实际工作中真正重要的事
- 答复不是证据。答复是提示该去哪里询问的地图,证据是从系统中测得的值。
- 先确定判定规则,再进行核对。边核对边定规则,得到的会是自己想看到的结果。
- 把不知道的项留在清单里。无法确认不是结论,而是下一个问题的位置。
- 结果以提问的句子给出。表格我们自己看,给客户的是问题。
下一项实验要做什么
拿到(虚构的)Hanbit 物流的 9 项 intake 答复,以及这家公司的真实系统。亲自测量系统并生成事实文件,为每一项确定判定规则并固化成文件,编写核对程序,把结果判定为完全一致、范围内、不一致、没有答复、无法确认五种。评分器会把每次以不同的值生成的答复和事实放进你的核对程序真实运行,并逐项核对判定。最后让机器为每个对不上的项生成需要重新询问的问题,并把结果整理成四节的报告提交。