当前位置: 主页 > 建站知识 > 软件开发

软件工程服务外包是什么意思-Troyhunt:把软件开发的活儿都包出去!

发布时间:2023-06-25 10:09   浏览次数:次   作者:佚名

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

这篇文章我断断续续写了几年,我以各种形式来撰写它,我犹豫是不是该写,因为这里面有一部分内容基于文化的观察角度会易被误解,里面有一些内容是我与亚洲很多外包商合作时关于我发挥作用时所扮演的角色。

以下是基于Troy hunt个人观察的意见,里面也有他个人的经历,可能有一些文化敏感,但会将文化特征发表自己的见解、感触与经验,相信这些会在一些人心中引起共鸣,也可以让一些人不高兴,但希望能给人们一些真正有价值的见解。

以下是 Troy hunt 先生几年来将软件项目外包到印度,中国以及菲律宾的经验之谈。

为什么要谈离岸外包

我在辉瑞医药干了14年亚太地区的软件架构师,在这段时间大部分的精力就是把软件项目发到海外地区。

亚太地区范围非常广,西面从巴基斯坦开始到东亚的中国,然后再到日本,再到我现居地澳大利亚与新西兰,这个地区生活着世界一半以上的人口,其中有27亿人口在中国和印度,人口规模宏大,文化也是多种多样。

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

最初我到辉瑞的时候是做软件开发。几年后,亚太地区组织战略发生了变化,管理层说:"把软件开发的活儿都包出去!",简单讲就是把所有事能包的就外包。

这在当时成了一种标准干法,随着合作的推进,我从原来和开发人员合作变成与软件供应商合作为主。

我参与的项目包括基础的宣传型网页,还有大型临床研究系统,从移动应用到POS机终端实施,还有各种支持型项目,包括整个组织内部的操作系统和浏览器升级改造,还有其它内部“支持功能”,范围非常广泛。

这么多年以来,我与数十个不同的供应商一同完成了几百个项目,特别是在印度、中国和菲律宾。我在这里讨论的这些国家,实际上指是基于外包侧的观察与观点。如果可能的话,我会把它变成我的企业诊断内容的一部分:)

我在欧洲和亚洲度过了少年时代,我的高中3年是在新加坡度过的,我和当地的孩子一起上学,一起生活,一起社交,新加坡是个有着强烈民族主义的小国,它混合了中国、印度文和马来三个主要文化。

我的软件外包经验

为什么会有外包?

是的,人力成本太特么贵了!考虑开发一款软件,你需要养很多程序员,不管他们在不在做项目,你都需要付薪水给他们,他们可能没有具备每个项目都具备的特定技能,这意味着还要招聘更多的程序员。

软件外包有点像如今的弹性云计算,在需要时使用需要的东西,只为消费的东西买单。我有一个项目,把它分发给有资源的供应商完成就可以了,从而“减轻”组织自身的负担,集中精力和头脑做份内的工作。

我认为,外包不单是将项目派发到海外,而是将价值主张发到另外一个国家的价值主张,这有点形而上。

为什么会有离岸外包?

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

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

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

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

中科创达软件是外包吗_南天软件是外包公司吗_软件工程服务外包是什么意思

所以,很多离岸外包商的共同理由就是这样说:与其付钱给本地高价的开发商,不如交给其它国家更便宜的开发商作同样的事儿呢?下面我们将3个非常富裕的国家与3个我有外包经验的国家做一下对比:

软件工程服务外包是什么意思_南天软件是外包公司吗_中科创达软件是外包吗

大家会在上图中看到显著的差距,后3个国家属于新兴市场,他们的地区内部有大量的农村地区与贫困人口,导致平均收入水平拉低。白领间的工资差异相对较小,但收入高的国家时薪是新兴市场的4到5倍,存在着巨大的工资差距。

以上我说的是外包的基础前提,也是公司喜欢将项目发到这些新兴市场的根本原因。接下来,我对此进行深入的研究,来进入3个国家外包情况的详细描述。

印度

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

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

印度做软件外包原因有很多,主要有 3 个。我总结如下:

1、印度历史上曾是英国的殖民地,曾为英联邦一员的印度人有非常好的英语能力;

2、印度拥有庞大的人口,位居世界第二,超过 13 亿人。意味着有源源不断的工程师;

3、印度政府在业务流程外包(BPO)和高科技产业上投入了大量资金。外包行业成熟;

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

印度是我个人没去过的国家,但印度外包供应商所体现出来的文化,给我留下了深刻的印象。

在印度这个国家,许多程序员多是通过集中强化培训,量产出来的,大多数的人围绕特定的技术栈培训,人们专注于某项技能,但离散且不连贯。

2016 年 7 月,就有一则报道说谷歌要在印度培训 200 万名 Android 程序员:

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

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

中科创达软件是外包吗_南天软件是外包公司吗_软件工程服务外包是什么意思

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

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

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

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

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

中国

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

中科创达软件是外包吗_南天软件是外包公司吗_软件工程服务外包是什么意思

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

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

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

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

自文档化的代码和用户界面(UI),遵循命名约定和结构化编程约定。有了这些约定,可以让人在没有预先特定知识的情况下能使用系统。换句话说,如果你的代码清楚地描述了它的功能,那么它将更易于阅读和维护,不仅对目前写代码的人来说如此,对将来要维护人员也如此。

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

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

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

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

