编者按:本文作者Berwin,W3C性能工作组成员,360导航资深前端工程师。《深入浅出Vue.js》作者。

今天想谈一谈关于“需求分析”和“开发时间”这两个话题,工作这么些年还是头一次公然讨论这个话题,今天聊一下我对这两个话题的浅见。

需求分析

早些年在我刚开始工作时,我认为“需求分析”就是听一听产品经理提的需求,评估下开发可行性和难度,把实现不了的需求砍掉。

这么多年过去了,我发现这是最Low Level的需求分析。

原因在于当时的我完全不知道产品经理为什么要提出这个需求,我甚至压根没有关注过这个问题,当时的我只关注这个需求如何实现,难度如何。所以我很难理解产品经理,甚至经常站在技术的角度认为产品经理提出的这个需求好傻啊,他是智障吗?

但其实产品经理和工程师不应该是敌对关系,应该是“搭档”,现在我和我们的产品经理一直是搭档关系,我们的关系很融洽,因为我们的目标是一致的:让我们的产品,满足用户的需求。

但有时候产品经理提出的需求可能不是很正确,这个时候需要工程师进行辅助。这里面有很多原因:

  1. 产品经理可能对技术的边界不是很了解,所以无法充分利用技术解决用户需求

  2. 对用户原始需求的理解是很难传递的

  3. 产品经理对用户需求的理解有误

  4. 其他

我们先讨论第一点:“产品经理可能对技术的边界不是很了解”

产品经理可能对技术的边界不是很了解

优秀的产品经理是需要有技术广度的,他不一定要深入了解技术的原理,但一定要理解技术的边界。某个技术能做什么,不能做什么,最近是不是又有新技术了,和我的产品有关系吗?

但通常大多数产品经理都比较缺乏技术广度,所以这个时候需要工程师去补位。

但工程师去补位有一个前提,那就是工程师真的理解产品经理,理解他在想什么。这就要谈到第二点:对用户原始需求的理解很难传递

对用户原始需求的理解很难传递

很多时候,产品只是发了个产品文档过来,然后就拉着技术做“需求评审”,但其实这份需求文档,是产品经理对用户需求理解的二次加工。工程师在这份需求文档里是很难看清用户的原始需求的。

比如:用户需要一个消息提醒。产品经理可能是不知道有Web Push Notifications这项技术,也可能是对用户需求理解有误,总之最终提出来的需求是在网页的最顶部添加一个消息通知功能。

所以工程师应该主动去了解用户的原始需求是什么,当工程师能理解用户的原始需求是什么时,也就能理解产品经理为什么提这个需求了,就可以在这个时候成为产品经理的搭档,提醒他,有一项技术叫做Web Push Notifications,它的能力边界是什么。

一个好的需求,应该是技术深度参与,而不是产品经理单方面输出一个产品需求文档,因为产品经理有时候也会犯错,这就是我们要谈论的第三点:产品经理对用户需求的理解有误

产品经理对用户需求的理解有误

有时候用户反馈需求,或者产品经理在推测用户想要什么的时候,往往得到的答案是不正确的。因为有时候用户自己也不知道他需要什么。有一句话非常有名:你如果问用户想要什么,他的回答是“一匹更快的马”,而不是汽车。

所以工程师要理解用户的原始需求,并且有自己的看法,这样不光可以给产品经理提出建设性意见,并且还可以对技术方案进行“预判”,如何设计项目的架构?最重要的就是要对产品未来的发展方向进行“预判”,一方面要对未来的改动 “做足准备”,另一方面也要避免 “过度设计”

小结

总之需求分析不是简单的听一听产品经理提的需求,评估下开发可行性和难度,把实现不了的需求砍掉。而是去理解用户的原始需求,和产品经理成为“搭档”,在产品经理因为缺乏技术广度或其他原因导致提出坏需求时,给出提醒并提供建设性意见。

所以你会发现我的标题叫做“需求分析”而不是“需求评审”,因为“需求评审”的潜台词是:我不知道用户需要什么,我只知道如果产品提出了很傻的需求,我就把这个需求砍掉。

讨论完需求分析,接下来讨论下“开发时间评估”。

开发时间评估

工作这么些年,直到今天我依然无法“准确”评估开发时间。

