一个项目会有很多需求,但这些需求通常并不是有相同优先级的。这就说明,这些需求的价值,有差异。为什么会有这样的差异呢?
我们的需求分析是基于原始需求的。原始需求通常很粗糙,只是客户和市场人员的直接描述,甚至连具体目标都不清楚。基于这样的资料,我们会进行分析,然后猜想用户的真正需求,围绕这些需求将我们能做到的提供给客户。通常,最终需求中会有很多需求点,并不是客户提出的,甚至并不是他们想要的。下面具体分析看看这些需求点吧。
1、客户的真实需求。
每一个软件产品或项目,都是为了解决一个问题或几个问题。这些问题就是这个软件的核心需求。即这个软件就是为了解决这个问题而诞生。这些既是需求,也是软件的目标,所以如果开发前没有目标,那么还是先不要动手的好。
2、客户需求的延伸。
直接需求通常还会衍生出一些间接需求,这些间接需求是为了更好的满足核心需求。甚至没有这些延伸,核心需求就无法完成。比如客户说,我们的系统需要登录。那么我们不但要做登录,还一定需要帐户管理功能。
3、技术性需求。
在具体的应用场合,软件的肯定会有一些技术性限制,比如网络带宽,显示分辨率,操作系统等等。这些都是我们必须要满足的,因为不满足,就无法让软件正常运作。
4、我们能够提供给客户的。
有些需求,我们能够做到,但用户未必需要,为了让软件显得功能丰富,一堆杂七杂八的东西就被提了出来。
5、我们希望提供给客户的。
我们经常希望客户除了按照他们的意愿提出功能外,还能够使用一些我们想提供给他们的功能。
上面的这些需求,都经常在项目中出现。后面要讨论的是,这些需求对于软件产品价值的影响。
从用户的角度来看需求,我们只是想要我们迫切需要的,能够直接为我们解决现实问题的。因为每一个功能都不白送,可是要花银子结帐的。所以丰富的功能,带来的就是丰富的账单,产品经理的热情未必能够让用户买账。
这里,我们可以按照需求对用户的重要度,对需求点进行分类。
1、 核心需求:用户遇到的直接问题,比如财务流程管理繁琐,效率低下。比如人工统计进销存效率低下,出错率高……总之,这些问题直接催生了软件的产生。
2、必要需求:即为了更好的满足核心需求,不得不做的一些事。
3、扩展需求:有了更好,没有也能用。但这些需求会对用户产生帮助。
如果项目中,有些需求没有包括在上述三个范围中,那这些需求基本就是浪费工作量。还是别加在项目里了。
为了更直观的看到需求点的价值,我设计了一种图——靶图。
我们假设有如下需求:
一个工厂为了提高办公效率,定制一套OA,需要有请假管理、日报系统和办公流程自动化、以及会议管理系统。
那么可以有如下分析
核心需求:加快办公流程——杜绝人情因素影响办公流程;将员工的请假和工作量透明化。减少不必要的会议。
必要需求:帐户管理、权限管理;mail会议通知;数据报表;工作流;
扩展需求:操作简单方便;界面美观;支持移动设备;
一目了然的靶图就出来了。我们可以清楚的看到,哪些需求是最具客户价值的,那些是可有可无的。
同时,软件产品的价值也取决于我们为客户解决了多少问题,而不是我们提供了多少功能。所以以客户的角度去分析,才能更客观的评价一个软件产品的价值。如果是自主研发的话,最好也虚拟一个客户的角色。换位思考哪些需求才是重要的。像超市一样买二送一的方式卖软件是不可取的,能够为客户解决多大的问题,软件就值多少钱。所以,专业,简单,关注焦点,才是软件开发中应该做的
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/