回到中国的互联网内容审核制度,这算是中国外包的“高风险”因素。风险可能以多种方式表现出来,从中国人无法访问更多的参考资源(我的博客在谷歌的Blogger服务上运行而无法访问)到GitHub被阻断。这项制度有自己的道理,但对于发包方来说有不可预测性- 如果你在中国从事工作,则应该考虑这些风险。许多人部署虚拟专用网络,很多大型公司也这样做。

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

中科创达软件是外包吗_软件工程服务外包是什么意思_南天软件是外包公司吗

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

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

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

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

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

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

菲律宾

再来谈一下菲律宾。

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

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

菲律宾是一个较贫困的国家,短时间很难摆脱。你随处都能看出来,尤其是当你开车去机场的路上,看到摇摇欲坠的房子时。

软件工程服务外包是什么意思_中科创达软件是外包吗_南天软件是外包公司吗

菲律宾首都马尼拉的贫民窟

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

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

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

总体来说,菲律宾外包的优势是最好的,除了成本低,还有英语技能,友善的性情,以及他们也有我在中国看到can do 敢想敢为的态度。

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

“我们上一个项目是和 XYZ 供应商合作的,他们特别地优秀!”

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

“我们用了 XYZ 供应商,这家公司有一些很棒的员工。”

这两句话初听起来是一个意思,其实可不然,员工被视为一种流动性很强的“商品”,尤其是在印度这样的地方。

以前我就有一个项目,有一位孟买的程序员,就叫她卫妮(avni)吧,她承担了大部分的工作。我们花费了大量的时间和金钱,让卫妮掌握一种特定的技术,但她并没有达到我们希望的那么强。终于一切都很顺利,直到有一天…… 卫妮不见了!事后看来,我怀疑她要去生孩子了,根据我的经验,她总得提前几个月通知大家这件事。但是,我们后来得到的信息是她病了,但别担心,还有另外一个卫妮,和上一个人一模一样!

程序员不是螺丝钉,不可能随随便便就换掉,然后还期望他们执行相同的功能。但我经常看到有供应商信誓旦旦地说,他们能像换厨房灯泡那样撤换程序员,这是一种很危险、不称职的理念。这表明他们对构建软件实际涉及的内容有根本的误解,如果听到类似的话,应该非常严肃的给予反击。

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

我从由专业运营的外包公司有正常的流程保障人员流动产生的摩擦,但是人们能够信任一个人员变动的组织吗?你最终受几个关键人物的控制?

增加人手是谬论

在技术领导岗位上有很多非技术型管理者,他们对技术的理解少得可怜。这些人通常认为,软件开发的工作产出与人力资源成线性比,即参与的人越多,做事就更快。

一些离岸外包较少的地方,有的老板会这样考虑:“他们只是本地人价格的一半,我们可以拿到两倍多的人,在一半时间就可以干完项目!”

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

1 个女人要用 10 月生娃,那 10 个女人就可以在 1 个月内生育?

Brooks在书中谈到了连接成本,即在项目中加入的人越来多,你的连接数量就越多。当有2个人时,只有1个连接,人员A与人员B对许。当有3个人时,连接数实际上增加了1倍,A与B对话,A与C对话与B与对话。以此类推,4个是6个连接,5个人是10个连接,不断上升,这意味着团队运营的复杂度,印度的5个人的成本相当于澳大利亚1个人。

加入团队的所消耗时间有一幅漫画,请看图:

南天软件是外包公司吗_软件工程服务外包是什么意思_中科创达软件是外包吗

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

代码质量

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

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

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

中科创达软件是外包吗_南天软件是外包公司吗_软件工程服务外包是什么意思

其次,外包行业是一个大行业,它总是希望增加产量,降低成本。企业非常注重利润。我之前提到过Tech Mahindra公司,这家超过 10 万名员工的科技公司。这类公司最终只是生产一种产品的工厂,他们不断的提高流程效率,为了提高生产效率,员工在夜以继日地工作。他们通过拥有大量廉价的资源来实现这一目标。有句俗话,“一分钱一分货”,不要根据报价的高低选择供应商。

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

不要低估文化差异的成本

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

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

当人们处理外包环境时,特别是远程工作,问题很容易产生误解。要仔细考量自己的文化在进行书面交流时失去情感的次数,并有可能扩大化,这些会对成本,包括成果物,功能,Bug以及时间表产生的误解,我会看到这些在日复一日的发生,这些不会在合同中详细描述。

我的意思请大家想象一下:跨文化团队彼此不了解的时间成本:20000+美元。

也许它应该进入到“意外支出”之中,但很难确定一个数字。

离岸外包什么时候才奏效

有一件事我非常想说清楚,我并不是说把项目发送到海外行不通。

我想说的是,某此挑战在 ROI 中很少被人们考虑到,它们会对外包的成功产生根本性的影响。

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

并不是所有事情都适合外包出去,而是“让我们的人与他们的人一起工作,并且全都做各自擅长的事情”,采用这种混合模型,效果会比较好。发包方和接包方的员工在一起工作,大家各自做自己最擅长的事。比如:本地团队做 IP 方面的,让他们面对客户,做大量设计的工作,然后把最适合工厂模式的活儿交给给印度人。

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

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

最后,这几天我们现在已经有了一些很棒的工具,它们让派发的工作更加可预测,包括代码质量检查、构建服务、DVCS 以及其它机制,可以消除业务流程中的不可预测性。

总结

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

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

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

在写这篇文章时,我收到不少读者的积极反馈。诚实的面对文化敏感,同时又能团结众人并非易事,我希望我做到了公正开放。与所有的博文一样,我希望有经验的人们发表自己的评论,无论好坏,很愿意听到你的分享。