工作中经常会遇到一种提问方式:
"这个文件上传 OSS 报权限错误,应该怎么解决?"
"这个定时任务怎么避免重复执行?"
"这个 SQL 怎么优化?"
这些问题本身看起来都很具体,也很像技术问题。但继续追问两句之后,可能会发现:真正的问题并不是 OSS 权限、定时任务,也不是 SQL 优化。
而是提问的人在拿到一个需求之后,先自己脑补了一套实现方案,然后在方案的某一步卡住了,于是只把"卡住的那一步"拿出来问别人。
这类问题最麻烦的地方在于:它问得很具体,但不一定问对了。
一个常见的场景
业务侧希望能导出一批订单数据,方便做活动复盘。
有人拿到这个需求后,自己分析了一下,觉得应该这么做:
- 写一个定时任务;
- 每天凌晨生成一份 Excel;
- 把 Excel 上传到 OSS;
- 再给运营一个下载链接。
做到第三步时,发现上传 OSS 一直报权限错误,于是来问:
"OSS 上传文件提示 AccessDenied,应该怎么处理?"
如果只看这个问题,我们很容易开始一起排查:
- AK/SK 配置是否正确?
- Bucket 权限是否开放?
- RAM 账号有没有 PutObject 权限?
- 上传路径有没有写错?
- STS Token 是否过期?
这些当然都是合理的排查方向。
但如果回到需求本身,会发现真正的问题是:
运营只是想临时筛选订单并导出数据,并没有要求每天自动生成文件,也不一定需要上传 OSS。
也就是说,他卡住的那一步,可能根本不是应该做的那一步。
更简单的方案可能是:
- 后台增加订单筛选条件;
- 当前查询结果支持导出 CSV;
- 权限控制在后台菜单上;
- 文件实时生成并下载,不需要长期存储。
这样一来,不需要定时任务,也不需要 OSS,更不需要排查上传权限。
问题不在于不会解决 OSS 权限,而是一开始就把需求理解成了另一个复杂很多的东西。
为什么这种提问方式效率低?
因为它跳过了最重要的一层:真实目标。
当一个人只问"方案里的某一步怎么做"时,回答的人很难判断:
- 这个步骤是不是必要的;
- 这个方案是不是过度设计;
- 有没有更简单的路径;
- 需求本身是不是被误解了;
- 当前卡点是不是根本可以绕开。
于是双方很可能在一个错误方向上投入时间。
提问的人觉得自己问得很具体,回答的人也认真帮忙排查,但最后发现整个方案都不该这么做。
这就是沟通中的一种隐形浪费。
好的提问,应该先交代问题本身
更好的提问方式不是一上来就问:
"OSS 上传权限怎么配?"
而是先说清楚:
"现在有个需求:运营想导出订单数据做活动复盘。我目前想到的方案是每天定时生成 Excel 上传 OSS,再给运营下载链接。但我做到上传 OSS 时遇到了权限问题。你看这个方向合理吗?如果合理,我再继续排查权限;如果不合理,有没有更简单的实现方式?"
这样问,信息就完整很多。
它至少包含了四层内容:
- 需求背景:运营要导出订单数据;
- 业务目标:用于活动复盘;
- 当前方案:定时生成 Excel 并上传 OSS;
- 当前卡点:OSS 权限问题。
有了这些信息,别人才能判断:到底是帮你解决权限问题,还是先帮你把方案拉回正确方向。
先问"我要解决什么",再问"这一步怎么做"
技术方案很重要,但它应该服务于需求,而不是代替需求。
很多时候,我们容易陷入一种惯性:拿到需求后立刻开始拆技术步骤,然后在某个细节里越陷越深。这个过程看起来很认真,但如果最开始的方向错了,后面越努力,偏得越远。
所以在提问前,可以先问自己几个问题:
- 这个需求真正要解决什么问题?
- 使用这个功能的人是谁?
- 他希望在什么场景下使用?
- 有没有时间、权限、数据量、频率上的约束?
- 我现在的方案是需求要求的,还是我自己推导出来的?
- 我卡住的这个点,是不是可以通过换方案绕开?
这些问题不复杂,但能避免很多无效沟通。
一个推荐的提问模板
如果不知道怎么组织问题,可以用这个模板:
我现在遇到一个需求:XXX。
目标是:XXX。
当前约束是:XXX。
我想到的方案是:XXX。
目前卡在:XXX。
我想确认的是:这个方向是否合理?如果合理,卡点应该怎么解决?如果不合理,有没有更合适的方案?
这个模板的重点不是形式,而是提醒我们:不要只暴露卡点,也要暴露上下文。
因为别人真正能帮你的,往往不是解决一个孤立的小问题,而是帮你判断整个方向是否正确。
总结
提问不是把自己卡住的那一步丢给别人。
更好的提问,是把需求、目标、约束、方案和卡点一起讲清楚。
很多时候,我们以为自己卡在技术细节上,其实是卡在对需求的理解上。先问问题本身,再问实现步骤,沟通效率会高很多,方案质量也会高很多。
一句话总结:
不要只问"这一步怎么做",先问"这一步该不该做"。