如何沟通:掌握正确的沟通流程

如何沟通:掌握正确的沟通流程

写这篇文章的直接动机是我在社区和工作中听到、看到的一些问题,在B站视频《我是学生我很闲 求带我贡献Github装逼》中,一个自称哈工大的研究生发了一个看似态度很好,但实际上非常不尊重别人的comment,我只能说太tm真实了,我甚至能脑补出伸手党的语气:怎么啦,我好意参加项目,好声好气求人都不行?

对,不行。

与提问的智慧

通常,人们会推荐他们去读一读《提问的智慧》这篇文章。如果你访问GitHub有困难,也可以读读HITSZ-OSA的标注版本。这篇文章从提问前、提问时、解答答案这三个方面给所有人以建议,是一篇非常好的入门文章。
我不想重复这篇文章的内容,但是我想从我自己的经验来谈谈我在社区和工作中遇到的问题。首先我会给出一个两个分属不同小组的开发人员沟通失败的案例,分别从他们的角度看看他们的想法和行为出现了什么偏差,最后给出一个我自己的经验总结。

从一次争吵说起

故事、人物纯属虚构,这里不假定小红或小明的族裔、性别等等,这个名字只是为了写作之便

同学A和同学B分属于同一产品的两个不同的小组,同学小红的服务A为同学小明的服务B提供后台支持。在功能测试中,测试人员发现某个功能在A服务发生未捕捉的错误时,似乎会出现显示不正确的情况(事后证明是测试人员未刷新页面,实际上这个功能没有问题),于是提出了一个Bug并指派给了小红,小红为了解决这个Bug,在未对代码进行确认的情况下,设想了一套解决方案:在A服务向B服务报错时,B服务将这条请求的所有操作回滚。为了让小明实现这个方案,发生了以下对话:

  • 小红:小明,我想请教你一个问题,你看看这个你能不能做
  • 小红:测试提了一个BUG,在前端向服务B请求的时候,我这边服务A报了个错,然后这个请求记录就出现不正常的情况了,我想问问你能不能在服务B这边做一下,如果服务A报错,就把这个请求的所有操作回滚
  • 小明:为什么是这样?你看过原来的设计吗?这个是需求要求的吗?在原来的设计中,这里是单向的异步任务,这里应该是服务A生成有一条错误记录,而不是回滚服务B。我记得需求也是生成错误消息而不是无事发生吧?
  • 小红:但是错误记录是后面生成的,这里服务A是在最前面就抛错了,我没有捕获这个错误

其实这个时候已经很明确了,小红没有听懂小明的意思,也没有查看过之前的设计

  • 小明:服务B这里依赖了其他组件,无法做回滚
  • 小红:那好吧,你不做的话我也没办法,因为这里是服务A在最开始就报错了,没有进入后面的流程
  • 小明:你是不是没有理解我之前的方案然后又重复了你说的话?
  • 小红:是啊
  • 小明:那就没什么好说的了,你先想明白再说吧(态度很差,摔门而去)

这个时候小明已经很生气了,因为小红没有听懂他的意思,只知道自说自话,小明觉得小红在浪费他的时间

最后,小红反馈小明太过敏感,太过严格,情绪化严重,不配合别人工作。

小明反馈小红擅自修改设计,不听别人解释,不了解背景就提出方案,不尊重别人的工作。

让我们看看他们都在想什么

小红想的 小红说的 小明说的 小明想的
我的方案需要小明修改,我需要向他确定能不能做 小明,我想请教你一个问题,你看看这个你能不能做 / 我的模块出问题了?
还是这是在给我派活?
我向小明描述想让他做的事就好了 测试提了一个BUG,
在前端向服务B请求的时候,
我这边服务A报了个错。
然后这个请求记录就出现不正常的情况了,
我想问问你能不能在服务B这边做一下,
如果服务A报错,就把这个请求的所有操作回滚
/ Bug链接在哪?
我完全不了解背景
但听起来是A服务的问题
为什么是我来做?
你就告诉我能不能做就好了
为什么还要问这么多问题?
不能做就我这边做呗。
难道是没听懂我说的?
/ 为什么是这样?
你看过原来的设计吗?
这个是需求要求的吗?
在原来的设计中,这里是单向的异步任务
这里应该是服务A生成有一条错误记录,
而不是回滚服务B。
我记得需求也是生成错误消息而不是无事发生吧?
我想先了解背景,比如你的方案是不是从原有设计稿出发的
我觉得你没听懂我说的
我再重复一遍
但是错误记录是后面生成的,
这里服务A是在最前面就抛错了,
我没有捕获这个错误
/ 这个决定和设计稿不符
有什么情况能推翻我刚才说的设计吗?
/ 服务B这里依赖了其他组件,无法做回滚 这里依赖太多,
回滚成本大
不行就算了,我再看看 那好吧,你不做的话我也没办法,
因为这里是服务A在最开始就报错了,
没有进入后面的流程
/ 什么意思?
是因为我不做所以才不行?
是你的方案有问题吧
/ 你是不是没有理解我之前的方案然后又重复了你说的话? 你是来征求我的意见还是来甩锅的?
我重复我的话是想让你理解我的话 /
那就没什么好说的了,你先想明白再说吧(态度很差,摔门而去) 找我开涮是吧??