我认为是我的问题,是我没有掌握某些评估开发时间的方法论,为此我找了组内的技术专家和我的Leader请教他们是如何评估开发时间的。技术专家告诉我,可以用自己估算出的时间,乘以一个系数。我的Leader告诉我,可以根据以往的经验,来评估某个需求需要开发多少个“工作日”。

比如评估了5个工作日,但实际开发可能需要一个10个工作日。因为每天不一定一整天都在开发,还会去开会和处理其他杂事。

我评估的不是自然日什么时间完成,而是这个需求要多少个“有效工作日”可以完成。

评估好了有效工作日数,就可以根据工作日看需求的类型,有些需求是绝对不允许延期的,比如618,双十一这种需求都是不可能延期的,对于不可以延期的需求,如果评估出的有效工作日已经超出Deadline,那么这时候需要让产品经理把这个需求需要完成的所有功能的“重要程度”列出来,优先开发最重要的功能。如果评估后发现连最重要的功能都无法在Deadline之前完成,那么解决方案有两种,一种是寻求更多的资源,另一种是这个需求就整个砍掉。

听完之后,我学到了很多知识,“除了预估开发时间,别的我都学会了”。无论是“用评估的时间乘以一个系数”还是“根据经验评估有效工作日”,都没有正面回答如何准确预估开发时间的问题。

后来我又看了一些书,得出了一个结论:没有人可以准确估算出开发时间,准确估算开发时间是不可能的

即使是特别简单的需求,也是无法准确评估开发时间的,例如:我可以准确的评估出我用一个工作日可以封装一个JSONP,但我无法准确评估几个小时能完成。

这不是抬杠,这是一个道理,我虽然不知道我几个小时能完成,但是我知道我一天可以完成,我虽然不知道几天可以完成,但我知道一个星期肯定可以完成。

既然结论是评估的时间根本不准,那就不评估了么?和产品经理说我不知道需要多久,开发完了我再找你?肯定不行,产品经理一定会要一个开发时间,必须得给一个,哪怕不准。

既然开发时间是无法准确评估的,而我们又必须给一个开发时间,那么我们要做的事就不再是如何评估开发时间了,而是变成了“风险管理”。

风险管理

风险管理最常用的方法叫:留点余地。

这种方法的思想是,我知道自己评估的工作日不准,那么为了应对各种意料之外的事发生,我需要安排一些额外的时间来以备不测。

可能遇到的风险:

  1. 这个功能比我预期的要难,需要更多的开发时间

  2. 团队成员有急事请了两天假

  3. 其他

用自己评估的工作日乘以一个系数,就属于这种类型。有一篇文章《我在淘宝做前端的这三年——第二年》里也介绍了一种方法也属于这种类型:

  • 需求非常明确而且经常这样做:评估的工作日*1.5

  • 需求不清晰,有可能变,但代码和技术方案熟悉:评估的工作日*2

  • 需求不清晰,代码和技术方案也不熟悉需要探索:评估的时间*2.5

越不确定的事,未知的东西越多,风险越高,所以需要留有更多的时间以备不测。

我一般会问产品经理一个问题,我会和他说:你想要保守点的时间还是正常点的时间?保守点的是我用系数乘后的结果,正常点的是我凭经验和感觉认为多久能完成。

然后我会和他说:正常的时间,不一定准,我不能保证这个时间一定会完成,我只能尽力去完成,但保守的时间一定会完成。

通常最终商量后的结果就是把时间定到保守的时间上,然后开发尽量提前完成,但是最晚也不会超过保守的时间。

如果连不准确的开发时间都评估不出来,上面的方案不就失效了,那怎么办?

还有一个非常简单粗暴的方法:可以把需求难度分为三个等级:简单、中等、困难。

  • 简单需求:需要2~3个有效工作日

  • 中等需求:需要2~3周

  • 困难需求:需要2~3个月

对于简单和中等难度的需求,在需求有DeadLine并且评估后发现最重要的功能也无法在Deadline之前完成,那么可以靠“堆人”来换取时间,但只适用于简单和中等难度的需求。对于复杂的需求,人员的数量根本没用,唯一可以让开发时间提前两个月以上,并且技术方案和质量都有保障的方案是:需要一个该领域的专家。

小结

经过我自己的经验和我请教的各种专家来看,结论是:开发时间的评估完全靠感觉,感觉是不靠谱的,所以最重要的事是做风险管理。

关于奇舞周刊

《奇舞周刊》是360公司专业前端团队「奇舞团」运营的前端技术社区。关注公众号后,直接发送链接到后台即可给我们投稿。

