在我们公司的软件研发体系中,存在着三种截然不同的软件开发方式。而我,作为公司最老同事之一,也是这三种开发模式的亲历者,曾不只一次的被公司同事问过我关于这三类方式之间的异同点。于是利用空闲时间,对其进行一番整理、分析和对比。
1、全能型
部门经理在接到项目之后,将此项目交给部门内的熟练程序员后,此程序员就自动被委任其为项目经理。从此开始,程序员将根据项目售前方案和销售合同内容,在项目进行过程中分别担当起项目经理、功能设计师、数据存贮设计师、程序员、测试员和项目实施人员等诸多角色。并在项目进行的过程中,带领少量其它程序员和辅助资源来完成此项目的所有工作。
此类项目其功能单一且不复杂,只是为了帮助用户提升某一项工作的工作效率或解决客户在其工作中的一些问题,如工作日志信息的采集和分析业务项目、办公用品的申请和领用等。它们因为其涉及范围小,使用人员不多,从而具有项目总费用少、开发和实施周期短、对性能要求不高的特点。
在此类开发模式中,程序员由于其工作的全面性,使他们在进入项目组后,能够得到很快且全面的提升,并会在与客户交往的过程中,建立起良好的客户关系处理经验,为其今后的成长和发展打开良好的基础。
由于项目需要,程序员需要掌握全面技能,容易造成其在项目开发过程中需要全面的接触项目管理及人际关系、需求分析、数据库及对象设计、人机交互和用户体验设计、系统设计和开发、测试和系统提升、应用实施和售后维护等诸多截然不同的领域范围;所以,作为此类程序员,其工作压力之大,事务之复杂、综合素质要求之高,是其它模式的程序员所无法对比的,这也是造成此类项目按时完成率极低、尾款回收困难、项目售后工作难做、用户满意度差、二次项目获取困难的根本原因。
同时,由于程序员被大量的非开发性事务所干扰,造成他们无法专心致力于专业技能的学习和提升,也就无法造就一支高效率、高稳定性、配合默契的开发队伍,这也是造成公司内此类人才大量流失的重要原因。
2、英雄型
部门经理在接到此类项目后,按项目所涉及的领域范畴,将其按领域进行分工。以企业信息协同系统为例,我们将进行如下分工:门户信息的获取、聚合、交互和展现工作交给专职于门户开发的程序员;内部邮件系统的分析、设计、和实现将给邮件开发程序员;日程和事务的设计交给日程开发程序员;工作流应用工作交由工作流客户化开发程序员等等。
在此类型的开发模式中,程序员将会是某一领域内的英雄式人物!由于他长期且相对稳定的负责着这个有限领域范围内的一切事务,可以帮助他在一定时期内进行系统而稳定的业务研究和分析工作,进而成长为此领域内的业务专家。而且,通过持续的对其工作进行迭代式开发、升级和完善,可使此产品在产品品质、适用性和用户体验等方面得到稳定的提升,进而提升了整个产品的品质。
如果此领域内的工作产品能够得到合理的规划和实现,进而将其进行单独的封装、应用集成和推广,就有可能形成一个具有相当竞争力的产品,从而为公司获取新的销售机会和利润点。
但是,此类开发模式中的分工也容易造成程序员涉及业务领域单一和适应性窄的缺陷:由于其长期面对和研究着单一业务领域内的业务活动,而无法更多的接收和参考来自于用户、企业和其它行业内的非它业务发展需要和趋势,从而对其在产品领域内的发展产生限制,并造成其产品方向上的不准确或错误定位;由于其长期的在单一领域内工作,并在此领域内获得了公司内的认可,这也将限制他在领域间的流动性。当公司或部门的产品方向和需要调整和改变时,此类程序员就需要被迫改变甚至放弃其在原领域内的所有积累而重新开始,从而造成巨大的浪费。
3、专业型
项目经理在接到项目之后,根据项目组成员的能力、特长职业规划,对他们进行适当且专业化分工:由业务规划人员负责项目的需求收集、业务规划和需求分析;由系统架构师对系统的进行技术构架和支撑性技术的规划和引进;由数据库专员负责数据库对象的设计和性能调优;由功能分析员在人机交互人员辅助下负责功能设计和人机交互模式;由业务逻辑实现专员根据功能设计进行高性能的业务逻辑处理实现和外部接口的设计和实现;由页面开发人员负责实现人机交互;测试人员负责对系统进行全过程的测试和质量监督;专业化实施人员可快速高效的进行系统实施和在线维护,售后服务工作也将由专人负责;
通过恰当和合理的分工,将软件研发过程中的各个环节进行拆分,从而将复杂的软件工程分解成一个个相对独立且又紧密关联的工作项,从而有效的降低了软件开发过程中的困难度和风险性;项目经理把分解后的工作项交给项目组中的合适项目成员,并根据项目组成员的能力、工作难度和工作量,制定出科学的项目计划;同时,项目组成员在项目经理的协调和管理下进行密切的分工合作,此举即能调动项目组成员的其工作积极性,又能使他们将工作、兴趣和个人职业成长规划进行有效的结合,从而使其在技能、收入和社会认可度等诸多方面得到快速成长,达到人尽其材,材尽其用的目的。通过使用专业的人做专业的事,公司将在人员分工、资源使用和业务拓展等领域走向专业化、规模化,最终成为专业且强大的产业实体。
但此开发模式也具有相当的局限性!其一,如何合理的利用项目组资源?项目组成员因其性格、能力和兴趣各有不同,如何能将他们按项目分工和角色组成需要,进行专业化训练和培养;其二,因项目组成员长期单一职能的工作,与其它环节的交叉和交流都受到限制,对其未来的全面发展和综合成长都很不利;其三、各角色之间的分工、合作与工业化生产中的生产线相似,那么,建立与之相适应的质量保证体系,保证各工序之间生产产品的质量,从而从事实上提升软件产品的整体质量?
通过对这三类开发模式的分析,我们可以看出,它们各有合理性,也又具有的相当的局限性。
全能型开发模式是早期的CS类项目开发的主要模式,其适用于哪些规模小,程序员少的小规模IT开发企业进行小型项目的开发中。但对于那些工期较长、业务范畴广、复杂度较大的项目,此种开发模板将采用将导致风险最大化,失败几乎是其唯一的结局。
英雄型开发模式,因项目组成员领域化的分工和合作,使它在通用型复合类产品开发中具有优势。通过对产品的各组成部份进行持续的改进和迭代性开发,使产品在功能、性能、用户体验等方面得到持续的改善和提升,从而有利于产品拓展并在此过程中做大做强,最终取得竞争优势。但此开发模式也将导致项目组成员之间的工作协调、技术互用等方面存在诸多不便;另外,因领域的专业性和不可替换性,也就限制了公司在处理关健人员的流动性方面存在诸多困难,并在核心竞争力的保证方面存在着很大风险。
专业型开发模式,通过对人员进行专业化分工,从而在软件开发过程中最大的利用了人力资源,提升软件的生产效率,并降低了软件的从业门槛。此方式在新形式下的项目开发和产品研发中都具有相当的竞争力,也易有利于保证公司的核心竞争力。但采用此种开发模式时,需要完善内部的人员激励机制,保证各角色的从业人员都有与之适应的职位规划和发展模式,并能根据项目组成员所处阶段的需要,提供相应的技能培训和交流机会,从而促进其成长,激励其上进。
总之,采取何种开发模式,要根据公司的实际业务情况,发展规划和人员构成,进行科学的分析之后,再采取行动、从而得到具有延续性和竞争性,并与自身相匹配的软件开发模式。
2009/4/20夜