很多公司和团队选择把整个软件项目或项目中某些模块或过程(比如测试)整体外包给另一家公司或团队。本文将和你一起来探讨为什么公司或团队有外包的冲动,为什么项目外包问题多和我对外包的建议。”
01 为什么有外包的冲动
公司或团队选择把项目外包,无非就是想省钱、省事和转移风险。
省钱
一个软件项目需要各种角色,包括项目经理、技术主管、架构设计师、需求分析师、程序员、测试员、环境工程师等。具备这些技能的人才除了在市场上比一般人才的工资要高以外,培养这些人才的能力,都需要高昂的人力成本。
理论上,外包公司已经具备这样的人才。通过项目整体外包,作为甲方只需要关注项目的整体预算。乙方公司招聘、培育人才的成本会被平摊到各个外包项目中。
省事
还是和人有关。自己维持一个项目团队,涉及到招聘、培训、管理、团建、激励、绩效等多种人事管理开销。而作为甲方,短期而言,真正想要的是项目的产出——软件系统,而非一个团队。
项目管理和项目交付过程也是超级麻烦事,外包可以只关注结果,不需要管过程。
风险转移
项目交付存在巨大的不确定性,过程中充满风险。项目外包,也可以把项目交付出现问题的责任转移给外包公司。
这些因素都充满诱惑力。
但事情真的有那么美好吗?
02 为什么软件开发问题多
从我的标题,大家已经可以知道我的结论,就是我不建议软件开发通过外包的形式来完成。
我们知道,现代社会是一个陌生人协作的社会。一个组织、一家公司、一个团队的能力和精力都是有限的。把非核心能力的业务外包给其他组织、公司、团队是再正常不过的事情,我并非反对一切外包行为。
我想说的是,有些东西可以外包,有些则不能。要看某项事物是否适合外包。为什么软件开发就不太适合外包呢?
我们来看软件开发有什么特性。我将通过边界、估算、验收和合同四个方面来分享我的观点。