工程师的沟通技巧——如何向非技术人员解释技术问题
工程师的沟通技巧——如何向非技术人员解释技术问题
适读人群:经常需要和产品、运营、老板沟通的工程师 | 阅读时长:约15分钟 | 核心价值:一套跨技术和非技术边界的沟通方法,让你的技术表达被理解、被认可、产生影响力
我曾经有过一段非常糟糕的经历。
一次公司高管会议上,老板让我解释一下最近系统的稳定性问题,为什么频繁出故障。我花了10分钟讲了:微服务架构的复杂性、分布式系统的一致性问题、CAP 定理、我们的 SLA 指标……
讲完之后,会议室里沉默了5秒钟。
然后我们的 COO 说:"我没听明白,但我需要知道:这个问题什么时候能解决,需要什么资源?"
那个场面让我非常尴尬。我花了10分钟,一点有用的信息都没传递出去。
那之后,我开始认真研究"如何向非技术人员解释技术问题"这件事。这篇文章是我过去几年的总结。
为什么工程师不擅长跨界沟通
工程师有一种职业病:习惯从底层原因讲到上层结论。
这是写代码时的思维方式——先定义基础概念,再建立逻辑,再得出结论。这种方式在技术文档里是对的,但在面对非技术受众时是错的。
非技术人员不需要理解底层原理,他们需要的是:这件事对我的影响是什么?要花多少时间/钱?谁来负责?
另一个问题:工程师喜欢用技术行话。
在工程师之间,说"数据库主从延迟导致读写不一致"是完全正常的。但对一个产品经理来说,这句话里有3个他可能不理解的概念(主从、延迟、读写不一致)。他听完之后不是懂了,是更困惑了。
核心原则:从听众的关切出发
在解释任何技术问题之前,先问自己:这个人关心的是什么?
不同角色关心的事情不同:
老板/CEO 关心: 风险(会不会影响业务?影响多大?)、成本(需要多少资源?)、时间(什么时候解决?)、影响(用户和收入受影响了吗?)
产品经理关心: 功能还能不能用?用户体验受影响了吗?什么时候恢复?这会不会影响我们的发布计划?
运营/客服关心: 用户会遇到什么问题?怎么向用户解释?有没有临时解决方案?
投资人/董事会关心: 这是系统性风险还是一次性事故?团队有没有能力控制这类问题?
理解了听众的关切,你才能给出对他们有价值的回答,而不是对你有价值的回答。
结论先行:BLUF 原则
BLUF(Bottom Line Up Front)是军事沟通中常用的原则:把最重要的结论放在最前面,而不是最后面。
非技术人员的注意力有限,他们没有耐心等你讲完5分钟背景再听结论。先给结论,他感兴趣了,才会听你讲原因。
错误顺序:
"我们的用户服务使用了一个第三方 JWT 库,这个库在处理过期 Token 时有一个 Bug,当用户的登录状态即将过期时,系统会产生一个未捕获的异常,导致服务返回500错误,影响了……所以这次故障的原因是……"
正确顺序:
"这次故障影响了昨天下午2点到3点半之间约1.2万名用户无法正常登录,原因是我们使用的一个工具库有问题。这个问题已经修复并上线,后续我们会换掉这个有缺陷的库。需要我详细解释技术原因吗?"
注意最后那句"需要我详细解释技术原因吗"——这给了听众一个选择权:他觉得不需要,就可以直接进入下一个话题;他觉得需要,你再展开讲。
用类比,不用术语
非技术人员无法通过定义理解技术概念,但能通过类比建立直觉。
几个我用过的有效类比:
解释服务器压力/容量:
"我们的服务器就像一条高速公路,正常情况下每小时能通过1000辆车。昨天大促期间来了5000辆车,高速公路塞满了,后面的车就堵在外面进不来,这就是为什么很多用户刷不出来首页。"
解释数据库索引:
"数据库索引就像书的目录。没有目录,你要找某个内容,只能从第一页翻到最后一页;有了目录,你直接翻到对应页码就行了。我们这次加了索引,就相当于给数据库加了目录,查询速度快了很多。"
解释缓存:
"缓存就像你家桌上放的水杯,你渴了伸手就能喝到,不需要每次都去厨房拿。如果没有缓存,每次操作都要去数据库查,就像每次喝水都要去厨房,速度就慢了。"
解释技术债:
"技术债就像信用卡欠款。当时为了快点做出来,我们走了一些捷径,就像刷信用卡。现在每次改需求,都要额外花时间绕开之前的那些捷径,这就是在付利息。如果一直不还,利息越来越高,最后改什么都很慢。"
类比不需要精确,需要"能建立正确的直觉"。
量化影响,让问题可感知
抽象的技术描述不如具体的数字。
不好的表达:
"这个接口响应时间有点慢,影响用户体验。"
好的表达:
"这个接口现在平均需要2秒才能返回,而行业标准是500毫秒以内。研究表明,响应时间超过1秒,有40%的用户会放弃等待。按我们每天3万次的接口调用量来估算,慢响应大概每天导致约1万次的用户流失。"
把技术问题量化成对业务的实际影响,是让非技术人员真正重视技术问题的关键。
给出清晰的行动方向
每次和非技术人员沟通技术问题,要带着一个明确的期望:你希望他们做什么?
是:
- 批准一笔预算来解决这个问题?
- 接受一个功能延期,因为需要先处理技术债?
- 了解情况,没有需要他们做的?
把这个期望明确说出来。
很多工程师的沟通以"以上就是技术问题的情况"结尾,然后等对方反应。这会让对方不知道他们应该怎么办,结果就是什么都不发生。
结尾改成:
"以上是情况说明。我需要的是你批准3天的时间让我们专门处理这个问题,不安排新需求,这样我们能在下周之前彻底解决。你觉得可以吗?"
一个真实的对比案例
同一件事(系统需要做性能优化,需要2周时间),两种沟通方式:
方式A(技术语言):
"我们的订单查询模块存在 N+1 查询问题,SQL 执行效率低下,主要原因是 ORM 框架生成的关联查询没有做 join 优化,导致每次查询订单时需要发起多次数据库请求。此外连接池配置也不合理,maxPoolSize 设置偏小,在并发高峰期会出现连接等待……我们估计需要2周时间做系统性优化。"
方式B(业务语言):
"我们的订单查询页面现在平均加载时间是3.2秒,是1年前的2倍,主要原因是随着订单量增长,我们的查询方式没有随之优化。这直接影响客服的处理效率——客服每天大约处理300个订单查询,现在平均每个查询多花2秒,一天总计多花600秒,接近10分钟。长期来看也会影响用户对后台系统的满意度。
我们计划用2周时间做优化,预计可以把查询时间缩短到1秒以内。这2周需要从现有需求排期里抽出两名工程师专注处理这件事。你觉得这个安排可行吗?"
方式B的效果远比方式A好。方式B没有一个技术术语,但完整地传递了:问题是什么、影响是什么、方案是什么、需要什么资源、期望得到什么决定。
沟通能力是可以刻意练习的
我见过很多工程师认为"我就是不擅长沟通,我的长项是写代码",然后就放弃了。
这是一个错误的认知框架。沟通能力不是天赋,是技能,是可以学习和刻意练习的。
我的练习方法:每次写给非技术人员的沟通(邮件、消息、会议发言)之后,复盘一下:对方的反应是否和我预期的一样?如果不是,哪里出了偏差?
这个小习惯,坚持半年,会有非常明显的提升。
工程师的影响力,不只来自技术能力,很大程度上来自"让别人理解你在做什么、为什么这样做"的能力。
几个沟通中的具体小技巧
在多年的实践中,我积累了几个细节技巧,单独拿出来分享:
技巧1:用"我们"代替"你们"
当你说"你们的系统太慢了",对方会进入防御状态。当你说"我们的系统在这个场景下有性能问题",对方会感受到你是站在同一阵线的。
这个小小的人称变化,能显著降低对话的对抗性。
技巧2:给出选择,而不是唯一方案
对非技术管理者来说,被告知"只能这样做"会让他们感到不舒服——感觉失去了控制权。
改成给出两到三个选项,每个选项说清楚利弊,让他们做选择。这样他们会感到被尊重,而且通常会选择你真正推荐的那个方案(因为你在描述选项时,会让推荐方案看起来更合理)。
技巧3:用"从用户角度看"开场
技术问题,只要能翻译成"用户体验",就立刻变得直观了。
"我们的接口响应时间超过了2秒" 改成: "从用户的角度,打开这个页面,要等超过2秒才能看到内容。大多数用户在等待超过1秒后会感到明显的不满。"
技巧4:写备忘录代替口头表达
对于复杂的技术情况,在开会之前发一个简短的书面备忘录(3-5个要点),让对方提前有个大概的了解。这样开会时对方不是第一次接触这些信息,讨论效率会高很多。
技巧5:在每次沟通结束时明确"下一步"
不要在沟通结束时让对方处于"好的,了解了"的状态。要明确:接下来谁在什么时候做什么事情。
"好的,基于今天的讨论,我这边下周一之前给你一个详细的方案,你来决定是否推进,可以吗?"
这样的结束,让双方都清楚了后续动作。
