〔攻〕 把产品拿出公司让外包人员做好 在讨论之初,为了免得以后不得不持续地分辨外包的边界,我们最好先分清楚咨询和外包的区别(别告诉我你们不会干某一个技术,所以找个能够干这个的外包人员……我不认为这是外包,所以还是分清楚什么是外包,什么是咨询先,免得后面废话太多),不是说你的一部分工作由别人来帮你做了,就是外包了。这是两回事情。参考Flybear的定义。这里不多说了。 在讨论这个问题的时候,我们先明确一个先决条件: 1 为什么要外包? 在现实中,引起外包的原因,我看见的如下: 1 在技术风险基本能够控制,并且需求变化不是很大,在做好了框架设计和相对非常Detail 的Design以后,我们把相关工作交由外包团队完成Code或者Test(当然基干Test Case是需要你明确的);从控制成本的角度出发来,降低Code阶段的成本。 2 从长短期人力资源平衡的角度出发,选择外包公司来进行; 所以,从上面的起因我们可以看出来,影响外包最重要的两个因素,就是风险,成本。 换句话说,你在风险基本可控的情况下,展开外包的(技术风险基本上没有了,业务风险基本上能够Freeze住)。下面我们就这两个方面来展开讨论了……呵呵 1 成本:无庸置疑,如果进入公司进行研发,你要增加的显性的成本是哪些呢?人员的加班成本:打车,办公餐你总是要出的(每个月300就足够了),办公成本(固资折旧,办公位成本等等,每个月有个700也就差不多了)。这样每个月增加1000。很少,不是吗?的确,显性成本的确不高,特别是对每个月15000-18000的外包成本来比,的确很少。但是,里面还有很多隐形成本,外包人员进入公司,会导致你的行政管理成本上升和团队管理成本上升。这部分的费用还是很高的,如果一支10人的团队,你不得不配上一个全职的Leader来协调他们的工作,在加上半个左右的其他管理支出,大致就差不多了。这么看起来,成本差距还是比较高的哦…… 2 风险问题:如果外包人员进入公司,那么很简单,他们出工你就必须出钱……但是如果外包到公司外部,我只是对一个Project打包计算成本而已。我至少少了很多人员风险:外包人员的流动率是很高的,一旦一个人员离开,导致的人员风险;或者出工不出活(你也无法给他什么考核,影响他的收入),那么你还得承担管理风险;如果项目Delay,那么一切Delay的后果都是你独享;以及所谓高级工程师,结果发现就是面试的那个人比较好,另外几个实在就是普通工程师等等(我们管这个叫形象大使)……恩,这么看起来,我们想想当年为集体公社干活的样子,和在自己责任田的干活劲头就明白了。IT行业里面出工不出活,太自然了。而且,既然我没有权力,为什么要承担管理责任?这太奇怪了。我只需要订下足够细节的Mailstone来监控风险,然后在合同中明确说明如果发生问题的处理方式(管理项目总比管理人方便太多了),然后发生问题了,给他们老板一个电话,他们的PM就会拼命…… 好了,外包进入公司开发的问题,我们已经提出来了,那么他的益处是什么呢? 1 能够控制风险:就相当于加个一个开发人员或者测试人员吗,即使有可能不好用,如果在项目第一阶段就投入,多少还是有用的;而且项目完全在自己控制之下,发现问题会比较快。但是我的理解是:如果一个项目风险大到这种地步,你们没有足够的能力去Design和Cover这个项目,还不如不要外包吧……外包就是用风险来换成本,如果风险是第一要素,还是老老实实的算了。 2 也许将来可以发现个把优秀的人,然后可以找入公司。嘿嘿,的确有的人如此考虑,当试用期用了。但是,你需要你的公司足够好才成。IBM,MS等等够班,但是如果你心存这个想法,恐怕也不太厚道吧…… 3 假设3个我们的研发人员混一个外包人员进行开发,这样即使外包人员撤走了,我们也可以掌握系统。你这一点的考虑是对的。但是,我有一个更好的方式推荐给你,就是使用专业人力资源公司,让他们推荐闲散人员,你只需要在他们工资(除此以外,什么保险什么的都不用)之外,再付出10-15%的成本,给人力资源公司做为人事管理成本就可以了。那你还那么高成本用外包干什么?我不太明白了……而且,在我们实行过程中,一般外包项目的设计是做得很细的,研发人员完全可以Cover住,当然,如果你的设计不过关,就让外包公司想到哪里,开发到哪里,这就比较头疼了。再说,你总是能够拆分出来几个模块,比较可控,其他模块你们自己干,要是弄得整个系统一个关联性巨大的东西,恐怕谁也无法执行外包吧…… 其他的呢?我实在想不到太多的,也许我们可以培养几个管理者出来!但是成本太高了吧…… 以上就是我的观点,首先明确,外包就是用风险换取成本,所以外包的先决条件就是风险可控。对于风险太大的项目,不适合外包。如果一个不适合外包的东西强制进行外包,纯粹是赌博。这一点我不想多说什么。 所以,请对方辩友注意,不要再说“风险太高了,难以控制了什么的,所以只能在到内部干”,这种推理方式是违反逻辑基本原则的。这就象一个人想去抢劫,但是身子骨比较单薄,拿刀子都拼不过别人空手的,所以,我们得出结论,还是带枪的抢劫比较好。这种前提错误的推论,结论也是错误的。正确的答案就是:不要去抢劫!如果你不能控制住风险,就不应该外包,而不是讨论如何在这种情况下外包。 好了,为了避免这种讨论落在空谈上,我说一个实际的,我们进行的外包项目的情况,提供给大家参考: 2004年,我们有一个WAP项目需要研发,3个人月的开发基本上就可以完成。由于这个项目和以前的WEB端程序很类似,我们只是通过一个不同的Adapter层进行一定的定制,就基本上可以完成。但是页面逻辑有点麻烦,页面比较多。于是我们执行了外包。为外包公司提供了详细的Spec,提供了Adapter接口说明,设计了页面的流转等等。然后就交给外包公司进行。我们在合同中要求每叁天提供一个Build版本,需要提供某些可见的Feature(这是合同定义的),和某些需要Fix的Bug(当然这是在过程中添加的),然后进行执行。在执行过程中,我碰到过两次他们不按时提交,或者提交的版本质量问题很大(以至于我们的测试都不愿意接收这样的代码),我很简单地给他们老板打个电话:“对不起,这次的Mailstone没有达到,如果下次Mailstone还不能达到要求,我将按照合同进行扣款”。结果他们该加班加班,该干活干活。我几乎不如何费心(至少不用我很脸红地对开发人员说:对不起,明天加班……)。当然,在整个过程中,我配备了一个Part Time的项目经理,来控制整个过程以及沟通等等工作。在最后,我的验收测试按照我们标准产品测试的方式进行验收。结果还算可以。 最后项目研发完成,我核算了一下内部研发成本和外包研发成本,成本为我们内部研发的60%-70%左右,Bug率比内部研发略高,但是还是可以Control的,也就是说还是比较值得。在另外的例子中,我们也执行过外包公司执行开发和测试,我们仅仅进行验收测试和CodeReview的工作的例子,效果也还成。 好了,攻击到此为止,轮到对方辩友了. :)
|