需求分析与开发时间评估相关推荐

  1. 前端该如何评估开发时间

    一.需求分析 产品经理提出的需求可能不是很正确,这个时候需要工程师进行辅助,原因如下: 1.产品经理可能对技术的边界不是很了解,所以无法充分利用技术解决用户需求.优秀的产品经理是需要有技术广度的,他不 ...

  2. 程序员如何精确评估开发时间?

    一个程序员能否精确评估开发时间,是一件非常重要的事情.如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱 经验十足 对需求很了解 延期风险小 合格的软件工程师 正规军,不是野路子 评估开发时间的重 ...

  3. 如何精确评估开发时间的 4 个小套路?

    一个程序员能否精确评估开发时间,是一件非常重要的事情.如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱 经验十足 对需求很了解 延期风险小 合格的软件工程师 正规军,不是野路子 评估开发时间的重 ...

  4. 如何精确评估开发时间?

    一个程序员能否精确评估开发时间,是一件非常重要的事情.如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱 经验十足 对需求很了解 延期风险小 合格的软件工程师 正规军,不是野路子 评估开发时间的重 ...

  5. 如何评估项目的开发时间

    最近在看了一下有关PMP项目管理方面的书,对项目时间评估这块有一些想法和总结,特此记录一下. 在项目开发中如何进行时间评估,是一件很难同时又很重要的事情.一定即做到准确客观又做到有理有据.通常领导希望 ...

  6. 前端如何更精准的评估开发时间

    引言 在日常的前端项目中,我们经常需要对需求任务进行功能点Task分解,分解Task是为了更合理地进行开发资源分配,也是为了更准确地对项目进行评估和管理.然而如果分配不合理的话,便会带来许许多多的问题 ...

  7. 最佳实践:怎样评估软件开发时间

    作者 | DDI Development 译者 | 王强 策划 | 王一鹏 据统计,有差不多 70% 的项目都没能准时完成,你的项目也可能是其中之一.总是 delay 是不是很烦人?你也希望在满足市场 ...

  8. matlab labs,DOCOMO Beijing Labs 借助 MATLAB 将移动通信技术的开发时间缩短 50%

    MathWorks今日宣布,DOCOMO Beijing Communications Laboratories Co., Ltd.(DOCOMO Beijing Labs) 已经采用MATLAB来开 ...

  9. 信用评分卡模型开发及评估指标

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级两部分.主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用&qu ...

最新文章

  1. mysql分组函数按月份差,学习猿地-mysql如何按月份分组查询
  2. mysql events_mysql定时器Events
  3. kmp——next数组的应用---cout the string
  4. linux系统服务总结之五:用lamp建一个自己的BBS(LINUX环境下)
  5. 许可证( License LicenseLicenseLicenseLicenseLicense)服务器配置
  6. cookiejar包_爬虫之FileCookieJar
  7. ueditor编辑器初始化
  8. python json转xml_Python中xml和json格式相互转换操作示例
  9. [转]CMS Content Management System(内容管理系统) 提供商
  10. steam 加速器_如何在Steam中使用Switch的Pro控制器
  11. NMOSPMOSADC/示波器采样率
  12. Nginx同一个域名下代理后端项目跟多个vue项目
  13. 你不可不知的《哈利波特》秘密之卑鄙的海尔波
  14. RationalDMIS 7.1 圆跳动
  15. sum(case when) 学习
  16. 如何管理软件开发项目?
  17. 齐二TK6916/20/26/32系列数控落地铣镗床简介3
  18. kaggle 泰坦尼克事件——随机森林算法实现
  19. 8.15 完美交换 2699
  20. 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)

热门文章

  1. 数据结构与算法(python版)—— 无序表
  2. yandex 浏览器 linux,细致比拼 六大Android手机浏览器实测
  3. Unable to start activity com.unionpay.uppay.PayActivity
  4. 手机照片局部放大镜_iphone手机这5个功能十分出色,满满的科技感,别再白白浪费...
  5. Android 原生控件之三 ProgressBar
  6. 如何提高Bug敏感度
  7. Cocos2dx发展历程
  8. 千里马 android framework之MotionEvent.ACTION_CANCEL怎么产生-讨厌的android触摸面试题
  9. 解决笔记本,如微星GS65偶尔卡顿,黑屏或者死机的优化小技巧!
  10. 甲方乙方项目管理的差别