软件研发那些事儿——产品与项目的区别

来源:互联网 发布:linux nat共享上网 编辑:程序博客网 时间:2024/05/17 06:04

      现在业内共同的一种认识是,软件产品是基于通用性,而软件项目更多是满足具体客户的特定需求。

      有完全以定制软件项目为生的软件公司,也有完全以自主研发软件产品为生的软件公司,更多的软件公司则是产品与项目共同经营。很多软件公司的发迹路线是这样的,由于自己手中的社会关系和其他资源,在特定的时期得到了一个项目,然后根据用户的特点进行开发。满足了该用户的需求,并结束项目后,忽然发现此项目的部分功能还可以为其他潜在用户提供帮助,于是重新规划,将项目中的部分通用内容提取出来进行二次加工,进而包装一下,作为一个软件产品推向市场。

在国内,通过这种途径发展起来的软件公司不在少数,很多专家对这种发展模式持否定态度,其主要担心是开发项目时,由于出发点是用户的特性需求,程序的结构通常耦合性太高,在二次开发成产品时,很容使内部程序结构在一定程度上变得混乱。专家的这种观点很有道理,研发产品和开发项目的设计思路是存在一定的差异,现实中的这种问题也经常出现。但对于广大的中小软件公司来说,资金通常并不充裕,如果让其集中一部分力量从头到尾开发一个全新的产品,其承担的风险相当大,而且,如果产品包含的内容较多的话,很可能在中后期资金投入跟不上,最终导致产品研发失败。如果是由项目衍生成产品,那么在第一阶段,也就是项目阶段,是有具体用户提供的项目收入来保障的。而且通过开发项目,也会直接促进团队对行业知识的了解,和对技术架构认识的提升。在将项目转化成产品时,团队在业务和技术方面都有了一定的积累,再加上前面项目的收入,产品研发的风险就已经大大降低。对于资金不太充裕,或在行业缺乏业务和技术积累的软件公司来说,从项目开始,再衍生产品,也算是一种捷径。当然,前提是在进行项目的架构设计时,就应该具有一定的先见之明,尽量降低程序的耦合度。

需要注意的是,并非所有的项目都能衍生出产品。在产品研发前期需要做大量的准备工作,包括行业、市场、产品定位等,这些工作做到位,才能决定是否要开发成产品。关于这部分内容在《前期准备》章节我会详细讲解。

对于有一定积累,而且不差钱的软件公司,他们的经营策略正好相反。公司已经有现成的产品,而且这种产品能够满足广大潜在用户的绝大部分需要。在销售给特定用户时,会根据用户的一些个性化需求再进行部分功能的量身定制,也就是二次开发。这种做法通常见于管理类的软件系统,如企业管理或行业管理系统,ERPHIS等。

软件产品和软件项目的人员需求和组织形式是有所不同的。由于要考虑用户的通用性需求,软件产品的研发通常要配备产品经理,他的责任是搜集分析这些通用需求,如是专业性较强的产品,则需要他具备一定的行业知识,同时具有前瞻性的眼光,他的工作重点是前期的需求和后期的验收测试。从这点来说,产品经理更侧重于业务,而不是技术。项目经理的职责一般是负责协调资源和控制进度和质量,需要具备较强的组织协调能力。有的公司对项目的经理的技术水平不做过多的要求,尤其规模较大的企业。但对于广大中小软件企业来说,项目经理的角色要复杂的多,除了组织协调能力外,他们往往还是项目的主要编程人员。在将大部分经理投入到具体编码的同时,这类项目经理对项目的组织控制能力其实大打折扣。

言归正传,无论什么类型的软件企业,如果想要研发产品的话,除项目经理外,还需安排产品经理的角色。也有的公司将这两种角色由同一个人担当,项目经理同时也是产品经理。很多企业的领导者对这种做法振振有词,且津津乐道,认为这样既节省成本,又能提高项目经理的综合能力,同时对产品的发展也有好处。此类现象多见于管理不规范的小型软件公司,说白了,还是受制于资金和管理意识,这种做法是完全有悖于工业化生产的细致分工原则。想要一位员工成为万能人才?最终不是员工被累死,就是企业被累死。也由此看出,这种组织管理形式下,项目经理的负担多么沉重。君不见,很多类似企业的项目经理往往是锻炼能力之后,就凭一身的综合能力远走高飞了,企业则落得为他人做嫁衣裳的尴尬。

项目实施完成之后,就能向用户要合同款,剩下的工作就是一定量的系统维护,有偿的或无偿的。产品开发完成之后,就要考虑两件事情,一个是推广,一个是升级。不断的收获,不断的投入,是产品经营的良性表征。所以,大部分情况下项目属于短线经营,产品属于长线经营,长短结合是很多软件公司采取的策略,在资金和积累方面,两者都能够在不同的时期进行互补。