客户要的“撤销按钮“,我做了两周:聊聊改单背后那些绕不开的事 上周客户在群里甩了一句话“录错了能不能撤销一下加个按钮就行吧”我扫了一眼需求心里想的是——这有什么难的三天最多三天。结果两周之后才交付。不是我磨洋工是我一开始想简单了。今天把这个过程写出来如果你也在用系统、或者正在跟软件供应商提需求希望有点参考价值。一、撤销为什么不是把字擦掉我习惯用一个比喻解释这件事你往一锅汤里撒了盐发现撒多了。这时候问题不是把盐粒捡出来——汤已经咸了而且可能已经有人喝了两碗。系统里的单据也是一样。它被录进去的一瞬间就不是一张孤零零的纸了。第一层它会牵动一串数据。一张销售单录入完成系统会自动跟着做几件事库存扣减、客户应收款增加、当月销售额计入。现在你说撤销这张单那这几件事是不是也得跟着退回去库存加回来、欠款减掉、销售额减掉——少退一步账就对不上。而对不上是最麻烦的因为没人知道是哪一步少的。第二层后面可能已经有人接着往下做了。货已经发了款已经收了一半下游又开了一张单引用它。这时候再让你撤销等于要求系统把已经发生的现实硬抹掉。现实抹不掉系统也不能假装它没发生过。第三层得留下痕迹。谁改的什么时候改的改之前是什么样这三个问题如果答不上来一旦出问题所有人都说不清。留痕不是为了防谁恰恰相反——它是为了让没做错的人不用背锅。二、我最后是怎么做的想明白上面三层方案就清楚了。我把它拆成四种情况1. 还没审核的单子直接改。还没人看过、还没往下走改就改了干脆利落。这种情况下强行留一堆痕迹反而是添乱。2. 已经审核的单子不给改走冲销。原单原封不动保留再开一张方向相反的单子把账平掉。这个思路其实跟手工记账一模一样账本上不涂不改另起一行写一笔更正。改错的痕迹看得见账也对得上。纸质账本用了几百年的办法是有道理的。3. 全程留痕。谁改的、改了什么、改之前是什么值一条不少地记下来。这条我自己加的客户没提但我认为不能省。4. 撤销按钮单独开权限。不是谁都能点。这个按钮点错的代价比录错一张单还大。三、这两周真正教会我的是什么不是技术上的收获是需求理解上的。客户嘴里的小需求和他真正想要的结果常常不是一回事。他说加个撤销按钮他真正想要的是一句“录错了不用慌能补救账不会乱。”至于底下实现成一个按钮、一套冲销流程、还是另起一行更正——他其实不在乎也不需要在乎。我如果第一天就多问一句录错了现在是怎么处理的、最怕出现什么情况可能三天就够了。省下的是两周。后来我给自己立了个规矩客户提加个什么的时候先追问一句你想用它解决什么麻烦。十次里有八次问出来的答案跟那个按钮没关系。写在最后做软件这两年我越来越觉得难的不是把功能写出来是把到底要解决什么问题问清楚。代码写错了能改方向理解错了两周就这么没了。我在做一套自研 ERP叫 minierp目前还在开发阶段开发日常会持续更在这里。关注我看我怎么把 minierp 这套 ERP 一点点做出来。