查看原文
其他

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

程序员的那些事 程序员的那些事 2021-01-30

(给程序员的那些事加星标


零、导读


Troy Hunt 是一个澳大利亚的程序员,技术博主,获得过 Microsoft Regional Director 和 MVP 的荣誉,但他并不是微软员工。他的技术文章和网络安全相关的居多,以前我们也翻过一些。


今天这篇讲外包的文章,是他写于 2016 年,前前后后写过很多年。之所以拖了很久,一是因为容易误解国外文化,二则是因为他在对接亚太许多外包供应商合作时所扮演的角色。


下面这些外包经验,是 Troy Hunt 基于个人观察的总结。或许会让一些人引发共鸣,或许也会让一些人感到不安,但他希望这些经验中,包括了一些真正有价值的见解。


注意:下面中的「我」,如果没有特别补充,均是指 Troy Hunt。


一、为什么要聊我的外包经验


我在生物制药公司瑞辉(Pfizer)担任软件架构师,总共干了 14 年,最后 6 年我负责亚太地区的软件架构。


亚太地区范围很广,从西面的巴基斯坦到中国,再到日本,再到我所在的澳大利亚和新西兰。该地区拥有世界一半以上人口,其中 27 亿在中国和印度。



最初我被派过来负责软件开发的,但公司对亚太地区的战略有了变化,管理层决定:把活都外包出去。


外包是行业中的标准做法。于是我的角色就变了,从和程序员一起做开发,变成了和供应商打交道了。


我参与的项目很广泛,从基本的宣传网站到大型临床研究系统,从移动应用到 POS 终端的实现以及各种支持项目,全组织范围内的操作系统和浏览器升级,以及很多其他内部项目等。


所以,这么多年下来,我与数十家不同的供应商合作,完成了数百个项目,尤其是在印度、中国和菲律宾。


在谈涉及上述国家文化之前,我还要补充一点,我和那些只有西方生活背景的人不一样,我的高中 3 年,是在新加坡度过的。我和当地人一起上学、一起生活、一起社交。新加坡包括了中国文化、印度文化和马来文化。



二、我的外包经验


1、为什么会出现外包?


因为人力成本很贵!(people are expensive.)


想开发做软件产品,你必须要养很多程序员。无论他们是否在做项目,你都需要付工资。此外,并不是每个程序员都具备每个项目所需的特定技能。这又意味着,你还得去招聘更多的人。


外包的好处就体现出来了:降低人工成本。


2、为什么会有离岸外包?


亚太(亚洲)地区的人力成本低。


在我博客的读者中,澳大利亚、英国和美国的最多。这些国家的人工成本都很高。从世界银行关于全球平均工资的数据也能佐证。


我在亚太地区对接合作的外包供应商中,最多的 3 个国家是中国、菲律宾、印度。它们的平均收入,和澳美英之间的差距,看下表就很清楚了。



3、印度


我可以这样说,印度这个国家已经变成了「离岸外包」的同义词。「印度外包」一词已经深入许多 IT 经理的心灵。


为什么会这样?有 3 个原因:


  • 印度曾经是英国的殖民地,印度人有很好的英语技能;

  • 印度拥有庞大的人口——世界第二,超过 13 亿人;

  • 印度在业务流程外包(BPO)和高科技工作上投入了大量资金;


印度的大型外包供应商有:Tech Mahindra、Infosys 和 Wipro 等等。我在许多项目中都有与它们打交道的经验,我也有和小型外包供应商打过交道。



虽然我没有到过印度,但印度外包供应商所体现出来的文化趋势,给我留下了深刻的印象。


在印度,许多程序员多为集中培训量产出来的,技能栈离散不连贯。


比如:2016 年7 月有则报道,说 Google 要在印度培训 200 百万的 Android 开发者。

我经常发现,印度程序员专注于软件组件的离散部分,这就是他们所做的一切,其他的不做。当然,我在澳大利亚、英国或其他地区也知道有这样的人,但全栈开发者更为常见。


这就造成了一种结果,有很多角色参与同一个项目,有初级开发者、高级开发者、做 API 的、做网站的、做数据库的…… 有些大型项目,这样划分是合理的。但小项目也这样搞职责划分的,那造成人力资源的浪费。我曾开玩笑,一拨人写起始标签 < ,另一拨人写闭合标签 >


印度程序员的离职率高(比中国和菲律宾严重的多),职场忠诚度低。如果你看到有人在同一家公司干了一两年以上,那就非同寻常了。在某个公司得不到晋升而跳槽,这没啥说的。但人员变动会给项目带来更多摩擦,这在项目提案中是无法体现出来的。


每次和印度供应商合作时,我一次又一次地发现,印度程序员需要非常详细的文档。相比中国和菲律宾,细节对他们非常重要。在很多情况下,我们会假设某个功能需求清楚地暗示了某些东西,但事后发现是“超出范围”的。这种情况全球的任何项目中都可能发生,但在印度极为普遍。


了解印度外包这些特点后,那最适合外包给印度的项目,应该是:有明确范围的项目单元(unit)、文档清晰、符合印度厂商擅长的模式。


我认为这很大程度上与“开发者工厂”的心态有关。在这种心态下,很多程序员都是接受过非常具体的培训,如果你能按照他们的模式,那就是你的“快乐之路”。



4、中国


我在中国呆了很长的时间。中国是一个迷人的地方,有着特有的互联网生态系统。有大量快速城市化的人口,正在接受高质量的教育。



这是一个非常精通技术的国家,我们看到他们在这方面不断壮大,从新兴(现在是占主导地位)的硬件提供商(例如华为和联想),到像阿里巴巴这样的服务商,如今已步入世界舞台。如果你热衷于技术而不关注中国动态,那你可能会错过未来几十年全球最重要的技术创新和增长来源。


但有一件事让中国人难以接受,那就是英语读写能力。他们没有印度那样的殖民背景,而且由于他们特有的互联网生态系统,如此依赖自己的中文服务,接触英语的机会要少得多,清晰的交流可能会很棘手。


这意味着,你和中国程序员之间,还会有英语技能的客户经理,他们给程序员翻译。他们在讨论细枝末节时是用中文,很多东西在翻译过程中丢失。


你要考虑这给代码质量带来的影响。从功能上讲,代码本身还行,但那些英语技能不好的程序员缩写的代码,离代码自文档化的质量目标差多少。

自文档化的代码和用户界面(UI),遵循命名约定和结构化编程约定。有了这些约定,可以让人在没有预先特定知识的情况下能使用系统。

换句话说,如果你的代码清楚地描述了它的功能,那么它将更易于阅读和维护,不仅对目前写代码的人来说如此,对将来要维护人员也如此。


并且还要考虑到,未来维护人员可能是其他非中国文化。正因如此,我发现评审(review)中国人写的代码特别困难。


语言障碍也会扩展到 UI。因为英语技能不好的程序员,不仅在写代码,标签、标题以及各种对外展示的内容,也是他在写。在像中国这样的地方,这尤其麻烦,意味着要做许多意想不到的(且预算未定的)修订。(当然了,即使在印度,英语也有许多文化差异。)


这类事情通常不会出现在项目提案中,但它肯定是有成本的。


(Troy Hunt 在北京时拍的一张照片)


(程序员的那些事 补注:Hunt 认为外包到中国还有个较高风险因素,和特有互联网生态的根源相关。这部分略,我们就不摘译了。)


我一直建议外包供应商在提案中拆分工作(以展示成本),我可以方便检查提案是否合理。举个例子,如果我要开发一个具有 20 个功能的应用程序,那我想知道每个功能要花多少钱。然后,我可以进行分解,讨论每个功能的重要性,是否要放弃价值较低的功能来降低成本,等等。


尽管我很推崇这种成本展示方式,但中国外包供应商不大感冒。虽然他们也细分了,但列出的是项目需要多少个大三、大四学生、项目经理、测试人员,以及这些人员的开销。在我看来,这毫不相关,因为我也没法干涉。不过,通过了解整个项目的工时(man hour)以及总成本,我可以更好地了解采用某个方案的投入。


我发现,与澳大利亚供应商相比,中国工时非常高。我记得有一个案例(项目),中国供应商的报价与澳大利亚供应商差不多,但工时却大了一个数量级。


最后,中国(的成本)现在变得越来越昂贵。北京程序员工资涨幅比例是两位数,而我通常略低于 3%,希望和他们那样。据 Glassdoor 2016 年数据显示,北京程序员的年薪约为 25,000 美元,孟买程序员年薪约为 7,000 美元。这是一个非常重要的差异,在 2010 年之前,肯定不是那个倍数。


从中国供应商的角度来看,他们的优势之一是:对需求文档要求不高,能够在最少的文件条件下认真工作当然了,你所提供的文档,因项目而异,因公司而异,但在像辉瑞这样的公司,技术人员也被视为软件发布“负担”的一部分,所以文档的质量可能不会特别好。


中国人有一种“敢做(can do)”的态度,他们会拿起任何东西,然后去尝试。虽然这也可能有风险,但总的来说,我发现他们非常乐于助人,这是一个很大的加分项


我会更倾向于外包给中国,因为那里的要求更加灵活,形式要求也更少。但前提是我要乐意与中国供应商长期合作,不过由于语言障碍,在过渡项目中涉及的摩擦更大。



5、菲律宾


如果我没从辉瑞离职,我会很乐意在菲律宾建立一个内部开发公司。我在马尼拉呆了很长时间,我可以很自信地说,菲律宾人是你在任何地方都会遇到的最友好的一群人。因为曾经被美国殖民过,英语是菲律宾的官方语言之一,国民英语水平也非常出色。和他们交流,没有语言障碍。


最近几年,我在澳大利亚发现,呼叫中心业务转移到菲律宾的趋势愈发明显。我认为,菲律宾人的英语技能、友好的性情和新兴的科技公司共同推动了这种转变。在业务流程外包(BPO)上,菲律宾也就最近比较突出,这也在国民平均薪资上体现出来了。


菲律宾是一个贫困国家,很难摆脱。随处都能看出来,尤其是当你开车去机场的路上。


(菲律宾首都马尼拉贫民窟)


贫困对技术领域也有影响,我在菲律宾最常见的外包模式之一,就是菲律宾程序员与 PHP 的密切关系。这并不是要贬低 PHP,对于那些没有太多钱的人来说,LAMP 技术栈真的很有吸引力,成本低。


相反,辉瑞公司使用的微软技术栈在菲律宾不吃香,有竞争力的程序员可难找了。你去找一个供应商问,他们的默认立场是“是的,我们可以在 PHP 和 MySQL 中做到”。尽管我们后来确实找到了用微软技术栈的供应商,但我总觉微软技术栈得不重视,这让我有点担心他们是否有足够的竞争力。


在成本方面,菲律宾一直低于中国,也经常低于印度。这种情况可能还会持续一段时间。


总之,菲律宾外包的优势,除了成本低,还有英语技能,友好的性情,以及他们也有我在中国观察到的「敢做」的态度



6、不是供应商开发软件,是员工在开发软件


「我们上一个项目是和 X 供应商合作的,他们非常棒!」

「我们选择了 X 供应商,他们有一些很棒的员工。」


这两句乍一听是一个意思,其实不然。员工是一种流动性很强的「商品」,尤其是在印度这样的地方。


以前我有一个项目,一个孟买的程序员,就叫她魏萌吧,她承担了大部分的工作。我们投入了大量的时间和金钱,让魏萌熟悉一种特定的技术,但她并没有我们希望的那么强。一切都很顺利,直到有一天…… 魏萌不见了!我怀疑她是去生孩子了,根据我的经验,她总得提前几个月通知大家这件事。然而,我们后来得到的信息是她病了,但别担心,还有另外一个「魏萌」,就像上一个一样!


程序员不是螺丝钉,不可能随随便便就换掉,然后还期望他们执行相同的功能。但我经常看到有供应商信誓旦旦地说,他们能像换厨房灯泡那样撤换程序员。这是一种危险、不称职的想法。



7、增加人手的谬论


在技术领导岗位上有很多非技术领导,他们对技术的了解真的很少)。他们通常认为,软件开发的工作产出与人力资源成线性比。参与的人越多,做事就更快。


