尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Havenlon | 杂谈:为什么领导总觉得“这个东西不复杂”?

Havenlon | 杂谈:为什么领导总觉得“这个东西不复杂”? 在很多公司里工程师、产品经理、运营人员大概都听过一句极其熟悉的话“这个东西不复杂啊。”它可能出现在需求评审会上也可能出现在项目延期之后还可能出现在一次关于预算、人力和排期的讨论里。很多时候说这句话的人并不是故意轻视执行团队他甚至真的认为这件事没有那么复杂页面不过几个按钮流程不过三四步业务逻辑几分钟就能在白板上讲清楚为什么需要两周、一个月甚至更长时间才能交付真正负责把事情做出来的人却往往有完全不同的感受。因为在他们眼里那几个按钮背后可能连接着权限、数据、状态、接口、异常、回滚、审计、兼容性和一系列无法在会议室里完整展开的问题。这并不只是技术行业里的代际冲突也不简单是谁更懂技术。更准确地说是双方看到的根本不是同一个东西。领导看到的是目标执行者面对的是现实。而现实最大的特点之一就是它永远比目标描述更复杂。很多所谓的“这个东西不复杂”并不是复杂性不存在而是复杂性还没有被展开。一、领导看到的是一条线执行者面对的是一张网绝大多数业务需求在管理视角中都可以被压缩成一条非常清晰的路径用户发起请求系统判断条件符合规则以后执行最后返回结果。如果把它画成流程图可能只有四五个方框箭头从左到右一路贯通。在这样的抽象层级上“这个东西不复杂”往往并不是一个荒谬的判断。目标链路确实不复杂甚至有些事情从业务角度看本来就应该很简单。用户提交退款申请系统审核以后退款员工刷卡权限正确以后开门客户完成付款系统生成订单。任何一个不懂技术的人都能够理解这些流程。问题出现在真正开始执行以后。现实不会永远按照流程图中那条最漂亮的箭头运行。用户提交的数据可能不完整权限可能刚刚发生变化网络可能超时第三方接口可能在请求发出以后没有返回结果同一个操作可能因为重试被提交两次数据库可能已经写入成功但消息队列没有发送下游可能已经执行成功但回执丢失甚至两个彼此都正常工作的系统也可能因为时间差产生完全不同的状态判断。原本的一条直线很快会变成一张不断分叉的网而工程团队真正花费时间的恰恰不是那条最理想的主路径而是主路径之外那些数不清的“如果不是这样怎么办”。这也是为什么很多系统做一个演示版本很快真正进入生产环境却要慢得多。Demo需要回答的是“这件事情能不能发生”生产系统则必须回答另一个完全不同的问题如果现实没有按照我们假设的方式发生这个系统还能不能保持正确前者验证能力后者承担责任。一个退款按钮能够调用支付接口并不意味着退款系统已经完成一个AI能够成功调用一次工具也不意味着这个Agent已经具备企业级执行能力。真正的系统工程往往就是把那些正常情况下看不见、异常情况下却会突然决定系统命运的分支逐一找出来然后为它们建立处理机制。所以领导看到的往往是一条路径执行者看到的却是一整个状态空间。两者都没有错只是站在了不同的抽象层级上。最容易被低估的工程不是主流程有多难而是主流程之外到底存在多少种现实。二、自然语言特别擅长隐藏复杂性人类有一种极其强大的能力就是能够用很少的语言描述非常复杂的目标。“做一个支付功能。”“加一个自动退款。”“用户验证通过以后自动开门。”“让AI帮客户处理这些订单。”这些句子甚至不需要十秒钟就能说完而这种语言上的简洁很容易制造一种认知错觉既然一件事情能够如此简单地表达那么实现它似乎也不应该特别困难。但语言复杂度从来不等于现实复杂度。自然语言之所以高效恰恰是因为人类在沟通时会默认省略大量彼此认为“理所当然”的条件。我们说“验证通过以后开门”不会顺便把验证凭据的有效期、设备当前状态、网络异常、重复请求、传感器故障、执行确认、日志记录和人工接管全部塞进这句话里因为那样人类根本无法高效交流。语言的功能本来就是把复杂现实压缩成可以理解的意图而工程的任务却恰恰相反工程必须把这句话重新展开把所有被语言省略掉、但现实不会自动替我们解决的条件找回来。产品经理说“用户可以修改订单”真正进入实现以后问题会立刻出现什么状态下可以修改谁可以修改哪些字段可以修改付款以后还能不能改已经发货怎么办库存如何重新计算优惠券如何处理两个终端同时修改怎么办修改结果是否需要审计如果一个修改动作只完成了一半又怎么办这些问题并不是工程师故意制造出来的它们原本就存在于“修改订单”这个动作与真实业务世界之间只不过在那句自然语言里没有被写出来而已。这也是很多组织内部最容易发生摩擦的地方。提出需求的人会觉得执行团队不断抛出问题是在“把事情想复杂”执行团队则会认为对方只是在描述一个理想世界。实际上两边承担的是两种不同职责一边负责确定“我们想发生什么”另一边负责保证“当世界不配合时事情仍然不会失控”。从这个角度看工程师最大的价值之一并不是把简单的事情复杂化而是发现那些已经存在、却尚未进入管理视野的复杂性。一个成熟的工程团队会不停追问边界、状态和异常不是因为他们悲观而是因为系统一旦真正运行现实最终一定会提出这些问题。人类描述目标时习惯省略边界而工程的工作就是把这些被省略的边界重新找回来。三、越远离执行现场世界越容易显得简单组织天然就是一台复杂性压缩机器。基层员工每天可能处理几十个具体异常技术负责人把这些异常整理成五个风险部门负责人再把五个风险压缩成两个项目问题到了高层经营会议上最后可能只剩下一句话“这个项目目前整体可控但进度略有风险。”这种信息压缩并不是管理的缺陷恰恰是大型组织能够运转的前提。一个CEO不可能知道每个接口为什么超时也不可能每天理解某个数据库事务为什么偶尔失败。如果所有执行细节都原封不动地进入最高决策层组织会立刻失去决策能力。问题在于复杂性一旦被压缩人非常容易把“我不需要看到它”误解成“它并不存在”。管理者每天看到的是一个结果系统正常、订单正常、支付正常、设备正常。他很少能够看到为了维持这个“正常”底层究竟存在多少监控、告警、重试、人工补偿、值班机制、灰度策略、冗余设计和异常处理。一个高度成熟的系统甚至会把自己的复杂性隐藏得非常彻底以至于使用者会逐渐形成一种感觉这件事情本来就应该这么简单。这其实是所有优秀基础设施共同的悖论。电梯每天按一下就会上楼人们很少思考它背后的制动、冗余、传感器和安全设计银行卡刷一下钱就到账用户不会看到清算、风控、对账和异常处理云服务器几分钟就能创建也因此很容易让人忘记数据中心、电力、网络、调度和运维系统在背后承担了多少复杂度。成熟技术最大的成功之一就是让复杂性从用户的感知中消失。但看不见并不意味着不存在。在组织里也是一样。管理者接触到的往往已经是经过无数人加工、过滤和兜底之后的世界。某种意义上他看到的现实之所以简单正是因为下面有人在不断消化复杂性。于是越远离执行现场的人越容易低估执行本身的难度而越优秀的执行团队反而越可能制造这种错觉因为他们把大量问题解决在了问题暴露之前。这也是为什么有些团队一旦关键人员离职管理层才突然发现“原来这个系统这么复杂”。并不是系统在那一天突然变复杂了而是那个长期负责吸收复杂性的人消失了。越成熟的系统越容易让人误以为这一切本来就应该这么简单。四、“不复杂”有时候也是一种资源语言当然职场里的“这个东西不复杂”并不总是一种纯粹的认知判断它很多时候还是一种资源语言。因为在组织里一旦某件事情被定义为“复杂”通常意味着需要更多开发时间、更多测试资源、更多预算、更谨慎的交付承诺甚至意味着原本已经确定的商业计划需要调整。而管理者天然承担资源约束的责任所以他会本能地质疑复杂度真的需要这么多人吗真的需要一个月吗这些异常真的都会发生吗能不能先做一个简单版本这种质疑本身完全合理。任何组织里的资源都是有限的如果执行团队提出的每一个“复杂”都被无条件接受那么复杂度同样会成为争夺资源的语言项目会不断膨胀时间和预算也会失去约束。因此优秀的管理者一定会挑战复杂性迫使团队区分哪些是核心问题、哪些是过度设计哪些必须现在解决、哪些可以以后解决。真正危险的不是质疑复杂性而是否认复杂性。因为现实不会因为预算没有批准就自动变得简单。某个异常处理可以暂时不做某套监控可以推迟建设测试时间可以压缩人工接管流程也可以先不设计但被省略的工程成本不会凭空消失它只会以另一种形式重新出现。测试阶段没有支付的成本可能在生产事故里支付监控系统没有支付的成本可能在故障发现时间里支付数据一致性没有支付的成本可能在人工补单和客户投诉里支付安全边界没有支付的成本则可能在一次无法逆转的事故里支付。这也是为什么很多项目表面上按时上线最终却并没有真正节省时间。组织只是把成本从开发阶段转移到了运维阶段把确定性的工程投入变成了不确定的事故成本。短期看项目似乎更快长期看团队却可能用几倍的人力反复偿还当初被压缩掉的问题。管理的真正难度因此不是简单地判断一件事情“复杂”还是“不复杂”而是判断哪些复杂性值得现在支付哪些可以有意识地延后支付以及延后的风险究竟由谁承担。这比一句“这个东西不复杂”困难得多却也更接近真正的经营问题。复杂性可以被推迟支付但很少能够被永久免单。五、真正困难的从来不是“能做”而是“可靠地做”技术行业还有一个非常普遍的现象一个功能做出第一个能够运行的版本可能只需要三天把它变成一个可以长期交付给真实客户的产品却可能需要三个月甚至更久。很多人会因此产生疑问既然功能已经跑起来了后面为什么还需要这么长时间答案其实很简单因为“能做”和“可靠地做”是两个完全不同的问题。以转一笔钱为例。如果只是验证能力调用支付接口、输入账户和金额交易就可以完成。真正进入业务以后问题才刚刚开始谁允许这笔钱被转出目标账户是不是原来批准的那个账户金额有没有在执行前发生变化授权是否已经过期同一个请求被重复提交以后会不会转两次接口超时以后应该重试还是停止如果银行已经执行成功但系统没有收到回执下一步怎么办出了争议以后系统能不能证明当时谁批准了什么、最终实际执行了什么动作本身可能只有一次API调用围绕这个动作建立一套可以长期被信任的系统却需要解决完全不同数量级的问题。这不仅发生在金融里。删除一条数据库记录可能只需要一句SQL保证企业核心数据不会因为一次误操作被不可逆地删除却需要权限、审批、审计、备份、恢复和异常拦截驱动一个继电器可能只需要修改一个GPIO状态但要确保只有正确的人、在正确的时间、对正确的设备、在正确的状态下才能让它动作就已经从电子控制问题变成了完整的系统工程。因此很多商业产品真正昂贵的部分并不是“它能不能做这件事”而是围绕这件事情建立确定性。用户购买的也从来不只是一个按钮而是对这个按钮背后一整套承诺的信任它今天能够工作明天还能工作正常情况下能够执行异常情况下不会乱执行失败了可以恢复发生争议能够解释系统状态发生变化以后不会继续机械地执行一个已经失效的决定。这也是成熟产品与Demo之间真正的分水岭。Demo展示能力产品承担后果。前者证明“我们能让它发生”后者必须证明“我们知道什么时候不应该让它发生”。动作的复杂度往往并不高真正昂贵的是约束动作、验证动作并为动作承担后果。六、AI正在让“看起来不复杂”变得更加普遍到了AI时代“这个东西不复杂”的感觉可能会变得前所未有地强烈。因为AI正在快速降低从想法到第一版能力之间的成本。过去一个团队可能需要几周才能完成的页面、接口、脚本和工作流现在借助AI可以在几天甚至几个小时里搭建出来过去需要专门工程师完成的一些任务今天普通业务人员通过自然语言也能迅速得到一个看起来能够工作的原型。技术第一次如此接近“把一句话直接变成功能”。某种意义上这当然是真正的进步。大量过去昂贵的实现成本正在被压缩软件生产效率也确实正在提高。但这同时制造了一个新的认知风险当“做出来”越来越容易人们会进一步低估“可靠地运行”仍然需要承担的成本。AI降低的是表达意图到生成能力之间的成本它并不会自动消灭现实世界里的状态、权限、异常和责任。一个Agent理解“帮我处理这些订单”并不困难真正困难的是它究竟可以处理哪些订单可以修改哪些字段哪些情况必须停止第三方系统状态变化以后是否还能继续动作失败以后如何恢复什么情况下必须交还给人类以及最终如何证明它真正执行了什么。只要AI仍然需要与真实世界互动这些问题就不会因为模型更聪明而自然消失。甚至恰恰相反AI越强这些问题可能越重要。过去一个员工一天只能操作几十次即使发生错误传播速度和影响范围通常有限一个自动化Agent却可能在几分钟内完成几千次操作并且连续跨越多个系统。一旦最初的理解出现偏差AI会用更高的效率把这个偏差放大。能力越强执行越快规模越大原本那些可以依靠人工经验临时补救的小问题就越可能变成系统性风险。因此AI时代真正值得企业重新思考的并不是“AI能不能把这个功能做出来”。这个问题正在迅速变得不那么重要因为答案越来越经常是“能”。真正决定一套AI系统能不能进入核心业务的将是另外一组问题它在什么边界内能够行动状态变化以后谁负责重新判断异常发生以后如何降级谁拥有最终否决权人类什么时候必须接管执行以后留下什么证据AI让目标描述越来越简单却没有让现实世界本身变简单。相反它正在让能力以前所未有的速度跨过“理解”与“执行”之间的距离。这意味着未来组织最需要警惕的或许正是那些“看起来特别简单”的自动化。结语简单的目标复杂的现实“这个东西不复杂啊。”很多时候这句话本身并没有错。站在目标层面一件事情可能真的非常简单。用户要退款系统就退钱员工有权限门就打开客户提交需求AI替他完成任务。商业世界本来就需要这种抽象能力否则任何事情都会陷入无穷无尽的细节之中。真正的问题不是目标能不能被简单描述而是我们是否意识到这种简单只是一个抽象层级上的简单。只要系统开始进入真实世界它就必须面对现实最基本的特征状态会变化人会犯错网络会失败规则会冲突权限会过期系统之间会存在时间差曾经正确的决定也可能在下一秒变得不再正确。成熟工程不是试图否认这些复杂性而是承认它们然后把它们变成可以被管理、被约束、被验证的系统结构。所以很多时候一个东西之所以在管理者眼里非常简单不是因为它真的没有复杂性而是因为复杂性已经被系统、流程和人隐藏在了下面。真正优秀的团队甚至会把这种隐藏做到极致让最终用户几乎感受不到背后的困难。但这恰恰是最容易产生误解的地方。一个东西看起来简单往往不是因为它没有复杂性而是因为有人已经替你承担了复杂性。下一次当会议室里再次有人说出“这个东西不复杂啊”也许真正值得讨论的并不是谁对谁错更不是工程师与管理者之间谁更懂这件事。更值得问的是我们现在看到的究竟是目标的简单还是已经被隐藏起来的现实
返回列表