从「能跑」到「跑得准」,变化的不是代码质量,是站位:你从「站在技术这边看」切换成「站在业务那边看」。
一、技术人为什么容易自嗨
技术人容易掉进一个坑:把技术和业务拆成两张皮。
你关注 QPS、延迟、P99、代码覆盖率、架构评分。这些东西有一个共同特点——它们在技术侧有明确的数字、有可比的基准、有改进的故事。QPS 从 1000 提到 2000,你可以写一篇汇报;延迟从 50ms 降到 20ms,你可以画一张图。你能看到进步,你能感受到掌控力,你能对自己说「我把系统做得更好了」。
但业务方不关心这些。他们关心的是「数据对不对」。他们不会因为你的 QPS 翻倍而觉得系统好用,不会因为你的代码覆盖率 90% 而信任你的输出。他们判断你的标准只有一个:拿到的结果,准不准。
技术本身没有市场价值。真正带来价值的是技术所服务的业务。你把系统跑得再稳、写得再漂亮、设计得再精巧——如果产出的数据和业务口径对不上,这些全是零。不,比零还差:它是负的——你花了资源、花了时间、花了人力,做出了一套对业务毫无价值的东西。这不是技术失败,这是价值判断失败。
技术人最容易自嗨的时刻,就是被自己的技术成果感动而忘了问「这东西对业务到底有没有用」。
二、用户只为解决问题买单
在用户眼里,功能可以慢慢进化,但价值必须是现结的。
用户可能会勉强接受一个真正解决自己问题的蹩脚工具——难用,慢,界面丑,但这东西解决了他的问题,他就用了。但他绝不会为一个非常顺手、但对解决问题毫无用处的工具买单。
一个报表系统做得再丝滑,导出的数据是错的,财务不会用它。一个 IDE 插件再顺手,补全的结果总是偏差,你下一秒就关掉它。
蹩脚但能用的东西,用户用的时候会骂,但会一直用。顺手但没用的东西,用户用的时候不会骂,但会用一次就不再回来。
你不关心「它好不好用」,你该关心「它有没有用」。 好不好用是技术视角的命题,有没有用是业务视角的命题。两个命题不在同一个维度上,你不能用一个维度的努力去弥补另一个维度的缺口。
三、信任比功能更脆弱
这里有一个比「能不能用」更深层的问题:信任。
在用户心智里,功能可以慢慢加,今天没有他等。但信任一旦被新破一次,在他那里就有「这东西不可靠」的烙印。你后面做对十次都很难把这烙印抹干净。
一次失误,把十次积累的信任归零。
所以在「跑得准」阶段有一条铁律:宁可功能少点,也不能为了堆功能而忽略交付的结果质量。
一个系统信用崩塌最快的方式,就是追求功能、忽略准确性。你急着把产品做得更快、更全、更智能,结果产出的数据出了错,用户那边发现了——不是你发现的,是用户发现的——这比你少做一个功能严重得多。少做一个功能,用户会说「还没这个功能」。做错了一个功能,用户会说「这东西不可靠」。
功能是你和用户的合同,信任是你和用户的关系。关系破了,合同还有意义吗?
四、架构师必须懂业务
前面都在说「为什么要站在业务那边」。但怎么站过去?怎么才知道「对」的标准是什么?
不是猜的。不是从技术指标推的。是你跟业务方坐下来聊出来的。
你就像一个裁缝。如果不知道穿衣的人长什么样,你就只能做一件通用尺码的衣服。谁都能穿,谁穿都不合身。最后每一个穿上的人都要自己改,改到后来衣服已经不是你的了,是他们的。
业务就是这张尺码。业务场景是什么?用户怎么用?哪些数据错了会死人、哪些错了没事?用户的容忍度在哪里?他们最常看的数字是什么——不是「全部数据」,是「某几个关键的指标」?这些不是技术问题,但你不知道这些,你做出来的架构就是在给一个你想象出来的人做衣服。
架构就是给业务量身定制,不是做一套通用尺码让业务来配合。 让业务来配合的意思是:你做了一个「理论上什么都能做」的系统,但你不知道业务具体要什么,所以你把所有可能性都留了,结果每个可能性都只做了一半。业务方拿到手,发现自己要的那个场景不在里面,但所有配置项和扩展点都在——它们不该在。
知道自己不知道什么,是懂业务的开始。知道该怎么从业务方嘴里问出「他们对什么敏感」,是懂业务的下一个阶段。
五、端到端对账
懂了业务,知道「对」的标准是什么了。接下来一步:怎么验证?
技术人的第一反应是:加测试。加单元测试,加集成测试,加回归测试,加端到端测试。这都没错。但这里有一个更基础的东西——端到端对账。 不是中间环节的日志对得上,是源端和终端的数对得上。不是每个组件各自的输出正确,是最终用户拿到的结果和业务口径一致。
中间环节可以全部对得上——上游日志没问题,中间处理逻辑正确,下游输出格式符合规范——但两头的数差了一条。差一条就是不准。没有人关心「差了一条在哪个环节」,因为对于业务方来说,对不上就是对不上。你中间环节花了再多精力验证,只要两头的数对不上,那些验证都是白做的。
端到端对账是站在业务侧验证,不是在技术侧自证。 你站在业务那边,用业务方的口径问自己一句:我产出的数,和业务方期望的数,对得上吗?
六、案例:灵活但不可靠的实时处理系统
曾经做过一个实时数据处理系统。从技术角度看,这个系统做得非常漂亮:它提供了超越 SQL 的表达能力,业务方可以通过接口灵活定义自己的计算逻辑——聚合、过滤、衍生指标,远比 SQL 灵活。
但在真实的业务环境里,这个系统一直受到来自业务方的质疑。不是功能不够——是结果不对。
质疑有两类。第一类是接口本身的口径定义不准:业务方定义了一个计算规则,但规则本身的语义和业务口径之间有偏差。业务方以为是这个意思,接口实际执行了另一个意思。你提供的「灵活」让业务方以为自己控制了全部,但在真实业务里,他们不知道你接口内部怎么解释这些规则,最后拿到的结果对不上业务真实的口径。第二类是系统本身的 bug:时间错位、数据丢失——这些错误不是你代码里有一个明显的 bug crash 掉了系统让人发现,是静默的、微妙的数据偏差,很难被自动化测试覆盖到。
最要命的是,两种情况从业务方的角度看都一样——都是「拿到的东西对不上」。他们不关心问题出在口径还是 bug,他们只看到「这东西不可靠」。功能做得再强,灵活性做得再大,业务方不敢用就是不敢用。
那套超越 SQL 的表达能力活在技术人的欣赏里,死在业务方的信任里。
七、退出信号
「跑得准」什么时候算过了?第1篇给过一个信号:业务方不再来找你对账了。
当业务方不再带着怀疑来核对你的数据,说明他们开始信任这个系统了。他们把你产出的数据直接拿去用——不是「先核一遍再用」,是「直接用」。这意味着你的系统在业务那边通过了压力的测试,赢得了信任。
但反过来说,只要业务方还在找你核对具体数据、还在问「这个数能信吗」——你还在「跑得准」的路上。能对上不是靠你说「我对上了」,是靠业务方不来找你说「对不上」。
技术本身没有市场价值,真正带来价值的是它所服务的业务。你做的事不是把系统打造成一个技术标杆——是把它打造成一个业务方敢用的东西。