这个谬论其实《人月神话》中就有。从事软件交付的人,都应该至少读一次这本书。

1 个女人要用 10 月生娃, 10 个女人就可以在 1 个月生。

这种谬论经常被忽视,尤其是当外包成本变得便宜之时,有人就很想在项目上增加人手。



8、代码质量


这是一个特别棘手的话题,我知道会有许多人对此有许多强烈的看法。我的经验是,当你把工作外包给澳大利亚、美国或英国等市场,然后把工作交给成本较低的地方时,代码质量会受到影响。让我来阐明一下我认为这其中的驱动因素是什么:


首先,根据我的观察,在低成本市场中程序员有更大的愿望去内部晋升。我在前文提到了印度的离职率,为了寻找管理职位而跳槽的程序员很多。当然我在中国和菲律宾也看到同样的事。


聪明的技术人员,想要通过换岗成为管理者来获得“进步”。虽然这事全球各个地方都有,但在我经常访问的美国和欧洲企业中,有许多人真心希望整个职业生涯都在构建产品。本文所讨论的 3 个国家市场中,他们几乎都想要转移到指导别人的位置。大家对代码的兴趣似乎越来越少,热情也越来越少,这不可避免地会影响质量


其次,外包行业是一个大行业,它总是希望增加产量,降低成本。他们非常注重利润。我之前提到过马欣德拉科技公司,他们有超过 10 万名员工。这类公司最终只是生产一种产品的工厂,为了提高生产效率,员工在无情地工作。他们通过拥有大量廉价的资源来实现这一点。有句俗话,“一分钱一分货”。


