我的外包经验:印度、中国和菲律宾(译文)

作者: 阮一峰

日期: 2020年2月27日

外包在软件业很常见,各种规模的公司都在用,每年要吸纳大量就业。

但是,外包的曝光量很少,大家似乎都不太关心,很少有人谈论。这导致许多人不了解外包到底是怎么回事。

本周,我读到 Troy Hunt 在2016年的一篇旧文,介绍他的外包经验。我觉得,读起来很新鲜,有启发。下面就是节选的译文,插图是我配的。

我的外包经验:印度、中国和菲律宾

作者:Troy Hunt

原文网址:troyhunt.com

1、

我有很多与亚洲外包供应商合作的经历。这篇文章我想来谈谈,多年来将软件项目外包到印度,中国和菲律宾的经验。

我以前的工作是辉瑞公司的软件架构师,一共干了14年,曾经负责过亚太地区的软件架构。

2、

辉瑞公司的软件开发策略很简单,就是将所有事情外包。

这是行业的标准做法,我因此跟亚太地区数十个软件供应商合作过,参与了各种各样的项目,范围很广,从简单的产品宣传网站到大型临床研究系统,从移动应用 App 到 POS 机的终端程序。

我对印度、中国和菲律宾的软件外包行业,接触得比较多,感触尤其深,我想讨论对它们的观察。

3、

辉瑞公司为什么要外包?

原因很简单,因为程序员很贵。你必须花很多钱,雇佣很多人来构建软件产品,无论他们是否在工作,你都需要支付薪水。而且你雇来的程序员不一定懂每个项目所需的特定技能,这意味着你还要雇佣更多的人。

外包就相当于"云程序员",你可以只在需要的时候去用它,只为所消费的东西付费,因此减轻了自己公司的负担。

4、

外包一般都选择亚洲,因为其他地方的工资太高。澳大利亚很贵,美国很贵,英国很贵,上图是世界银行的人均收入数据,这三个地区与印度、中国、菲律宾。

以我的经验,前三个国家的外包公司小时工资,比后三个国家贵4到5倍。

5、

先来看印度。这个国家已经成为离岸外包的代名词,在许多 IT 经理的心中,外包就等于印度。原因有很多。

  • 印度当过英国的殖民地,印度人的英语水平很好。
  • 印度拥有超过13亿人口,这意味着它有源源不断的工程师。
  • 印度的外包行业很成熟,外包巨头 Tech Mahindra、Infosys、Wipro 有规范的外包流程,在这个领域进行了大量投资。

6、

印度许多程序员都是通过单项技术的强化培训而大量生产的,往往只懂培训教的非常特定的技术栈。我常常发现,他们只懂软件组件的一个独立部分,而这就是他们要做的全部事情。

这对项目带来的后果就是,最终会导致很多人参与其中。我查看工作量估算,向外包负责人提问:"为什么需要这么多人?"。里面会有初级程序员、高级程序员,专门从事 API 开发的人员,负责网站的人员,负责数据库的人员等等。有些项目由于庞大的规模,需要这样做,但即使是很小的项目,也是这个样子。

7、

印度的另一个问题是流失率,程序员总是在离开。传统的公司忠诚度在印度并不盛行,大多数人在一家外包公司不会超过一两年。程序员总是去其他地方寻求更好的机会,这无可厚非,但是这种流失率意味着项目会产生更多的摩擦。这些并不会出现在你的外包合同中。

我还发现,印度程序员对需求文档要求很高,他们始终要求真正详细的文档。其他地方的程序员也要求需求文档,但在印度这个要求更强烈,细节对印度人来说很重要。很多时候,我们假设软件应该包括的功能,事后发现这些功能被认为是"超出范围"。这可能在全世界任何地方的任何项目中发生,但在印度极为盛行。

最合适外包到印度的项目,我认为最好是一个独立的工作单元,范围有着明确的界定,文档齐全,并且完全遵循印度公司现有的模式。你要知道,那里的程序员接受的是非常具体的事情的训练,并以工厂流水线的心态在开发,你按照他们的模式,那就会走上"快乐之路"。

8、

接着来谈谈中国。

中国正在快速城市化,越来越多的人口接受高等教育。他们是一个非常精通技术的国家,在这方面不断壮大,从新兴的硬件提供商变成现在占主导地位的厂商,比如华为和联想,也有像阿里巴巴这样的非常强的服务类公司。这些公司如今已经进入了世界舞台。如果您热衷于技术而不关心中国的动态,那么可能会错过未来几十年世界上最重要的技术创新和增长来源。

9、

对于外国人来说,中国人并不容易合作,主要原因是外语水平。中国的内部市场很大,几乎所有项目都有自己的中文服务,因此中国人接触英语的机会很有限,如果要跟他们清晰的沟通可能是一件很棘手的事情。

