**摘要:** 需求管理是一门艺术。

<!-- more -->
开发产品的时候,我们每天都会面对各种各样、没完没了的需求,有的来自外部用户的反馈,有的来自内部团队的 idea,有的是产品的 BUG,有的是新的功能...
看起来只要实现所有需求,产品就可以变得更好,然后吸引更多的用户,接着赚更多的钱,之后招更多的人,再完成更多的需求...
问题是,需求会源源不断地进来,我们永远也不可能清空所有需求,996 也做不完,这辈子都不可能。
我们能做的,是不断将需求排序,实现优先级最高的需求。那么问题来了,**我们应该如何给需求排序?**
### 以用户为核心确定优先级
乔布斯曾经说过:
> People don't know what they want until you show it to them.
用户真的不知道他们想要什么吗?很多时候并非如此。
我负责产品,**每天都会和用户交流**,他们知道自己想要什么功能,有时会做好简单的交互设计、帮忙想想算法、甚至给我开源代码。
问题在于,用户只是产品的使用者,他们对于产品的理解没有我们那么深刻,所以他们提出的需求有时会偏离问题的本质,需要我们进一步分析与挖掘。
我们不是乔布斯,没有能力创造需求;我们也不是张小龙,没有 1 亿人教我们做产品。因此,我们应该多与用户交流,以用户需求为核心确定优先级:
- 用户反馈或者吐槽的时候,耐心一些,聊得更深入一些,同时做好记录
- 修复 BUG,优化功能或者新增功能时,与感兴趣的用户主动联系,他们会给你更多的反馈
- 定期做用户调研,听听沉默的大多数是怎么说的
- 对于用户所提的需求,根据反馈用户多少、影响范围、难易程度进行排序
当我们做产品的时候,创造的欲望是非常惊人的,总会有一些新的 idea 让我们激动不已,恨不得明天就能上线。但是,我们应该克制自己的创造欲,尊重用户的意见。我们的产品是给客户用的,不是给自己玩的。
流量红利已经枯竭的时代,获取一个新用户比留住一个老用户难太多了,因此提高留存率显得非常重要。重视每一个用户反馈,及时修复他们发现的 BUG,优先实现他们想要的功能,是提高留存率最有效的方式,没有之一。
### BUG 的优先级高于新功能
墨菲定律是这样的:
> Anything that can go wrong will go wrong.
程序员应该都知道,**代码怎么可能没有 BUG 呢?**很多时候只是我们没有发现,或者是知道了却没有及时修复。
然而,对于当前产品的 BUG,我们往往容易忽视。可能是 BUG 隐藏的太深,我们和用户都没有发现;可能是用户发现 BUG,但是没有反馈;也可能是我们选择性失明,觉得问题不大。
事实上,用户对产品质量的要求非常严格,再小的问题他们也会发现,也会吐槽。用户反馈的话我们还能知道,否则我们可能很晚才发现 BUG,如果没有监控的话。
还有一种微妙的情况,当用户反馈貌似不可能出现的 BUG 时,我们会本能的觉得产品应该没有问题,问题应该出在用户那里,大概是他的浏览器或者网络,或者某种无法解释的原因导致的。其实,这只是我们在逃避问题,代码的运行方式是确定的,没有什么不能解释的地方,如果什么地方不太对劲了,那基本上是 BUG。这里分享一个我们的经历:
> 某个用户反馈,他在邀请成员加入团队的时候发现,偶尔会有那么一次邀请失败。
> 我们检查了一下监控数据,发现确实有失败过,影响的用户不止一个,但是很少。
> 然后,我们检查了一下前后端代码,发现没有问题。
> 既然业务代码没有问题,那应该没有 BUG,这事大概是什么奇怪的原因导致的,我们什么也不用做吧...
> 后来,又有几个用户反馈同一个问题,报错也越来来越多,我们不可能再骗自己了!
> 再次检查,业务代码确实没有问题,但是报错的代码位置的行号和列号都偏移了,这么诡异?
> 不难猜测,生产环境运行的是旧代码!检查一下果然是这样。
> 接着,不难发现部署的 Docker 配置文件有问题,导致某个节点部署的后端代码是旧的...
我们总是这样,不停地向前走,不断地追求新的成就,逃避当下的问题。**听着是不是很像我们的生活?**
对于产品 BUG,我们应该第一时间修复,或者设置一个 Deadline,新的功能可以稍微延后。
如果我们不停地开发新功能,那当初开发这个有 BUG 的旧功能究竟是为了什么?如果我们忽略当前用户反馈的问题,那我们费这么大劲拉新是为了什么?
### 结论
需求管理是一门艺术,需要考虑和权衡的东西很多,暂时给大家一个简单的优先级排序,仅供参考:
- 用户反馈的 BUG
- 自己发现的 BUG
- 用户反馈的需求
- 自己想出的需求
严格按照这个顺序操作是不可能的,这是给大家提供 2 个思考维度。实际工作中,每个需求的影响范围、紧急程度、难易程度也需要考虑。
你有什么更好的想法吗?欢迎留言讨论!本文作者为 Fundebug 的技术总监,欢迎添加微信交流:KiwenLau。
### 参考
- [产品需求优先级的艺术 -- Kano 模型](https://mp.weixin.qq.com/s/l8VOj0ofnUAojFgaymi_IQ)
- [如何成为优秀的技术主管?你要做到这三点](https://mp.weixin.qq.com/s/0LVj1IcWMWAuUeY6U7r4hg)
- [为什么美国程序员工作比中国程序员工作轻松、加班少?](https://mp.weixin.qq.com/s/eLl-juu6faqPwfBzAwc29Q)
### 关于Fundebug
[Fundebug](https://www.fundebug.com/)专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家[免费试用](https://www.fundebug.com/team/create)!

- 如何高效地遍历超大MongoDB集合
- 深入理解 JavaScript 执行上下文和执行栈
- JavaScript 为什么要有 Symbol 类型?
- Web 性能优化:21 种优化 CSS 和加快网站速度的方法
- 深入理解 JavaScript 作用域和作用域链
- WEB 实时推送技术的总结
- 前端面试:谈谈 JS 垃圾回收机制
- TypeScript,初次见面,请多指教 ?
- 使用这些 HTTP 头保护 Web 应用
- JavaScript 的 4 种数组遍历方法: for VS forEach() VS for/in VS for/of
- 装上这几个 VSCode 插件后,上班划水摸鱼不是梦
- 一文搞懂TCP与UDP的区别
- 如何优雅地查看 JS 错误堆栈?
- 一文读懂 HTTP/2 及 HTTP/3 特性
- Web 性能优化: 图片优化让网站大小减少 62%
- 我们应该如何给需求排序?
- Web 性能优化: 使用 Webpack 分离数据的正确方法
- 2019 前端面试题汇总(主要为 Vue)
- 高效使用VSCode的9点建议
- 小程序多端框架全面测评:chameleon、Taro、uni-app、mpvue、WePY
- 灵活使用 console 让 js 调试更简单
- 深入了解浏览器存储:对比Cookie、LocalStorage、sessionStorage与IndexedDB
- JavaScript是如何工作的:引擎,运行时和调用堆栈的概述!
- Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
- 如何来一次说干就干的重构 (流程篇)
- JavaScript 新语法详解:Class 的私有属性与私有方法
- JavaScript 原型的深入指南
- 一个程序员的自我修养
- 为什么HTTPS比HTTP更安全?