最后,代码质量并不一定在项目交付时就能看出来。通常,你需要几个月甚至几年的时间,才能意识到“技术债务”的成本。前面的中文例子就是一个好例子。在供应商交付产品之后,如果你想要添加功能,而代码又难以辨认,那么需要付出多少成本呢?在软件产品的生命周期中,较长时间的博弈常常被忽略,因为那些手握钱袋子的人急于获得短期的利益。



9、不要低估文化差异的成本


我们都知道,全球各地有许多不同的文化,它们之间往往存在着冲突。在中国吃面条,你可以嗦出声吃,但在澳大利亚这是不礼貌的。尽管只是文化上的细微差别,但却会对跨文化团队产生更严重的影响。


我在辉瑞接受过关于文化意识的培训,非常有趣。有些文化元素是通过含蓄方式表达交流的。我们在澳大利亚所说的“是”,在印度可能意味着“不”。



10、离岸外包什么时候才奏效


有一件事我想说清楚,我并不是说把工作送到海外行不通,远非如此。我想说的是,有些特定的挑战在 ROI 中很少被考虑到,它们会对外包的成功产生根本性的影响。


在我离开辉瑞后的日子里,我花了很多时间去世界各地的公司,培训他们的开发人员。当我花时间和团队在一起的时候,我们的话题常常会转到离岸外包。看到这里,你也想早已听过各种各样的失败案例(可能你自己也有过这样的经历),但也有一些非常积极的经历。


