软件研发项目有着自身的特点,其成果是软件,是一堆堆代码!它最大的成本就在于人力,而这个人力是知识人才!从事软件的人员相对来说学历较高、知识面广、逻辑推理能力较强、思维活跃,但情商相对差些。软件从业人员的需求是随阶段而不断升级转变的。为什么要先说这些,因为软件研发项目的最大风险点就是人才!几乎所有的风险分析,就是围绕着人力来的。接下来,让我们从外部风险、内部风险、技术风险以及管理风险四个方面逐一剖析。
一、外部风险。
外部主要是指大环境,包括行业发展、国家政策、社会变革等。还有两个很重要的就是客户和合作伙伴。软件行业的发展主要是技术的变革,而软件技术的发展速度很快,也就决定了软件项目不能拖太久。国家政策的影响也是蛮大的,当然目前积极影响因素多些,国家出台了多项鼓励软件发展的政策法规,有利于软件企业的发展。软件企业得到优惠,研发团队自然能从公司争取到更多的利益和资源。社会的影响主要是对生活的影响,就像之前说的逃离北上广,很多软件人才都开始往西安、武汉、成都、南京等地发展。同时,软件企业也出于成本考虑,将研发迁往成本更为低廉的地方。在北京,很多软件从业人员都是北漂,这就意味着会影响到研发团队的人心。
如果说以上方面还是间接影响的话,那么客户和合作伙伴的变化直接影响着项目。客户是上帝,但不能盲目服从。在项目管理里,识别干系人很重要的,如果识别不当,风险蛮大的。另外,合作伙伴的实力和忠诚度也会影响项目进程。比如,有一个半拉子项目,开始于09年,至今已有三年多了,停滞原因就是大环境造成的,没有后续资金投入。去年我接手时,说要重新启动,无奈工地施工发 生事故,又停下来进行整改。因为时间过长,所采用的技术和设备已经落后,之前的合作伙伴也发生了改变,似乎一切都存在太多的变数。今年,终于要真的重新启动了。基于此,我认真分析了当年的技术规格文档,针对当前的情况,果断地将技术和设备进行了变更。虽然软件要重新研发,但是改用了现在流行稳定的技术,成本增加不多。而且设备成本降低不少,研发所增加的成本完全可以在设备采购中抵消。总的看来可以大大降低未来的实施风险以及日后的运维成本。
二、内部风险。
内部来自于所处的公司环境、项目团队等。而内部最大的风险就在于公司的战略、文化、运营效率、资源配置。公司战略是方向,方向不对,努力白费;公司文化决定是否能吸引人才、留住人才;公司的运营效率决定着项目的运行效率,复杂的流程、反复的决策也会拖垮项目;资源配置的合理性和支持程度决定着项目能否走得又快又好。
我曾经呆过的某公司,属于创业型公司,就一直处在方向不定的阶段。决策层意见不统一,朝令夕改,导致项目走走停停。最初决策以产品研发为主,要项目部遵从产品部的技术要求,基础构件必须由产品部统一研发和发布。但是,公司刚开始创业,积累不多,而且几个项目并无太多雷同之处,抽取共性很难。于是,产品部门任务繁重,不时要发布新版本,而项目部门则不停地提需求,不停地测试新版本,不停地埋怨,不停地安抚客户,结果可想而知。再者,公司头两年为了留住人才,出台了年底双薪以及工龄工资增长制度。后来,公司随着人员的增多,立马就一刀切,废除了双薪和工龄工资,这就大大伤害了老员工的积极性。本身老员工的起薪就不高,加薪也不容易,现在收入明显锐减,也没有补偿措施,自然人心涣散,好多骨干纷纷跳槽,导致了项目青黄不接。
三、技术风险。
从这么多年的经验来看,技术风险并不可怕。技术风险往往来自于技术决策者,技术决策者要全面评估技术可行性,确定技术方案,只要评估准确了,就为项目的后续工作打下了坚实的基础。在决策过程中所预计到的关键技术点,都要有解决思路或预案。还有就是对业务需求的掌握和理解程度,理解的偏差会严重影响项目。另外,成熟的技术架构和构件,也是同类项目的一个主要的技术保证。
这里留给我印象最深刻的有两个项目,一个是早年做的数据采集分析软件,还有一个是两年前参与的某政府采购平台。数据采集分析软件最初采取的语言是 Java,Java在服务端开发很快,但在客户端UI开发上相对弱些,随着开发的深入,越来越不能满足客户的要求。在第一版发布后,痛定思痛,改用 delphi开发UI,幸亏转型及时,之后涉及很多统计报表,如果用awt/swing来做,不可想象。再一个就是某政府采购平台,客户要求全部采用开源 技术,如果是成熟的开源技术还好说,关键是要用刚刚兴起的开源技术,版本不断再修订,且不是太稳定,资料也很少。做些简单的还能应付,但对于企业级的应用,比如工作流、全文检索、表单定制等来说,就不行了。况且时间和资源投入都不允许做基础性研究。之后,实在扛不住,好歹说动客户,引进了成熟的开源技术,才勉强过关。
四、管理风险。
软件研发项目最重要的还是在管理,项目经理的综合实力基本决定了项目的成败。项目经理要有敏锐的嗅觉,要有很强的对客户、领导、技术、团队、资源的把握能力。项目经理要有对团队的绝对把控。说实话,项目经理没有点技术实力,是很难带领软件研发团队的。项目经理在客户面前要敢于说不;在领导面前要敢于要资源、要支持;在团队面前,要以身作则,奖罚分明,爱护每一位成员;要熟悉业务,了解技术。要培养出好的项目经理不容易,这是公司的职责;要培养出好的项目团队也不易,这需要全方位的协作。在软件行业,跳槽是很频繁的。在我周围的朋友或者同事,其跳槽最大的因素不在于薪水,而是职业发展空间。如果没有一个良好的职业成长体系,是难以留人的;其次是领导的魅力,软件从业人员都是知识型人才,起点较高,在马斯洛需求层次理论里属于第四层次,大部分追求的是获得尊重和欣赏。
风险无处不在,既有消极的也有积极的。风险是有阶段性的,并且性质是可能会转变的,就像塞翁失马,焉知非福。风险管理最重要的还是要有风险意识,领导没有意识,员工没有意识,再多的风险管理方法和技术都是空谈。其次正如历史在不断地重复一样,项目也如此,要善于总结。软件研发项目随着不断地积累,会越做越好。项目知识库的建立,绝对是风险管理的重要举措。