事后复盘

经过进一步排查发现,这个BUG实际上是无效BUG,测试人员因为没有刷新页面,误以为没有生成错误记录。实际上是A服务的子流程抛错,错误记录已经正确生成。

在这个案例中,我们可以看出小红有几点做的不好:

  • 没有确认Bug就臆想解决方案,没有遵循正确的工作流程
  • 提出解决方案时没有了解之前的设计(RTFM),没有遵循正确的设计流程
  • 不理解小明在方案上的解释,反复重复自己的观点希望小明理解,没有遵循正确的沟通流程

小明也有不足之处,在最后摔门而去,是非常不礼貌的行为,不利于之后的继续合作。

经验之谈:如何沟通一个解决方案

这里对于工作流程和设计流程不做太多介绍,在《提问的智慧》一书和其他开源共享指南中,你可以找到很多出色的指南。这里我主要谈谈沟通流程。

沟通流程

原则:表达自己的观点,理解对方的观点,确认双方的共识和分歧。

目的:双方对问题形成一定划定,确定下一步行动项。下一步的行动项可能是更大规模或者其他形式的沟通,最终形成决策。

要点:

  • 对自己要说的事情
    • 准备好背景材料,一并提供
    • 用自己的话尽量准确地描述问题所在
    • 询问是否漏掉了什么关键信息
  • 对对方的回应
    • 倾听,确认你所同意的部分
    • 询问是否理解正确
    • 向自己不明确、不理解的部分提问
  • 重复上述流程,最后形成对问题的界定
    • 结论
      • 讨论后,我们认为的实际问题是什么
      • 我们在问题上形成了什么样的共识
    • 行动项
      • 在共识中,有一些我们不了解的情况需要进一步沟通或推进
      • 我们的共识可能有错误,需要召集更有经验/权限的人进行决策

如果一切顺利:小红与小明的沟通

这里我们发挥一下想象,如果小红和小明都遵循了沟通流程,他们的对话可能是这样的:

  • 小红:小明,我这里遇到了一个Bug,但我不确定是不是我这里的问题,我想请教你一下(附上Bug链接)
  • 小红:服务A似乎在没有生成记录之前就抛出了错误,导致后续的记录出现了问题,我想问问这个地方能不能由服务B进行回滚
  • 小明:你可能需要先看一看设计稿(设计稿链接),我印象里这里的设计是单向的异步任务。
  • 小明:服务B会依赖其他组件,做回滚的复杂度很高。
  • 小红:好,我先看看设计稿再和你沟通,谢谢你的帮助

在小红看过设计稿后,小红认为这里可能确实缺少了回滚的流程

  • 小红:我看过设计稿了,这个流程似乎是初始化的流程,我还是认为由回滚的必要
  • 小明:稍等,我看一下服务B的设计和代码

小明确认服务B是有设计和编写初始化失败的回滚的

  • 小明:我们对初始化失败有做处理,这个Bug似乎不是这里的问题,你有尝试复现吗?
  • 小红:还没,你是说可能这个Bug是无效的?我尝试复现一下

小红无法复现问题,排查后发现是这个Bug实际是测试人员失误,确为无效Bug。

从以上的沟通中,小红展示了独立解决问题的思路和正确的沟通方式,即使工作流程(未先确定Bug是否属实)有问题,也能在小明的提醒下即时发现,而不是埋头研究其他解决方案。这就是正确沟通的威力。

写在最后

让我们用《提问的智慧》中的两段话来结束这篇文章。

对小红:

低声下气不能代替你的功课
有些人明白他们不该粗鲁或傲慢的提问并要求得到答复,但他们选择另一个极端 —— 低声下气:我知道我只是个可悲的新手,一个loser,但…。这既使人困扰,也没有用,尤其是伴随着与实际问题含糊不清的描述时更令人反感。
别用原始灵长类动物的把戏来浪费你我的时间。取而代之的是,尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。
有时网页论坛会设有专为新手提问的版面,如果你真的认为遇到了初学者的问题,到那去就是了,但一样别那么低声下气。

对小明:

如何更好地回答问题
态度和善一点。 问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。
试探性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西 —— 你也可以。试试将蠢问题转变成好问题,别忘了我们都曾是新手。
尽管对那些懒虫抱怨一声 RTFM 是正当的,但能指出文件的位置(即使只是建议个 Google 搜索关键词)会更好。
如果你决定回答,就请给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计(workaround),应推荐更好的工具,重新界定问题。

补充材料

看看别人是怎么被喷的(下一个comment就是一个非常好的正例):https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/issues/1508#issuecomment-1662365628

看看别人是如何与我沟通的:https://github.com/Wh1isper/jupyter_kernel_executor/issues/8

看看我是如何提出我的想法的:


❓如何沟通:掌握正确的沟通流程
https://wh1isper.github.io/2023/09/19/2023-09-20-How-to-communicate-with-others/
作者
Wh1isper
发布于
2023年9月20日
许可协议