不要把所有事情都外包出去,采用混合模型。发包方和接包方的员工在一起工作,大家各自做自己最擅长的事。比如:本土团队做 IP 方面的,让他们面对客户,做设计的活,然后把最适合「开发者工厂」模式的活外包给印度人。


要避免依赖于外包公司中的个体员工。在印度,人员流动发生的可能性要大得多。前文已举了魏萌的例子。相反,你应该关注那些能让更多的人做更千篇一律的工作场景,即便他们中有几个离职,你不会损失太多的项目知识。


我经常与那些将团队成员派往到遥远国度的人交谈,以便他们能够与海外的人接触。不仅要把他们融入公司的日常,还要和他们一起喝啤酒,建立真正的联系。从我的经历来看,这种方法似乎还很好。


最后,我们现在已经有了一些很棒的工具:代码质量检查、构建服务、DVCS 等。



11、总结


还有一点非常重要:如果你拿时薪作为衡量外包成功的标准,那你就大错特错了!


拍板把将业务外包的人,通常是由那些对软件开发机制了解很少的人。他们容易被低时薪所吸引,他们考虑的是短期成本,需求是否已满足。忽略从更长远的角度来考虑,诸如可维护性、可用性、安全性等方面的成本。但是,当预算有限,又非常注重眼前利益时,那些不怎么懂技术的又控制着资金的人,做出不明智的外包决定,这有什么好奇怪的呢?


廉价的外包就像软件行业中的麦当劳。这是一种大批量生产的产品,虽然需求量很大,但如果你一直这样做,对你(健康)并不是很好。把它当作平衡饮食的一部分,做出明智的决定,不要被低标价蒙蔽,而不考虑你将要付出的实际成本。



推荐阅读  点击标题可跳转
波音 737 Max 飞机软件外包给时薪 9 美元的工程师
趣图:外包的真相
特斯拉嫌弃 Python,追捧 C++


关注「程序员的那些事」加星标,不错过圈内事

圈内事,我在看❤️

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存