去年春天,我差点毁掉一个两百多万的单子。不是因为代码 bug,而是当客户指着我们精心打磨的实时数据大屏问'所以,这能告诉我下周该增产还是减产?'时,我和我的团队,哑口无言。
我们交付了一个'完美'的作品:Three.js 构建的 3D 工厂流水线模型,光效流畅;Echarts 驱动的几十个图表数据实时刷新,毫秒不差;自研的拖拽布局器,让客户能随意调整板块。技术评审会上,我们慷慨激昂地讲解 WebGL 优化策略、WebSocket 连接池管理。但坐在对面的生产总监,眉头越皱越紧。最后他叹了口气:'很酷,但……我看不懂。它没回答我的问题。'
那一刻,身为八年前端的我,感觉自己像个裱糊匠。我们把数据'糊'在了屏幕上,却弄丢了它应有的灵魂。

一、开局:技术人的傲慢,从迷恋工具开始
项目伊始,我们兴奋极了。客户是家大型制造企业,预算充足,想要个'智慧工厂指挥中心'。我们以为机会来了——这不正是展示前端尖端技术的舞台吗?
团队内部会议,变成了技术选型辩论赛。'用 Unity WebGL 还是纯 Three.js?''实时数据用 Socket.io 还是 SSE?''自己造轮子还是用现成的大屏框架?'我们沉浸在技术实现的可能性中,讨论着帧率、加载速度、兼容性。我们默认了一个前提:只要画面够炫、数据够实时、交互够顺滑,价值自然成立。
这是前端工程师常见的思维陷阱:手里拿着锤子,看什么都像钉子。我们急于施展毕生所学,却忘了先问最基本的问题:这个'指挥中心',到底要指挥什么?谁来看?看完了要做什么决策?
我们用一个多月,搭建了技术的'豪华城堡'。然后,带着骄傲去见客户业务部门,进行第一次需求对接。那是我第一次撞上'次元壁'。

二、撞墙:当业务语言无法翻译成技术需求
业务方提的需求,在我们听来模糊又'外行':
- '我希望一眼就能看出哪条线效率不正常。'
- '能不能预测一下设备什么时候会坏?'
- '这个指标和那个指标的关系,能直观体现吗?'
我们的反应是将其'翻译'成技术需求:
- '效率不正常' = 指标阈值告警 + 颜色标红。
- '预测设备损坏' = 接入预测算法接口 + 显示结果。
- '指标关系' = 画个关联图。
我们做了'翻译',却丢了'神韵'。我们实现了一个会变红的数字,但业务方需要的是'异常归因链路的起点';我们展示了一个预测百分比,但对方需要的是'维保工单的触发依据';我们绘制了关联图谱,但它复杂得像一团乱麻,无法指导行动。

真正的挫折在内部 Demo 日到来。我们自认完美的系统,被自己请来的、有工厂背景的产品朋友质疑得千疮百孔:'这个'OEE'(全局设备效率)指标,你放在左上角,但它其实是厂长最核心的 KPI,应该占据视觉核心。''这个设备流,你用了 3D 旋转展示,很酷,但妨碍了我快速定位到具体机台编号。''这些实时跳动的数字,除了制造焦虑,有什么用?历史对比趋势在哪?'
我们团队内部第一次出现了裂痕。有年轻同事抱怨:'业务方自己都不知道要什么!'而我开始意识到,问题在我们。我们不是在解决业务问题,我们是在用自己的技术语境,去'答复'别人的业务问题。两者南辕北辙。
三、跳下井:把自己'浸泡'在业务里
我做了个当时看来很'不务正业'的决定。我请求项目 PM,安排我和一名设计师,去客户工厂'驻场'一周。不写代码,就是跟着生产班长倒班,看他们怎么开早会、怎么盯盘、怎么处理故障。




