但是,外包的曝光量很少,大家似乎都不太關心,很少有人談論。這導致許多人不瞭解外包到底是怎麼回事。
本週,我讀到 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、
第四點,也是最重要的一點,不要把小時費率視為外包成功的指標,不要根據報價的高低選擇供應商。
外包給哪個供應商,通常是由公司內部對軟體開發瞭解最少的人決定的。低報價吸引了他們,只考慮了短期成本和交付條件,沒有將長期成本(諸如可維護性,可用性以及安全性之類的因素)考慮在內。因為公司的預算和業務目標總是聚焦在短期,難怪那些掌握資金卻不瞭解技術的人做出了不明智的外包決策。
廉價的離岸外包是軟體行業的麥當勞。因為需求量很大,外包公司就把軟體開發做成了批次生產的產品。但如果你一直吃麥當勞,就不是很好。你最好將外包視為均衡飲食的一部分,做出明智的決定,不要因標價低而盲目選擇,不考慮要支付的實際成本。
(完)