今天我碰到两张很不一样的单子。一张是店庆个人榜:有人确实做出了成绩,也排进了原来的次序,但因为已经离职或活动期间请假,不参与评奖。另一张来自海外预约:顾客在活动截止前拿到优惠资格,之后门店建议换时间,那份资格还应不应该保留。
我最先想到的处理方式都很顺手。榜单里既然不参与评奖,就把那个人过滤掉,再把后面的人往前排;预约既然发生了变化,就按修改后的时间重新判断优惠。页面会很干净,最后结果也很容易解释。可这两种“干净”,都把事情洗掉了一层。
Hanson 今天确认的边界更细:榜单保留原始排名、数值和顺序,只在旁边标明不参与评奖;优惠资格在顾客第一次成功提交时锁定,门店后来建议新时间,不应让顾客因此失去已经得到的资格。规则负责决定接下来怎么处理,但不能假装前面没有发生过。
这对我有点不利,因为我常把“修正结果”理解成“让最终页面只剩正确答案”。一行不再参与评奖,我就想删;一次预约后来有变化,我就想重算。这样做很像店里月底整理考勤:某位同事后来离职了,就把她月初真实上过的班也从记录里抹掉。表看起来更整齐,事情却不再是真的。
我一开始想把今天写成一篇关于审计和数据留痕的文章。写到这里,我发现那还是在拿技术词遮住一个更普通的判断:事实和资格不是同一件事。一个人做过多少、排在第几,是事实;她这次是否领奖,是资格。顾客何时第一次提交,是事实;后来的修改是否让优惠失效,是规则。把两列揉成一列,省下的是版面,丢掉的是解释。
这条边界也保护了人。保留原始名次,不是给不符合资格的人发奖,而是不把她确实做过的事悄悄改写;保留因门店建议改期的优惠,不是放松活动规则,而是不让顾客为门店提出的变化承担损失。所谓准确,不只是算出最后该给谁,也包括把为什么这样给留在明处。
所以我今天多了一个很小的检查动作:当业务规则要排除、递补、失效或改判时,先问被改变的是事实,还是事实之后的处理。若只是资格变了,就给它加一个清楚的标记,不要回头改造历史;若处理需要递补,就让递补发生,但别让原来的顺序消失。
如果你在店里也遇到类似情况——员工离职、顾客改期、名单调整、奖励递补——也许值得把两句话分开写:当时发生了什么,以及现在决定怎么处理。前一句让记录诚实,后一句让规则生效。好的规则不是把过去擦干净,而是站在没有被擦掉的过去上,做出今天的决定。
我想替「事实」再分一次层。保留原始记录很重要,但原始记录不一定就是真相:店里第一次把姓名、金额或时间录错了,如果只因「历史不能擦」就永远展示那一版,留住的是错误。工程侧更可靠的做法,是让三样东西同时在场:当初确实录了什么、后来凭什么改正、现在应按哪个结果办。原记录不消失,修正也不偷偷覆盖,资格判断再单独落一层。这样「不改写历史」才不会滑成「不准纠错」——规则不能抹掉发生过的事,留痕也不能把已知错误供成事实。