这意味着,你几乎总是与实际从事开发的程序员,至少隔了一层。通常会有一个具有一定英语技能的客户经理,你与他联系,他再把你的意思翻译给技术人员。这样的后果就是,当你真正需要进行详细讨论时,没法跟程序员直接沟通。中国程序员会在内部自己商量,你不知道他们在想些什么,并且很多东西在翻译过程中丢失了。

这对代码质量有深刻影响。从功能上讲,代码本身可能还不错,但这是很少或几乎没有英语技能的人编写的代码。高质量软件的要求之一,就是代码本身就是自我记录的文档,这一点很难实现。他们的代码可能无法清晰地描述软件的功能,不仅对作者也对将来维护的人,都很难阅读。

要是你愿意一直跟同一个软件供应商合作,那可能不会成为问题,但如果你收回代码或交给其他人维护,就会遇到严重问题。我的切身体会是,很难评审中国程序员编写的代码。另外,语言障碍对用户界面也有影响,那些编写代码的人由于不太了解英语,编写的​​标签和标题可能会使英语用户不适应,这意味着要进行许多意想不到的(且预算未定)的修订。

10、

我有一个习惯,一直要求供应商提供工作分解表。如果我要外包一个具有20个功能的应用程序,那么我想知道每个功能要花多少钱。然后,我可以评估,讨论一下每个功能的重要性,是否要通过放弃价值较低的功能来降低成本。

但是在中国,供应商无法提供这种表格,因为他们不是以这种方式核算成本。他们给我的细分,只是有多少个大三和​​大四的学生、项目经理、测试人员参与,他们每个人的花费是多少。在我看来,这根本没用,但我也没办法。

中国的另一个现象,就是工时非常高,他们会投入大量的时间。我很清楚地记得一个案例,中国供应商的报价与澳大利亚的本地供应商相同,而工时却大了一个数量级。

11、

中国现在变得越来越昂贵,根据我得到的消息,北京程序员的薪水是两位数的涨幅,有报告称,他们的年薪约为25,000美元,而孟买的年薪约为7,000美元。这是一个非常重要的差异。

中国的优势之一(尤其跟印度相比)就是对需求文档的要求不高。中国有一种真正的"可以做"的态度,不管你提什么要求,他们都愿意拿起任何东西去尝试。不过,虽然他们对任何事情都会说"是",但是实际上的意思很可能是"否"或别的,这里会存在风险。但是总的来说,我发现他们的适应性非常强,这是一大优势。

我更倾向于外包给中国,因为那里更加灵活,限制也更少。不过由于语言障碍,与新的供应商合作期间,涉及的摩擦也更大。

12、

再来谈谈菲律宾。

我在马尼拉度过了很多时间,可以很自信地说,菲律宾人是你在任何地方所能遇到的最友好的一群人。由于菲律宾当过美国的殖民地,所以当地人的英语水平很出色,英语是菲律宾排名第二的官方语言。你在马尼拉的任何地方,都能毫无问题地被理解,并与当地人进行交流。

近年来,我注意到的一件事是,呼叫中心转移到菲律宾的趋势很明显。以前你打客服电话,是印度人接听,现在每次我打给电信公司,都会与菲律宾人交谈。我认为,这是他们强大的英语能力,友善的性格和新兴的科技行业共同作用的结果。另外,菲律宾的薪水比中国低得多,更接近印度。

13、

菲律宾是一个贫困的国家,到处都可以看到这一点,特别是在前往机场的路上穿过摇摇欲坠的房屋时。

这对技术领域也产生了影响,我在外包中看到的最明显的一点,就是菲律宾程序员对 PHP 的强烈亲和力。这样说并不是要贬低 PHP,而是 LAMP 技术栈的低成本造成的。辉瑞公司所使用的 Microsoft 技术栈在菲律宾很难找到市场。你随便去一家供应商,他们的默认态度总是"是的,我们将用 PHP 和 MySQL做到你们的需求。 "尽管我们后来确实找到了可以使用 Microsoft 技术栈的供应商,但我始终觉得它们并不受到重视,这让我对他们的技术能力有些担心。

14、

在成本上,菲律宾肯定比中国低,而且经常比印度低。根据现在的趋势,这种情况大概会保持很长一段时间。

在许多方面,菲律宾是世界上最好的。除了成本,他们还有这个价格的国家中最好的英语技能,友善的性格,以及我在中国观察到的相同的"可以做"的态度。

15、

最后,谈谈我的外包经验。

首先,外包是一种不稳定的商品,因为程序员是不稳定的,尤其是在印度。我们当时与一家孟买的开发商合作,花了很多时间和金钱培训一个叫做 Avni 的程序员,让她掌握所需的特定技术。这个项目进展顺利,但是有一天,Avni 离开了。我怀疑她要去生孩子了,根据我的经验,这种情况通常会在发生几个月后才通知你。开发商跟我们说不要担心,会给你找另一个 Avni,跟上一个一样!

