李先生在一家上市软件企业担任需求分析师,该公司在电信信息化已经有多年积累,为了缩短软件的交付周期,降低研发和维护成本,公司从一年前开始逐步从定制化开发向产品化方向转型。李先生负责的产品参加软件产品化运营的第一批试点,经过1年的努力,产品已经在5个现场上线并开始正式运营,年底成本核算,比同类定制化项目效益提升了近40%,李先生还被评为优秀员工。
随着产品的深入使用,现场反馈的新需求越来越多,而且需求之间的冲突越来越多。以前做定制化开发遇到需求冲突的情况,一般都是和用户协商,由用户方安排一接口人,负责沟通和解决有冲突或者不合理的需求。但现在不同的现场需求之间有冲突,这种办法就行不通了。另外,软件中为了实现不同需求,配置项和逻辑分支越来越多,程序的维护越来越困难,常常一周过去了现场报的问题解决还没有眉目,用户啧有烦言。开发工程师的不满也越积越多,认为需求分析工作不到位,需求频繁变更,导致软件质量下滑。如果再这样下去,软件的问题会越来越多,工作会越来越难做,点上一支烟,李先生陷入沉思。
一、 软件产品需求管理面临的问题分析
软件产品化运作的企业越来越多,大多企业的需求分析师或项目经理都遇到过和李先生类似的情景。总结一下大概有下面三个问题:
1. 需求来源多样,差异过大难以兼容
产品化和定制化开发的主要区别之一就是产品化面向的是用户群,而定制化开发面向的是一个或几个同质化的用户。所以产品化比定制化接收需求的多样性要丰富的多。针对同一功能点的需求,需求之间或重叠,或交叉,或互斥。按照用户甲想法实现,可能用户乙会强烈不满。
2. 配置项过多,软件使用过于复杂,用户不满增加
解决不同需求的一个最简单的办法,就是增加配置项。通过配置项交付有差异的功能给不同的用户。随着产品的维护时间,软件中的配置项越来越多,产品的使用复杂度越来越大。每次产品升级时,一不小心覆盖了本地化配置,就会造成原有功能丢失,软件无法使用等异常情况,严重时还可能被用户投诉。
3.程序中充斥大量的分支逻辑,越来越难以维护,产品质量越来越差
研发工程师的人员流动率在诸多行业中,公认比较高。一茬一茬的新陈代谢,再加上很多企业的过程管理不严谨,文档不全,原来为解决不同需求引入的配置和逻辑分支成了新的世纪之谜。为了快速完成任务,避免影响现有功能,工程师们采取另外增加一个分支的方式解决问题和实现需求。
日积月累,程序中像谜一样的分支越来越多,程序质量开始变的很糟糕。往往解决了一个问题,引发了一系列的bug。开发工程师们越来越没有成就感,对软件的前景越来越没有信心。
二、多层次需求管理的对策
在上述的问题仔细分析,可以发现一个产品的需求其实是分层次的,有些需求是某个用户群特有的需求,比如电信领域中中移动和中联通的规范在方向上有非常大的差异;有些需求是某些用户的通用需求,比如网管中心监控人员对于网元的呈现方式;有些需求是用户的个性化或者临时性需求,比如重大活动保障时期的特定需求。如果要解决产品化引致的这一系列需求问题,就不能把视角局限在需求-开发的层面上,而是要在站在业务领域分析,产品定位的高度,合理地把需求落实到不同层次上解决。
图1:需求和需求交付的对照关系
1.用户群的需求处理策略
一个规模推广的产品可能会横跨多个用户群,比如在电信BOSS领域的计费软件,移动,联通,电信都有自己的技术规范,中间的规范方向,计费的模式以及算法各不相同。
如果把这些都放到相同的产品上实现,会造成产品非常臃肿和复杂。
我们的经验是首先创建产品平台,平台的设计采用微内核的方案,内核包括系统的技术框架,组件的集成引擎和一些公共的工具组件,平台外围功能采用组件化的方案,包括不同的批价算法组件,适配组件,配置组件等。按照用户群的需求以及商务策略把内核和相关组件打包成不同的业务产品,如移动版,电信版和联通版等。
运营商的规范升级以后,同时也要对产品平台上的相关组件进行升级,并发布新版本的业务产品。所有的业务产品就组成了一个计费的产品族。
这种策略在一些大型的软件企业里应用非常广泛,比如微软的window产品系列:window
Server,window profession,window home,分别覆盖企业用户,商务用户和家庭用户这三个有着明显需求差别的用户群。国内腾讯公司的QQ和TM也是一个成功的案例,用两个不同风格的软件覆盖娱乐人群和商务人群的社交需求。
2.用户的典型性需求
所谓典型性需求是此类需求具有普遍性的特征,比如在报表要提供10秒钟自动刷新数据功能。这类需求往往可以引导产品规划方向,因为使用最深入的用户提出的需求最多,而且需求的价值越大。
对待这一类的需求,一般对应有两种配置方式,一种是粗粒度,一种是细粒度。跟据用户的偏好和使用的环境,在系统安装阶段配置,配置影响的粒度一般是组件级,最小到对象级,比如office安装过程中,引导用户选择需要在本地安装的程序模块,比如word,excel,dbaccess等。另一种是系统中的各种配置项,影响的主要是对象级以及程序的逻辑,比如firefox中的系统配置项,以及window的注册表。
利用这两级的配置管理,基本上能解决用户需求的差异化,但采用这种办法的前提是已知用户的可能需求并预先做了定义和开发。对于不可预知的需求,就需要通过二次开发接口来解决了。
3.用户的本地化需求
用户本地化需求的满足程度,响应时间和用户的满意度关系非常密切,要提升用户满意度就必须关注本地化需求的实现。而软件产品的大规模推广带来的本地化需求的工作量非常大,不仅会影响企业的利润率,而且提高了产品自身维护的风险。所以大型的软件产品都会提供一些本地化需求开发,比较典型的是sap,sibel,把产品实施和本地化开发的工作全部外包出去。
在产品定义阶段,需要重新评估产品的范围,以及在产品范围内可能的用户本地化需求,对其中非核心的,可以通过外挂接口实现的功能规划出二次开发接口。比如运维平台短信派单模块,安排短信派发的二次接口,产品实施的时候,通过开发相应的短信接口类,适配不同的短信网关,短信协议,然后把该实现类挂接到系统上实现短信工单排饭的功能。
二次开发接口的优点是增强了系统功能的扩展性以及缩短了需求的响应时长,缺点也是比较明显的,当二次开发接口过多,过于复杂超出了产品管理的能力时,会在产品升级的时候带来很多问题,比如开发程序被覆盖,接口变更导致功能无法使用等。
三、总结
相比定制化开发,产品化的模式提高了复用水平,降低了研发和维护成本,但是提高了管理水平的要求,特别是规划,需求以及交付管理。笔者见过很多中小公司,产品化运营以后不经没有提高经营效益,反而因为产品前期投入过大,后期维护成本过高而陷入泥潭。所以产品化运营是否成功的关键在于业务积累和管理水平。前者是规划产品方向,能否取得市场竞争优势的核心;后者是产品化目标的保证,是能否切实降低研发维护成本的关键。采用定制化还是产品化,取决于企业的发展水平以及企业的竞争优势,没有最好,只有最适合。
对于产品的需求管理,不应该套用定制化的那套解决办法,应该把需求分析放在合适的产品层次上考虑需求的实现方案,如果原有的解决方法需要平面思维,那么在产品化的需求分析需要的是多层次的立体思维模式。
|