如何问一个有效的问题

更新日期: 2020-01-24阅读: 2.4k标签: 问题

问题像缝纫机上的丝线

杂乱而复杂

需要慢慢捋清

才能找到线的源头


“在么?”

“我使用XX框架启动报错,你帮忙看下?”

“我代码报错了,谁能帮我看下?”

“我发现一个诡异的问题”


生活中我们经常可以看到一些无效的问题,在开发运维工作中,经常可以看上面这些提问。比较有意思的例子是,工作中突然有个人找你,就说了句“在么?”。等你方便时回复“在,什么问题?”的时候,对方没回应。过了一会儿,对方又冒了一句“还在么?”。有一种像 TCP 连接需要做三次握手确认,这种交流是特别低效的。低效的问题有很多种,不能让对方快速清晰知道问题背景、具体问题的都算得上无效问题。然而在自己身上也有类似的经历。

这周和师兄联调一个接口,发现了一些数据不符合预期。于是我没想太多,就自然而然地将页面数据截图发给他,并且红色框框圈出问题的数据,直接发给他。然后说了句, “你这个数据有些问题,辛苦帮忙看下哈”。

我 以为 大家对项目的整体链路,整体设计都很清晰,只要轻轻点下问题就可以。结果一个简单的问题,却讨论半天,解释问题是什么。最后师兄抛出了一句,“ 你下次说问题时注意细节,建议说明背景、期望得到什么结果、实际是什么? ”。那一瞬间对自己冲击很大,是得好好思考下自己的反馈问题方式,学习如何能够高效表达一个问题,提高效率。

在平时生活或工作中,我们也经常能遇到别人向你寻求帮助或提问,或在遇到问题时也会让身边相关的人帮忙。社会合作体系导致我们必然会和身边的人共同协作完成工作,也有越来越多的问题需要反馈、沟通。大家时间都很忙,如果提出一个无效的问题往往耗费大家时间,影响效率。本文就说说自己的一些总结,希望对大家都有帮助。


01   首先遇到问题时,不要马上问别人

先自己排查,上网查询。一般我们生活中或开发中遇到的很多问题都是别人经历过的,而且网上资源丰富。通过搜索引擎工具,大部分问题我们都可以查到,避免问身边人一些低效的问题。比如当自己想要投资理财,买基金,于是问专业人士“基金是什么,基金与活期的区别是什么?”。

自己排查问题的过程可以提高自己解决问题能力,正如一些InfoQ 的大神说的一样,问题见多了你就成为大神。见多了,积累多了你的能力就上去了。就像古代的一些名将,都是历经大大小小战役以后积累丰富经验。

另外,自己排查问题,明确背景、明确问题的本质,而不是只看到问题的表象。将反馈的问题提前定位,捋清楚, 看是否真的是对方的问题。避免查到最后是自己问题,却反馈给对方,出现尴尬的局面。


02   提炼问题的核心

简单提炼问题的核心,通过简单的一句话能够描述出问题的核心和本质。根据专业领域不同,带上专业领域相关关键词,能够让对方一眼大致知道问题类型是什么,问题是什么。避免用了一大段详细描述以后,对方还不知道是什么问题。

类似一篇文章的核心思想、作文标题,能够一看就看出问题。避免使用“在么?”,  “系统起不来了” 等非常抽象的词描述。以我的例子,可以概括为“xx 接口返回的数据结果不符合预期”。这个也类似一个问题的代号,后续只要说这个标题大家都知道是哪个问题,方便沟通。


03 清晰描述具体问题、期望的目标和现状

下面就是需要清晰描述具体问题是什么,最好包含期望达到的目标是什么,以及目前遇到的现状。例如:

问题:xx 接口调用时返回的数据结果中的总数和成功数字不符合预期。 

期望 :结果中的总数应该大于成功数量。成功数量是实际执行成功的数量,不含有失败等数量。总数包含所有的数值。

现状: 总数小于了成功数量。

该过程主要让问题具体化,让对方更加明确问题所在。如果可能最好是加上相关截图、日志,证明事实真的是这样。避免出现质量同学和开发同学反馈问题时,开发同学习惯性用“我这边运行好好的,肯定是你使用有问题”来辩驳。


04  问题的场景,如何复现该问题

一个问题能够复现,就解决了90%。发现问题时,将问题出现的场景、条件捋清楚。场景是说明通过哪些步骤、哪些场合发生问题,通过什么方式能将问题复现。这些方便对方定位问题,提高排查效率。