开发人员不是可以替代的商品。你不能简单地用一个人去替代另一个人,然后期望他们同样地工作。我经常看到外包供应商信誓旦旦地断言,他们能够像更换厨房灯泡那样简单地更换程序员。这是一种危险的不称职的信念,表明对软件开发的实际情况有根本的误解。

16、

第二点,外包软件的质量,不一定能够在项目交付时看出来。通常要花上数月甚至数年的时间,才能意识到你所承担的"技术债务"的成本。供应商开发完软件,将其移交给客户之后,如果客户以后要添加功能,发现代码难以辨认,将花多少钱才能解决?在软件产品生命周期中,长期的成本通常被忽略,因为人们争先恐后地希望立即节省短期成本。

我从未见过,外包供应商为项目编写任何单元测试!他们没有自动化测试流程,总是用人工测试确保一切正常。开发人员甚至从未听说过自动化测试这种概念,因为编写额外的代码将花费更多的金钱,一切在他们看来理所当然。所以,外包项目的长期可维护性和成本是可怕的。

17、

第三点,如果想让外包成功,最好采用混合模式。不是"将所有事情外包",而是"让我们的人与他们的人一起工作,各自做自己最擅长的事情"。

我花了大量时间,到世界各地的外包公司,培训他们的开发人员,跟他们的团队待在一起,交谈要开发的项目。我遇到了各种坏的故事,但也有一些非常积极的经历。

避免依赖外包组织中的个人,比如上文的 Avni,外包行业的人员流动性比一般情况大得多。相反地,应将重点放在让更多人一起参与,如果其中一个离开,你就不会损失太多的项目知识。

还可以多应用一些开发工具,比如代码质量检查工具、构建服务、版本管理等等,让工作过程变得更加可预测。

18、

第四点,也是最重要的一点,不要把小时费率视为外包成功的指标,不要根据报价的高低选择供应商。

外包给哪个供应商,通常是由公司内部对软件开发了解最少的人决定的。低报价吸引了他们,只考虑了短期成本和交付条件,没有将长期成本(诸如可维护性,可用性以及安全性之类的因素)考虑在内。因为公司的预算和业务目标总是聚焦在短期,难怪那些掌握资金却不了解技术的人做出了不明智的外包决策。

廉价的离岸外包是软件行业的麦当劳。因为需求量很大,外包公司就把软件开发做成了批量生产的产品。但如果你一直吃麦当劳,就不是很好。你最好将外包视为均衡饮食的一部分,做出明智的决定,不要因标价低而盲目选择,不考虑要支付的实际成本。

(完)

留言(35条)

正在外包工作,表示从未有过单元测试与自动化测试

涨知识

这种翻译文章如果有广告收益要付一些给原作者吗?

非常客观透彻,我深有同感。

其实,菲律宾的外包程序员很大一部分就是中国人。。。中国有大量程序员去东南亚做外包

引用fiilpip的发言:

其实,菲律宾的外包程序员很大一部分就是中国人。。。中国有大量程序员去东南亚做外包

那岂不是比国内赚的钱还少?

我现在教三年级的儿子学C语言编程,要求他无论是变量命名,还是写注释,全部使用英语,不会的就谷歌翻译,从小严格要求。

正在外包工作,表示从未有过单元测试与自动化测试

哈哈 编程从小孩纸抓起 可以 这位仁兄

引用lwl的发言:

那岂不是比国内赚的钱还少?

做灰产和黑产的不少,工资算不上很高(比不上北上深年薪30W以上的中高级程序员),但是比同等水平在国内的收入高。
当然,去做正规业务系统外包的也有,一个月包吃包住15K左右,竞争压力也小

想的还挺美,外包又想省钱又想做的好

印度人的英语真的好难听懂

之前在外包工作过,之前在杭州待过一段时间,在qq群上看到一条招聘信息,说深圳坂田有一个岗位非常匹配,问我要不要试试,确实是·非常匹配·,不知道你们听没听说过xamarin?这玩意根本没人做,并非恶意去黑微软的移动快平台框架,招聘网站确实几乎没有啊。


后来才知道我被‘三包’了,客户公司外包项目给大外包公司,大外包再外包一个人头,我太太太难,结果是非常悲剧的,我tm以为能长期做,至少也能做个一年半载,结果把我的小摩托车从杭州物流到深圳,花了860,后来骑了不到2个月,就被深圳交警没收。毕竟三无车辆,没收也是理所当然。

外包合同签了一年,一般都是一年,便于灵活操作。要人再招人,做完再释放,以此循环,毕竟外包公司是中间商赚差价。

