国内很多软件企业尤其是行业软件企业是从开发一、二个软件项目起家的,而且项目规模和复杂度也不大,依赖其中一两个高手,他们能够在客户适度满意的状态下成功完成项目。基于以往研究,成功的主要因素是项目具备以下特点:
如果是需求定制形的项目,项目需求明确且范围不大,变动不多。这样的项目要么客户方需求明确,要么企业对需求足够了解,这样,意味着项目双方至少有一个人对需求有全面并且细致的了解;双方合作氛围很好,这可以减少需求变更的量和避免冲突尖锐。
企业有一两名技术和业务的高手。
项目使用的技术涉及面不广,往往一两个人兼而关注就可以把握。
一点运气:正好选对了技术平台;正好高手没有离职……
随着时间的推移,企业承接的项目多了,人员多了,企业规模也扩大了。这时候,企业的内外部环境都发生了很大的变化。
从外部环境来看:
1) 客户行业发展迅速,需求在宽度、深度、变化频度上发生了持续的变化。具体来说,要求软件系统支撑的业务多了(需求宽度增加);并发使用软件系统的人多了、时间长了,业务过程复杂了(深度增加);竞争加剧,客户需要经常进行业务的调整(变化频度多了)。这种变化,往往会使客户的需求管理成为一个专业、持续、并且工作量相当的过程。也就是说,企业具有需求管理与软件开发进行分工的需求。
2) 软件系统开发使用的第三方技术平台种类多,且复杂,更新换代也快,如果软件系统在性能、持续稳定性有要求,并且软件使用周期设计要求满足一定的年限,就要求企业对第三方技术平台的发展进行跟踪,并寻求有效应用的实际经验(最佳实践规范)。这样,企业就逐步有将集成应用技术(含软、硬件集成应用技术)进行专业分工的需求。企业的软件项目越多、第三方技术平台越多样复杂、软件系统的要求故障时间越短,这方面的需求就越迫切。
3) 市场技术竞争的重要性增加,关系竞争弱化,企业发现为了获取合同,他们需要有研发能力的保障,并且要在技术竞争考察中胜出。迫使企业对客户关注的重点专业技术进行投入。
从内部状况来看:
1) 企业同时运作软件项目数量增多,但依赖于高手的项目模式没有改变。各项目都需要高手来保障,如果没有高手,项目就停滞不前,而且往往以非正常手段结束。
2) 随着软件项目的深入展开或软件的升级换代,企业会发现有些模块的开发总是在重重复复地做,上一个版本做了,这个版本还要继续做,同时开展几个项目,都有类似的事情在重复做。但要直接使用之前的内容,又不行。例如,很典型的是,每个软件项目都在做系统的登陆权限管理;每个软件项目都有录入合法性校验问题等等。
3) 技术人员总是有很多理由不去写文档,如果不是一个人将一个模块从分析设计负责到代码,后一个环节的人总是得意于自我创新,并容易发生设计人员和开发人员的扯皮。
4) 软件项目在前期开发时候是一路凯歌,到了快要交付的时候,却又难产,总是达不到要求,改改代码重新测试,没完没了。而技术人员又非常辛苦。甚至出现部分或大全部返工现象。
5) 软件项目开始的时候,谁也不知道什么时候能完成,领导说三个月就三个月,半年就半年,实际上,没有按期完成的,延期3-5个月是常事,1-2年也是有的,甚至不得不换班子重开炉灶。
面对以上变化和问题,企业的解决办法之一是延续原有项目的成功模式——高手主导的项目模式,即给每一个项目配备高手。如果没有那么多高手,就让把所有的项目压在有限的高手身上。如果高手有限的话,实际上企业是将问题转移给相对低资源能力的高手去解决。当然,有限的高手也同样可以使用同样的手法进行问题转嫁。这有点像项目承包,企业完成软件项目的能力依赖于不同的高手,如果高手恰恰不行的话,软件项目将一塌糊涂。高手们在项目中可以进行分工调整,由于项目的临时性特征,这些调整注定也是为项目服务的。形成公司能力积累的方式往往是产生一些专业的高手。而且,项目出现的问题越多,这样的高手越能获得公司的重视。这种解决办法由于将所有的问题转移到高手身上,企业管理就研发方面的决策难以形成明确的方向和目标,在研发方面只有用人的战略。
显然,以上并非根本性的解决方案。企业很难找到或培养那么多高手,导致企业业务发展受限,而且这种方式面临的风险很大;过度的项目定制开发不但影响项目的交付进度和质量,也使成本居高不下,侵袭了企业本来就比较有限的利润。那么,出路只能是走向产品化。
然而,软件产品化是一件相当困难的事情,企业在各个方面都将面临挑战,并必须作出相应的改变。
首先,企业需要转变经营理念和思路。其实不管是项目化还是产品化,都要坚持客户导向,但是就客户导向的内涵和实现方式上,很多企业往往是被动地满足客户需求,甚至迁就客户五花八门的需求。我们到底选择什么样的客户?这是企业成长中必须作出的回答。即便已经明确了这个问题,对客户各种需求也不是不加区别的满足,而是需要抓住目标客户的核心需求和偏好,并认识到客户只要在核心利益上得到足够的满足,他们愿意牺牲一些个性化的特性——这正是产品化的前提假设。
在实现方式上,当然就是要坚持平台化的开发模式,基于需求分析提炼和规划产品平台,然后在产品平台的基础上,划分产品系列,从而形成平台产品或产品版本。在贯彻平台化开发思想的过程中,应注意在差异化和通用性上取得平衡。可以说,复制是软件利润的唯一来源,所以软件重用度的目标甚至要优先于差异化的目标,因为只要有足够大的重用度,就能够大幅度降低成本,企业只要在核心需求上满足了客户,再加上价格和速度的优势,必将在竞争中处于不败之地。
根据以往经验,产品平台化实施过程中将面临各方面的困难。面对外部一些新的市场机会和客户特殊需求,营销人员总是倾向于把握新机会和响应客户的新需求,如果高层在增长压力下没有确定相应的战略原则去约束产品决策,则很可能使既定产品定位和产品化方向的努力付诸东流。即使公司界定了产品定位和方向,在具体操作时,到底用户的某个特性是否需要加入产品规划中,到底某个需求是否应当纳入到产品功能开发中……如何在标准产品与客户最终产品之间取得平衡,这仍然产品化开发模式下最为头痛的问题。有些需求一旦纳入标准产品之中,对产品可能是致命的打击。在平台化开发模式下,产品架构和模块/组件设计将更多地考虑开放性、通用性和冗余设计,从局部来看会影响产品开发的进度和效率,尤其对新产品系列的第一个产品,将需要更长时间才能推向市场,这是企业必须认识和接受的代价,但换来的是后续产品开发速度的大幅提升。另外,产品平台化开发还会来自内部高手的挑战和开发人员习惯的阻力。高手们总是希望按照自己的思路规划和开发产品,要让大家都统一到一致的平台架构和开发模式下绝非易事。开发人员也不喜欢条条框框,总是想弄点什么新的东西,但平台化则需要更多的标准化和规范要求。综上,要解决这些难题,企业需要足够的决心和耐心。
显然,软件产品化不仅仅是技术上的问题,然而技术也是其中关键的一环,包括架构设计、技术平台、模块化构造、数据结构、函数/算法、接口技术等。例如技术平台的工作一般包括:
第三方技术平台选型
技术使用研究,确定软件项目技术路线和技术架构
制定开发规范,并形成开发案例和模板,扫清开发队伍大规模开发时的障碍
开发技术控件,提高开发队伍大规模开发的效率等等。
软件产品化还与行业发展状况、企业产品形态成熟度、企业管理成熟度、软件技术发展、人员职业化程度等因素相关,所以软件产品化和平台化建设还要与企业研发管理、项目管理、人力资源管理一同推进。
转自: 汉捷咨询