外包在软件行业非常普遍,大大小小公司都在使用,每年吸纳大量工作岗位。 不过接触外包的人很少,大家似乎也不太关心,也很少有人谈起。这让很多人想知道外包到底是怎么一回事。 本周,我读了TroyHunt2016年发表的一篇关于他的外包经历的旧帖子。我认为阅读它令人耳目一新,令人振奋。以下是节选的翻译,插图是我做的。 我的外包经验:印度、中国和菲律宾 作者:TroyHunt 原文网站:troyhunt.com 1、 我有很多与亚洲外包供应商合作的经验。在这篇文章中,我想谈谈我多年来将软件项目外包给印度、中国和菲律宾的经历。 我之前的工作是辉瑞公司的软件架构师。我总共工作了14年,负责亚太区的软件架构。 2、 辉瑞公司的软件开发策略很简单:一切外包。 这是行业的标准做法,我在亚太地区与数十家软件供应商合作过各种项目,从简单的产品宣传网站到大型临床研究系统,从移动应用App到终端程序POS机。 印度、中国、菲律宾的软件外包行业接触比较多,印象特别深刻。我想谈谈我对他们的看法。 3、 辉瑞为什么要外包? 原因很简单,程序员很贵。你必须花很多钱,雇很多人来构建软件产品,而且无论他们是否工作,你都需要支付薪水。而且你雇用的程序员不一定了解每个项目需要的具体技能,这意味着你必须雇用更多的人。 外包相当于“云程序员”,需要用的时候才用,只用你用的东西,为你的公司减负。 4、 外包一般选择亚洲,因为其他地方工资太高。澳洲很贵,美国很贵,英国很贵。上图为世界银行的人均收入数据。这三个地区分别与印度、中国和菲律宾有关。 根据我的经验,前三个国家外包公司的小时工资比后三个国家贵4到5倍。 5、 我们先来看印度。该国已成为离岸外包的代名词,在许多IT经理的心目中,外包等于印度。有很多原因。印度曾经是英国的殖民地,印度人英语说得很好。印度超过13亿的人口意味着它拥有源源不断的工程师。印度的外包产业非常成熟。外包巨头TechMahindra、Infosys和Wipro已经标准化了外包流程,并在该领域投入了大量资金。 6、 印度很多程序员都是通过单一技术的强化培训量产的,往往只了解培训中教授的非常具体的技术栈。我经常发现他们只理解软件组件的一个独立部分,而这就是他们要做的全部。 这对项目的作用是它最终涉及到很多人。我查看工作量估算并问外包商:“为什么我们需要这么多人?”。会有初级程序员、高级程序员、专门做API开发的人、做网站的人、做数据库的人等等。有些项目由于规模庞大而需要这样做,但即使是小型项目也是如此。 7、 印度的另一个问题是流失率,程序员总是在离职。传统的企业忠诚度在印度并不普遍,大多数人在外包公司工作的时间不超过一两年。程序员总是在别处寻找更好的机会并没有错,但这种流失率意味着项目会有更多的摩擦。这些不会出现在您的外包合同中。 我还发现印度程序员对需求文档的要求很高,他们总是要求提供非常详细的文档。其他地方的程序员也会索取需求文档,但是在印度这个需求比较强烈,细节对印度人来说很重要。很多时候,我们假设软件应该包含事后看来“超出范围”的功能。这可能发生在世界任何地方的任何项目中,但在印度极为普遍。 最适合外包给印度的项目,我觉得最好是独立的工作单位,范围明确,文档齐全,完全沿用印度公司现有的模式。要知道,那里的程序员被训练来做非常具体的事情,并以工厂流水线的心态进行开发,而您遵循他们的模式,就走上了“幸福之路”。 8、 接下来说说中国吧。 中国正在快速城市化,越来越多的人接受高等教育。他们是一个非常精通技术的国家,在这方面不断壮大,从新兴的硬件供应商到如今的华为和联想这样的主导者,还有像阿里巴巴这样非常强大的服务提供商。这些公司现已进入世界舞台。如果您痴迷于技术并且不关心中国正在发生的事情,那么您可能会在未来几十年内错过世界上最重要的技术创新和增长源。 9、 对于外国人来说,中国人不太好合作,主要原因是外语水平。中国内部市场巨大,几乎所有的项目都有自己的中文服务。因此,中国人接触英语的机会有限。与他们清楚地沟通可能非常困难。 这意味着您几乎总是与进行开发的实际程序员至少有一层距离。通常会有一个会一些英语的客户经理,你联系他,他会把你的意思翻译给技术人员。这样做的后果是,当你真的需要进行详细讨论时,你无法直接与程序员沟通。中国程序员会在内部讨论自己,你不知道他们在想什么,翻译过程中会丢失很多东西。 这对代码质量有着深远的影响。从功能上讲,代码本身可能没问题,但它是由英语水平很低或没有英语水平的人编写的代码。高质量软件的要求之一就是代码本身是一个自文档化的文档,这是很难实现的。他们的代码可能没有清楚地描述软件的功能,不仅对作者而且对未来的维护者来说都很难阅读。 如果你愿意一直与同一个软件供应商合作,那可能不是问题,但如果你把代码拿回去或交给别人维护,你就会遇到严重的问题.我个人的经验是,很难审查中国程序员写的代码。此外,语言障碍对UI也有影响,编写代码的人不太懂英语,并且编写的标签和标题可能会让英语用户感到困惑,这意味着很多意想不到的(和未预算的)工作修订。 10、 我有一个习惯,总是要求供应商提供工作分解表。如果我要外包一个具有20个功能的应用程序,我想知道每个功能的成本是多少。然后,我可以评估、讨论每个特性的重要性,以及是否通过放弃价值较低的特性来降低成本。 但是在中国,供应商不能提供这个表格,因为他们不是这样计算成本的。他们给我的细目是有多少初级和高级人员、项目经理、测试人员参与其中,以及他们每个人的成本是多少。在我看来,这根本没有用,但我没办法。 中国还有一个现象就是工作时间非常长,他们会投入很多时间。我清楚地记得一个案例,中国供应商的报价与澳大利亚当地供应商的报价相同,而工时却高出一个数量级。 11, 中国现在越来越贵了,据我了解,北京程序员的工资是两位数的增长,有报道说他们的年薪在25000美元左右,而孟买的年薪约为7,000美元。这是一个非常重要的区别。 中国(尤其是和印度相比)的一个优势就是对需求文档的要求不高。中国有一种真正的“可以做”的态度,无论你问什么,他们都愿意拿起任何东西去尝试。然而,尽管他们可以对任何事情说“是”,但他们真正的意思很可能是“否”或其他什么,这就存在风险。但总的来说,我发现它们的适应性很强,这是一大优势。 我更喜欢外包给中国,因为它更灵活,限制更少。然而,由于语言障碍,与新供应商合作时也会出现更大的摩擦。 12、 再来聊聊菲律宾。 在马尼拉呆了很长时间,我可以自信地说菲律宾人是你在任何地方都能遇到的最友好的一群人。由于菲律宾是美国的殖民地,当地人的英语水平非常好,英语是菲律宾的第二官方语言。无论您在马尼拉的哪个地方,您都可以毫无问题地被当地人理解和交流。 近年来我注意到的一件事是,呼叫中心向菲律宾转移的趋势很明显。你以前打电话给客服,接电话的是印度人,现在每次我打电话给电信公司,我都会和菲律宾人通话。我认为这是他们强大的英语能力、友善的个性和蓬勃发展的科技产业的结合。此外,菲律宾的工资比中国低得多,更接近印度。 13, 菲律宾是一个贫穷的国家,随处可见,尤其是在去机场的路上穿过摇摇欲坠的房屋时。 这也对科技界产生了影响,我在外包中看到的最明显的事情是菲律宾程序员对PHP的强烈亲和力。这并不是贬低PHP,而是贬低LAMP堆栈的低成本。辉瑞公司使用的微软技术堆栈一直难以在菲律宾找到市场。你去找任何供应商,他们的默认态度总是“是的,我们将用PHP和MySQL做你需要的”。虽然我们确实找到了可以使用微软堆栈的供应商,但我总觉得他们没有被重视,这让我有点担心他们的技术能力。 14、 论成本,菲律宾肯定比中国低,而且经常比印度低。根据目前的趋势,这种情况可能会持续很长时间。 在很多方面,菲律宾是世界上最好的。撇开成本不谈,就这个价格而言,他们拥有该国最好的英语水平、友善的性格以及我在中国观察到的相同的“我能做到”的态度。 15、 最后说一下我的外包经历。 首先,外包是一种不稳定的商品,因为程序员是不稳定的,尤其是在印度。我们在孟买与一位开发人员合作,并花费了大量时间和金钱来培训一位名叫Avni的程序员掌握所需的特定技术。项目进展顺利,但有一天,Avni离开了。我怀疑她要生孩子了,根据我的经验,这通常会在您收到通知前几个月发生。开发人员告诉我们不要担心,他们会为您找到另一个Avni,与上一个一样! 开发人员不是可替代的商品。您不能简单地用一种替代另一种并期望它们的工作原理相同。我经常看到外包供应商发誓说他们可以像更换厨房灯泡一样轻松地更换程序员。这是一种危险的无能信念,表明对软件开发的真正含义存在根本性的误解。 16、 第二点,外包软件的质量不一定在项目交付的时候就能看出来。通常需要数月甚至数年才能意识到您所招致的“技术债务”的成本。厂商开发好软件交给客户后,如果客户后来添加功能,发现代码看不清,修好要花多少钱?在软件产品生命周期中,长期成本往往被忽视,因为人们争先恐后地争取立即的短期节省。 我从未见过外包供应商为项目编写任何单元测试!他们没有自动测试流程,他们总是使用手动测试来确保一切正常。开发人员甚至从来没有听说过自动化测试的概念,因为编写额外的代码会花费更多的钱,而且他们认为这是理所当然的。因此,外包项目的长期可维护性和成本是可怕的。 17、 第三点,想要外包成功,最好采用混合模式。不是“一切都外包”,而是“让我们的人与他们的人一起工作,每个人都做他们最擅长的事情”。 我花了很多时间,去世界各地的外包公司,培训他们的开发人员,和他们的团队呆在一起,讨论要开发的项目。我有各种各样的坏故事,但也有一些非常积极的故事。 避免依赖外包组织中的个人,如上面的Avni,外包行业比正常情况下流动性强得多。相反,专注于让更多的人参与进来,这样即使其中一个人离开,你也不会失去太多的项目知识。 也可以应用更多的开发工具,比如代码质量检测工具、构建服务、版本管理等,让工作流程更具可预见性。 18、 第四点也是最重要的一点,不要把时薪作为外包成功与否的指标,不要以价格来选择供应商。 外包给哪家供应商通常是由公司内部最不了解软件开发的人决定的。他们被低报价所吸引,只考虑短期成本和交付条件,而没有考虑长期成本(如可维护性、可用性和安全性)。公司的预算和业务目标总是着眼于短期,难怪那些有钱但没有技术的人知道如何做出不明智的外包决策。 廉价的离岸外包是软件行业的麦当劳。由于需求量大,外包公司将软件开发变成了批量生产的产品。但如果你一直吃麦当劳就不太好了。您最好将外包视为均衡饮食的一部分,做出明智的决定,而不是因为标价低而盲目选择,而不管您将支付的实际成本。