有些问题是在极端条件下才能产生,开发平时也注意不到。如果仅仅是反馈问题,在他的认知里不可能会出现这个错误,他就会反驳你。所以场景和复现手段是非常必要的,一个程序会因为不同变量做出不同反应,这引起问题的变量就是场景。 描述的过程尽可能的具体,避免使用你和对方理解不同的概念,导致歧义 。


05 补充信息,比如自己排查阻塞点

尽可能多地补充问题信息,能够让对方快速排查到问题。比如操作系统、操作系统版本、框架版本、具体排查的日志等。也可以将自己已经排查的点和相关日志贴出,说明目前阻塞的点在哪里,怀疑可能出错的地方。补充更多更详细的信息,也是避免双方理解不同导致的误会,影响沟通效率。

每个领域不同,补充的信息也就不同。比如注册中心相关问题,需要说明哪个订阅者无法订阅到哪个发布者的xxx服务。所以可以提供的信息如下:

服务:xxxx

发布者:xxxx ,  IP  xxx.xxx.xxx.xxx

订阅者:xxxx ,  IP xxx.xxx.xxx.xxx


06 问问题之前自己过一遍

提问前最好自己过一遍,看有哪里描述不清晰的,哪里表达不通顺,以及是否可以通过现有的这套描述可以让对方很清晰的知道问题所在。 


07 我自己的一套模板

问题:XXX 版本的 XXX 接口调用返回的数据不符合预期。

期望 :xxx 接口的执行总数应该大于执行成功数量。执行成功数量应该只统计成功执行的数值不能包含其他值。

现状 :接口返回的成功数量大于执行总数;成功数量也不是具体的成功数值。

场景 :

  1. xxxx

  2. xxxx

  3. xxxx

补充 :  

  1. 客户端机器 ip xxxx

  2. 服务端机器 ip xxxx 

  3. 请求流水号 xxxx  

  4. 我排查的日志详情 xxx 

最后对方帮你把问题解决完了,不要忘了说声感谢。

原文:https://mp.weixin.qq.com/s/V8ZpjMgOeiAIPSzh35F7aQ

链接: https://fly63.com/article/detial/7613

解决mac上每次升级nodejs都要重新安装扩展包的问题

以前用起来没注意到这个现象,最近一段时间发现,每次随着使用brew upgrade自动升级了nodejs版本,原来安装的nodejs扩展包就不起作用了,还需要重新安装一遍。再加上一些扩展包存储网站被墙的问题,这个过程真是令人痛不欲生

.Net Core IFormFile 始终为空的问题

前获取上传文件都是使用Request.Form.Files获取,直到这次改成定义形参 IFormFile时才遇到这个问题。方案一:去除[ApiController]这个Attribute,方案二:在[FromForm]里添加Name属性

点击form 表单中的button导致页面刷新问题

做点击按钮切换背景样式与内容的时候每次都刷新页面 ,发现button写在了form 标签当中,将input或者button的type属性改为button,点击按钮页面就不会自动重新加载了。

解决ios端点击出现闪烁或黑色背景的问题

最近开发一个简单的H5页面,在IOS端测试的时候发现,点击按钮会闪动,出现一个黑色的背景一闪而过,影响用户体验。在ios端,safari浏览器上触发click事件有300ms的延迟相应

前端开发中遇到的一些问题

页面两个标签(非block样式)之间有一个小margin,样式怎么改都去不掉 ;app上点击有背景;手机端input边框阴影;chrome模拟器里点击元素错位;git push 报错RPC failed;

12个HTML和CSS必须知道的重点难点问题

这12个问题,基本上就是HTML和CSS基础中的重点难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视的,浮动也是一个大坑,有很多细节

在ios端点击按钮闪烁解决方法

在ios端,safari浏览器上触发click事件有300ms的延迟响应,为touch添加的样式会和click冲突而出现闪烁问题,在safari中触摸事件的相应顺序如下:

js中使用append应注意自动补全问题

一般的标签是如<td></td>、<tr></tr>、<div></div>以成对出现,如果缺少一个都会出错,而append为了保证页面代码的准确性,会对标签进行自动补全,如

Js中的返回值问题

如果函数没有返回值(没有return语句),那么就会返回构造函数的实例(p1);如果函数返回了一个基本数据类型的值,那么本次构造函数的返回值是该实例( p1)

Node中url.parse(url, true).query:[Object: null prototype]问题

在node v13.5.0中通过url模块解析get请求参数的时候,遇到query: [Object: null prototype],如果我们在node中console.log一个null prototype,就会出现[Object: null prototype]

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!