危险的趋势: 软件外包
最近看到了很多大企业的这种倾向, 按自己的看法瞎扯几句.
CEO们往往喜欢看的是财务报表, 很具体, 很数字化, 每年的技术支持支出多少, 每年销售多少, 等等. 从财务角度来看, 销售是最重要的, 因为产生利润. 而研发呢? 是纯粹的预算杀手, 每年有莫名其妙的一大笔开支花在里面, 硬件软件, 人员设备, 折旧率高, 员工工资高, 而且员工还往往不是很听话. 所以, 从CEO们的角度来看, 当数字难看的时候, 第一个想到的就是从花钱的部门下手.
另一个助推剂是咨询公司. 一个特成功的人不屑于去算命, 只有成天碌碌无为的人才会希望从算命先生那里得到安慰. 一个在走下坡路的公司也是这样, 他们会找一两家咨询公司, 给自己算一卦. 咨询公司一般会花漫长的数月时间, 评估各部门的业务和效率等, 并总结出一些必须改革或者必须优化的地方. 很巧合的是, 他们无一例外的都会推荐IT外包和研发外包.
从理论的角度看, 真的是没错, 将产品外包给专业公司开发, 或者以租用的形式, 雇一群穷苦国家的民工, 又省开支, 风险又小, 扩张收缩都很灵活. 但是客户可能不知道, 外包公司往往是咨询公司的合作伙伴, 或者甚至就是同一家股东控制的企业, 新增的业务能给咨询公司带来大而持久的利润. 那现在来说一下外包的问题.
首先是管理的成本
打个比方, 我现在托人去休息室把我的茶杯拿来:"xx, 帮我的茶杯拿过来吧, 在休息室". 在外包方, 可能会有如下的结果: 1. 茶杯拿过来了, 盖子还落那儿 2. 茶杯拿过来了, 是碎的 3. 茶杯拿过来了, 里面塞着瓜子壳橘子皮等垃圾 4. 茶杯拿过来了, 放桌沿上, 摔碎了 所以, 这样简单的事情, 你需要对外包方说: "xx, 帮我放在休息室的茶杯以及茶杯所配的盖子, 完整的带到我这里来, 不允许倾斜角度, 不允许在里面放东西, 不许弄脏, 拿过来后, 放在我桌上离桌沿至少二十公分的地方." 所以外包会带来额外的沟通成本. 与一个陌生的团队合作, 你至少需要数周的时间, 才能大致了解, 你需要说到多详细, 对方才知道你要做什么. 然后你每次都必须说这么详细.
其次是风险和边际成本
打个比方, 你需要做一个文件共享下载的程序. 让用户可以增删改文件, 给其他用户下载. 签合同付款, 做好后发现, 这些功能是实现了, 但是, 用户只有一个, 如果要新增用户, 需要他们在数据库来加, 因此新增需求: 增加用户的注册功能, 用户注册后还可以修改密码等资料. 然后发现, 用户可以互相修改删除别人的文件, 又新增需求: 增加权限控制. 然后发现, 他们只是把链接屏蔽了, 只要知道地址还是可以操作, 再增加需求: 要真正稳妥的权限控制; 然后发现, 用户居然可以上传jsp文件, 又新增需求: 增加上传文件的过滤. 然后发现, 只有中文, 改个label都要外包改代码, 再增加需求: 多国化. 这么新需求, 肯定要体现在补充合同里, 新增费用是难免的, 一旦开始后, 你很难再切换到别家做开发, 只能认宰.
有人说, 这是甲方项目经理的职责. 确实没错, 但是世界上不可能有哪个项目经理, 可以一开始就能整理好所有的细节. 如果有, 他一定是已经做好, 或者曾经做过. 这就对甲方项目经理有很高的要求, 他必须完全了解这个项目的每一个环节, 每一个细节. 但是软件行业内部的差异性, 你让一个做ERP的去做搜索, 让一个做门户的去做CRM, 都属于跨越很大的知识领域, 没有哪个项目经理能在多个领域都游刃有余. 另外, 按外包的要求, 写好所有的细节, 比起与内部开发团队沟通要费时得多. 增加的沟通成本, 很大程度上抵消了外包带来的管理便利.
所以, 我对外包的态度是: 这是一个合理的存在, 但是任何上进的企业, 都不要轻易使用外包, 特别是核心业务, 一定要维持一个内部开发团队. 如果一家企业依靠研发外包而活着, 那它从根子里就已经烂了.