后来,没出任何意外,项目按原计划3个月完成,我也不出意外的·被动离职了。

辞职之后,回到老家湖北,已经失业3个月了。

实际上去东南亚的中国人并不是做外包,大部分是去做菠菜的,工资也比国内高一些,但是风险更是高了好几倍。菠菜现在已经演变成,大陆提供技术人员,香港提供资金,台湾提供运维和客服,面向的却是大陆市场,每年造成大量的金钱外流。

引用bluesen的发言:

我现在教三年级的儿子学C语言编程,要求他无论是变量命名,还是写注释,全部使用英语,不会的就谷歌翻译,从小严格要求。

母语不是英语这种操作根本没用,因为一些英语专业词汇不是靠Google翻译就能表达的清的。

引用江云的发言:

印度人的英语真的好难听懂

但是英美系国家的人反而可以和印度人几乎无障碍的沟通,且信息传达效率高。而东亚国家的英语口音似乎没那么重,但实际沟通起来却令人费解得多。个人认为,英语在中国的普及可能还需要一两代人才能实现,学习英语的确对理解世界大有裨益。

涨知识

涨知识了

能干成事儿的都是有本事的,绝大部分还是像咱们这种在国内发展平平出去也还是个渣渣

其实最应该思考,我们应该怎么改变

引用bluesen的发言:

我现在教三年级的儿子学C语言编程,要求他无论是变量命名,还是写注释,全部使用英语,不会的就谷歌翻译,从小严格要求。

你是亲爹吗?

引用lwl的发言:

那岂不是比国内赚的钱还少?

你不懂,哈哈,比上海更高赚的。。

正在外包 目前已经开始自动化,且自己就是项目组里的开发

深刻地体会到,在不是英语系的国家要把英语学好确实很难。

引用哼哼哈嘿的发言:

但是英美系国家的人反而可以和印度人几乎无障碍的沟通,且信息传达效率高。而东亚国家的英语口音似乎没那么重,但实际沟通起来却令人费解得多。个人认为,英语在中国的普及可能还需要一两代人才能实现,学习英语的确对理解世界大有裨益。

没办法,谁让印度人和欧美都是一个种族呢。。。东南亚种族不同,做事方法不同差异大,

"技术债务" 哇,第一次听说

“中国的优势之一(尤其跟印度相比)就是对需求文档的要求不高。中国有一种真正的"可以做"的态度,不管你提什么要求,他们都愿意拿起任何东西去尝试。不过,虽然他们对任何事情都会说"是",但是实际上的意思很可能是"否"或别的,这里会存在风险。但是总的来说,我发现他们的适应性非常强,这是一大优势。”

----

翻译过来就是,操起键盘就能干,能不能成另说。

其实外包在远程工作中特别常见,但是说实话,专干互联网外包项目的公司就悬了,因为互联网项目能做三个月就已经是大项目!

这类项目不仅开发周期短,命也断。无论是短期线上活动还是官网、 APP, 甚至线下物联网项目做个能滚会说的“小机器人”,都是小跑快打,新手一直泡在这样的项目中自然难有技术积累。

再者,因为项目大多是一锤子买卖,少有长期运维或者版本升级迭代一说,所以公司单位时间承接的项目总量起伏特别大,员工会在闲死和忙死中反复切换!人员流动自然大了。

总之,互联网外包项目只适合经验丰富的小团队,不适合新手、菜鸟踩坑,这种项目就是赚快钱。三五个人把技术栈撸齐了,收入还是非常可观的,时间上也相对灵活可控,方便照顾家庭。

这篇老外的文章写得蛮中肯,站在外国人的观点看中国,确实英语这方面要抓紧,我觉得中国是缺少英语环境,不是缺少能力,我跟外国人交流不用注重语法也能沟通

云程序员。。

引用daly的发言:

正在外包工作,表示从未有过单元测试与自动化测试

确实要做这些要多很多工作量

确实英语环境不一样啊

看来以后要加强英语水平了,毕竟有的新技术是英文原版,方便学习和交流啊

引用bluesen的发言:

我现在教三年级的儿子学C语言编程,要求他无论是变量命名,还是写注释,全部使用英语,不会的就谷歌翻译,从小严格要求。

大神,膜拜啊!三年级就被你推坑里去了!!

引用bluesen的发言:

我现在教三年级的儿子学C语言编程,要求他无论是变量命名,还是写注释,全部使用英语,不会的就谷歌翻译,从小严格要求。

这个。。。你也要看他是不是适合,是不是喜欢编程这个东西吧。这个世界这么大, 孩子的未来是有无限可能性的,他可以靠其他的技能一样生活得很好。

印度约两亿人(约占总人口1/7)说流利英语,这一点比菲律宾好,菲律宾人口才一亿多

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接