早上9点,我才知道自己的软件在凌晨3点干了什么。一句话就能讲完无人值守自动化的全部故事,但我得亲身经历一遍才肯信。
那套自动化本该是"负责任"的那种。每晚它把当天的付款和支付处理商对账,找出真正失败的扣款,在客户账户失效前发一封礼貌的邮件:"您的付款没成功,这样解决。"枯燥、必要、重复——正是所有人劝你自动化掉的那类活。于是我把它自动化了,设在凌晨3点跑,那时处理商的数据已经落定。设好,然后——这个短语现在应该让每个人心里一紧——忘了它。
那一晚,对账跑在了一本写了一半的账上
有一批付款,处理商已经确认,但我们自己那行数据还没真正落库——保存晚了几秒,3点的任务把这个空档读成了"这些付款失败了"。它做的正是我让它做的事:不知疲倦、准确无误、准点执行,给那些已经付过钱的客户发邮件,告诉他们付款失败——而他们并没有失败。
没有人看到这批数据,没有人看到这次发送。我看到的是9点的客服队列,已经积了一堆工单,来自那些付了钱、却被我们自己的软件告知没付的人。
那套自动化没有任何地方坏掉。每一行代码都在尽职。失败的不是代码,是那个决定——让唯一一个会触达真实客户的步骤,在没人在场的情况下发生。
一个定时任务,其实是两样东西钉在一起
这句话里的障眼法,是我用一场9点的客服火灾才看明白的。
一个循环任务,本质上是两样东西被钉在了一起。一样是劳动——拉数据、匹配行、核对数字、起草消息、拼出报告。枯燥、机械、每晚一样,确实是在浪费一个人的晚上。另一样是判断——那半秒钟,有人看一眼输出,心里冒出"等等,这里面好多都是肯定付过钱的客户,不对劲,别发"。
这两样里,一样让这份工作变成苦差事,另一样是唯一一直在保护你的东西。
"设好就忘"卖给你的,是自动化掉第一样,同时悄悄把第二样也一起自动化掉了。你以为你在删掉枯燥,你也在删掉那一眼——那一眼本可以抓住那本写了一半的账。它们本来是钉在一起的:做枯燥对账的那个人,同时也免费充当了那个会察觉"这批数据疯了吧"的人。自动化把它们撕开,两样都扔了。
这就是那个动作。没有人会决定"我要把人工判断从付款邮件里拿掉"。你决定的是"我不想再把晚上花在对账上"——这完全合理——而判断和枯燥装在同一个盒子里一起走了,因为你从没注意到它们是两样不同的东西。
劳动从来不是这份工作里危险的部分。判断才是那个人在场的全部意义,而它和枯燥装在同一个盒子里离开了。
它没给你更少出错的方式,只是把出错挪到了没人看的时段
关于定时智能体,有个很诱人的说法:它更安全——没有半夜犯困手抖打错数字的人,没有忘掉的周一任务,没有"糟了我发票一直没发"。这是真的。自动化确实消掉了一整类人为错误。
它没消掉的是另一类:那个微妙出错的输入、那个写了一半的状态、那个排期恰好撞上的边界情况。一个人下午2点在工位上跑对账,会撞上同一本写了一半的账——然后停下来,因为一个人看着那些"您的付款失败"的邮件、收件人还都是自己认识的客户,会先感觉到不对劲,再去找逻辑。凌晨3点的智能体撞上同一个坏状态,没有这种迟疑。它不停顿,它没有任何感觉,它照发。
所以无人值守自动化给你的,不是一个出错方式更少的系统。它给你的是同一个系统、同样的出错方式,只是跑在最少人盯着的时段,瞄准最面向真实世界的那个步骤,并且专门拆掉了唯一的保险——那个会说"这不可能对"的人。我们告诉自己买的是可靠性,其实买的是同样的风险,外加把烟雾报警器摘了。
回头拆一遍:我到底想卸掉什么,又顺手交出去了什么
把那个3点的任务拆开,分清我真正想从桌上拿走的,和我意外交出去的。
拉取、匹配、对账、起草——拿走,拜托,这些我从来不想在工位上做。但发送——那些邮件离开我们的服务器、落进真实客户的收件箱——从来不是我想摆脱的部分。那部分微不足道,就一个按钮,一个人半秒钟的事。我自动化发送,不是因为发送是苦活,是因为它挂在我想要消失的那份工作上,而我让整条链端到端地跑,从没问过最后一环该不该留在链子里。
而最后一环永远是最危险的那一环。它是那个触达真实世界、且收不回来的步骤:发出去的消息、动出去的钱、上线的部署、被删掉的记录。它之前的一切都可逆——一份糟糕的草稿不算什么,一次错的对账不过是个重算的数字。可一旦它离开这栋楼,它就成了别人生活里的事实。就是这一步,而它恰恰是让人来把关几乎不花成本的一步,因为把关就是看一眼、点一下。
"设好就忘"的悲剧在于,它自动化的恰恰是错的那一半。它拿走了廉价、安全、可逆的劳动——没问题——然后,因为它装在同一个盒子里,它连那唯一昂贵、不可逆、也正是需要有人留在环里的那一步,也一并拿走了。
我想说得小心一点,因为这话的偷懒版本是"自动化很危险,全都手工做",而那会让你变成一个半夜手动对账的人,那才是真正的倒退。问题从来不是自动化本身,而是我们把它对准了哪里。
热门跟贴