高效沟通:先说清楚 X,别只问 Y
程序员常说 “Talk is cheap, show me the code”。但真实工作里,很多时间并没有花在写代码上,而是花在弄清楚到底要写什么上:需求评审里来回确认,群聊里反复追问,排查问题时绕了一大圈才发现大家说的根本不是同一件事。
左耳朵耗子(陈皓)在《左耳听风》专栏的「高效沟通」系列中,把沟通当成一门可以训练的技术,总结了逻辑、信息、维度、共同四个关键点。其中「信息」部分专门提到了一个在技术圈非常经典的沟通陷阱:X/Y 问题。
这篇文章以 X/Y 问题为主线,结合专栏的思路,整理一套日常可用的沟通方法。
1. 什么是 X/Y 问题
维基百科对它的定义是:
提问者试图解决问题 X,但预先认为某个方案 Y 是可行的,于是只询问如何实现 Y,而不说明 X 是什么,导致提问者和回答者都花费了大量时间精力去解决 Y 问题,而实际上 Y 并不是一个合适的解决方案。
拆开来看,整个过程通常是这样的:
- 我想解决问题 X;
- 我自己想到了一个方案,这个方案需要先做到 Y;
- 我卡在了 Y 上,于是去问别人「Y 怎么做」;
- 对方很热心地帮我研究 Y,甚至 Y 也解决了;
- 最后发现 Y 根本不是解决 X 的好办法,或者解决 Y 之后又冒出新的 Y’。
结果是双方都很累,问题却没解决。更糟的是,X 被 Y 掩盖住了,可能还会引入次生问题。
1.1 一个经典例子
xyproblem.info 上有一个流传很广的例子:
提问者:怎么取一个字符串的最后三个字符?
回答者:
str.slice(-3)就行。提问者:好的……但是
photo.jpeg这种文件名好像不对。回答者:你到底想干什么?
提问者:我想拿到文件的扩展名。
这里:
- X:获取文件扩展名;
- Y:取字符串最后三个字符。
扩展名不一定是三个字符,也可能没有扩展名,或者有 .tar.gz 这种多段后缀。如果一开始就说「我想拿到文件扩展名」,回答者会直接推荐 path.extname() 之类的现成方法,几秒钟就结束了。
1.2 《提问的智慧》里的例子
Eric S. Raymond 在《提问的智慧》中有一节叫「描述目标而不是过程」,给的例子是:
- 蠢问题:我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值?
- 聪明问题:我正试着用自己选定的色码替换一幅图片的色码,我现在知道的唯一方法是编辑每个色码区块,但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。
第二种问法把目标(替换色码)和当前卡住的步骤(取 RGB 值)都讲清楚了。这样对方既可以回答你卡住的那一步,也可以直接告诉你「换个工具,一步就能批量替换」。
1.3 工作中常见的 X/Y 问题
X/Y 问题并不只出现在技术问答里,日常工作中也很常见:
| 你听到的 Y | 背后可能的 X |
|---|---|
| 「帮我把这个接口的超时时间调到 60 秒」 | 某个导出功能数据量太大,需要异步化 |
| 「能不能给我开一下生产库的写权限」 | 想修一条脏数据,其实应该走数据订正流程 |
| 「这个按钮能不能改成红色」 | 用户总是漏点这个按钮,需要提升可见性 |
| 「怎么在 Git 里删除某个提交」 | 不小心把密钥提交上去了,需要清理历史并轮换密钥 |
| 「帮我写个脚本每分钟重启一次服务」 | 服务有内存泄漏 |
最后一个例子尤其典型:直接满足 Y,表面上问题「解决」了,实际上是把真正的故障藏了起来。
2. 为什么会出现 X/Y 问题
X/Y 问题很少是因为提问者笨,更多是下面几个原因:
- 过早锁定方案:人在思考时会很自然地跳到「怎么做」,然后忘了回头确认「为什么这么做」。
- 怕暴露自己不懂:觉得说出完整背景会显得自己方案很幼稚,于是只问一个很具体的小问题。
- 以为对方不需要背景:觉得「我只是问个小技巧,说那么多干嘛」。
- 知识的诅咒:自己脑子里已经有完整上下文,就默认对方也有。
对回答者来说,也有一个对应的陷阱:只回答被问的问题。尤其在被催着要答案时,很容易直接给出 Y 的解法,而不去追问 X。
3. 如何避免 X/Y 问题
3.1 作为提问者:先讲目标,再讲卡点
提问时可以按下面的顺序组织信息:
- 我的目标是什么(X);
- 我目前的方案是什么,为什么选它(Y);
- 我卡在了哪里,已经尝试过什么;
- 期望的结果和实际的结果分别是什么。
可以直接套用这个模板:
| |
最后一句很重要。主动告诉对方「方向错了可以直接说」,等于邀请对方帮你检查 Y 是否合理。
3.2 作为回答者:多问一句「为什么」
当别人来问一个具体的 Y 时,可以先问:
- 「你最终想实现什么效果?」
- 「这个是为了解决什么问题?」
- 「如果这一步做成了,下一步打算做什么?」
几个值得警惕的信号:
- 问题本身很奇怪,正常人很少会有这种需求;
- 问题非常具体但缺少上下文,比如「怎么关闭某个校验」;
- 对方给的方案明显绕远路,或者需要很多 hack;
- 你给了答案之后,对方又带着一个新的类似问题回来。
追问的时候要注意语气。「你为什么要这么做?」听起来像质疑,「你最终想达到什么效果?我看看有没有更简单的办法」听起来就是在帮忙。
当然也要把握分寸:如果对方已经说明了背景,并且有明确理由坚持方案 Y,那就尊重对方的判断,直接回答 Y。
4. 高效沟通的四个关键技术
X/Y 问题只是沟通中「信息」层面的一个陷阱。左耳朵耗子在专栏中把沟通技术归纳为四个方面,结合起来看会更完整。
4.1 逻辑:分清因果和前提
专栏里举过一个例子:某产品统计发现约 40% 的用户视频下载到一半就取消了,团队想模仿「前 90% 嗖地过去,最后 10% 才是真实进度」的进度条来提升体验。
他们的逻辑是:用户看到已经下载了 90%,会愿意多等一会儿。但仔细分析,这个方案的前置条件是用进度条欺骗用户,而用户放弃下载的原因并没有被分析清楚:是下载太慢?是文件太大?还是根本不需要下载完整视频?如果原因没找准,换个进度条并不能留住用户。
这其实也是一个 X/Y 问题:X 是「提升下载完成率」,Y 是「让进度条看起来更快」。
沟通中要经常问自己:
- 这两件事之间真的有因果关系,还是只是相关?
- 这个结论成立的前提是什么?前提本身成立吗?
- 是充分条件还是必要条件?
4.2 信息:完整、准确、不带预设
这正是 X/Y 问题所在的层面。高效沟通需要信息:
- 完整:目标、背景、约束、现状都要讲;
- 准确:用数据和事实,而不是「好像」「大概」「很多用户」;
- 不带预设:先说问题,再说方案,不要把自己的方案当成问题本身抛出来。
一个简单的自检方法:把你的问题发给一个完全不了解背景的同事,他能不能看懂你想干什么?
4.3 维度:低维度反驳,高维度说服
专栏中有一句话很值得记住:
在和人争论时,如果要反驳,那一定是低维度反驳,越细节越好。而在说服对方时,则要在高维度说服对方,越宏观越好,比如从公司的大目标出发。
这和 X/Y 问题也有联系:
- X 往往在更高的维度:它关乎目标、业务价值和用户体验;
- Y 往往在更低的维度:它关乎具体实现细节。
当双方在 Y 上争执不下时,不妨把讨论拉回到 X:「我们其实都想解决的是……,那哪种方案更好?」一旦目标对齐,细节上的分歧通常会容易很多。
4.4 共同:找到共识再谈分歧
专栏把这一点总结为共情、共享、共利、共识以及换位思考。
沟通不是为了赢,而是为了一起把事情做成。在讨论方案之前,先确认双方对 X 的理解一致:
- 我们要解决的问题是同一个吗?
- 我们对成功的定义是一样的吗?
- 对方的约束和顾虑是什么?
很多看似激烈的争论,最后发现只是双方对 X 的理解不一样。
5. 一份沟通前的检查清单
发消息、提问或者开会之前,可以花半分钟过一遍:
- 我有没有说清楚最终目标(X),而不只是我想到的做法(Y)?
- 对方需要的背景和约束我都给了吗?
- 我描述的是事实和数据,还是主观感受?
- 我的推理链条里,因果关系是否成立?
- 我有没有给对方质疑方案的空间?
- 如果对方完全不了解背景,能一次看懂吗?
作为回答者:
- 我理解对方真正想解决的问题了吗?
- 这个问题是不是有点奇怪,值得追问一句?
- 除了回答 Y,有没有更直接解决 X 的办法?
6. 小结
高效沟通的核心,不在于口才有多好,而在于让双方尽快对齐到同一个问题上。
X/Y 问题之所以常见,是因为人很自然地会把「我想到的办法」当成「我要解决的问题」。避免它的方法其实很简单:
- 提问时:先说 X,再说 Y;
- 回答时:先问 X,再答 Y。
在 AI 助手越来越普及的今天,这一点同样适用。向大模型提问时,如果只问「怎么做 Y」,它通常也会很认真地帮你把 Y 做出来,哪怕 Y 是一条弯路。把目标和背景讲清楚,往往比反复调整提示词更有效。