如何招聘外包程式設計師

梧桐發表於2014-03-04

我最近寫了一篇文章介紹如何招聘全職員工。而本文主要關注如何招聘外包開發人員。這兩者確實有很多相似的方式方法,但區別在於外包人員參與度相對比較低而且不會一直呆在團隊裡。

首先說一點背景故事。我曾經用我的方法招聘近10個在海外遠端工作的外包人員。儘管不是萬無一失,但我認為這是我使用過的方法中最省時並且投資回報率(ROI)最高的。過去幾年裡我在自己的業務中常常使用外包人員,這一個招聘流程也可以說是從我的經驗裡產生的副產品。有時候這套方法效果很好,有時候很糟甚至是一塌糊塗。經過了很多次的優化,我下面闡述的方法能夠穩定的篩選出最優秀的外包開發。希望這套方法也能為你帶來同樣的效果。

流程

一共是四個步驟。如果去掉髮布職位這一步實際上只有三步。整個流程的目標是節省時間和開銷,同時盡最大可能去發現最優秀的候選人。需要注意的是這個流程可能需要花費$50到$250,取決於你要招聘的人。你需要釋出職位,稽核候選人,選取最好的X個(通常最少選10個)。在此基礎上你聘用他們完成一個簡單的程式設計任務。等他們完成後(前提是他們能完成)你就可以稽核程式碼並最終決定誰的實現更好,然後你就可以決定招聘的人選。下面就是所有步驟:

招聘優秀外包開發人員四部法:

  1. 招聘網站上釋出職位需求
  2. 預評估:僱用候選人(最少10個)一小時
  3. 程式設計挑戰
  4. 留下最佳候選人

第一步: 招聘網站上釋出職位需求

目標: 釋出有吸引力的職位

登陸招聘網站釋出職位。確保標題能準確描述你需要做的事情。不要寫類似“JavaScript高手”或“Rails大牛”之類的。換成“高階Rails開發”或“Wordpress開發”可能更好些。職位描述應該具體描述你的需求。不要寥寥幾筆簡單了事,例如:“程式碼優雅,按時交付”。你需要告訴應聘者你需要他們做什麼。如果是升級現有程式碼,那你需要告訴對方可能會面對哪些東西。如果你是做業務的不懂程式碼,那你需要描述產品的功能以及你為什麼需要做這個。不要在這一塊花太多時間。差不多10到15分鐘夠了。

招聘網站都有一些模板式的選項,針對這些選項我喜歡採用下面的設定:

  • 技能需求:

顧名可以思義,如果你是Rails網站,可以寫”Ruby on Rails”,有可能還要寫”HTML”和”JavaScript”等。

如果是其他技術,就填上具體的技術

  • 支付方式:

如果是沒有具體結束時間的專案就採用按小時付費

如果工作範圍能確定就按固定金額支付,比如安裝WordPress並配置像X一樣的主題

  • 預計工作量

這個每個人的評估不一樣,通常我勾選”兼職”

  • 期望的經驗值

總是選中級或高階。選擇新手會讓你最終花兩倍的價格來換掉

  • 公開程度

所有人可見(除非我要指定招某一個人)

  • 其他偏好:
  • 兼職型別:無
  • 最少評價星級:無

這裡選無偏好的原因是大量的高手從來沒有在這網站上完成過專案。還有的人只做了一個專案,結果還得了一個差評,但原因不是開發的錯,而是產品管理沒做好。所以我們不要濾掉這一批人。

  • 已工作時間:無

再次說明一下,很多高手是剛加入網站的

  • 地點:

這一項要注意。我個人是不關心對方在哪裡。但這得取決於你。我一邊選擇無偏好。但如果你想各個地方的人都試一下那你就選對應的地點

  • 英語級別: 5或更高

這一項是應該有要求的。好多人自稱英語是4/5但你跟他們發郵件,IM或Skype/Google Hangout溝通時你會發現實際上只有2或3。能夠有效溝通是成功的關鍵,缺少這一項猶如逆水行舟。

  • 其他用於篩選的問題

我個人會留空,因為程式設計師就是技術型的,程式設計這塊要麼知道要麼不知道。

接下來發布職位。

等上大約48小時進入第二步。這期間應該有人來申請職位。

第二步 初步稽核 – 僱傭最優人選(最少10個)

目標: 選取可能適合職位的最優候選人進入下一步

可能你會收到25到5份職位申請,他們可能來自世界各地。你要做的第一步就是過濾名單,下面就是行動方案:

  • 砍掉英語(或者其他你選擇的語言)很爛不能閱讀的。這是很明顯的排除訊號,如果現在都不能交流,你怎麼能期待以後能交流。
  • 去掉沒能力完成工作的。比如,你正在招聘Rails開發,但是應聘者沒有在技能裡列出Rails。你需要招聘能力最強的。
  • 去掉不符號職位描述的。 比如你需要招人開發一款遊戲,那麼web開發人員可能就不是很適合。
  • 去掉超過預算的。一般來說
  • 要價高一點的是比要價低的活兒好一點,但沒這必要。不然就是在浪費雙方的時間。

經過48到72小時後,你的候選名單上應該包含最少10個候選人。

現在就需要你掏點銀子了。如果申請人的平均薪水是5美元到25美元每小時,那你可能需要花50到250美元才能找到合適的人選。你需要把這10個人全部聘用,我是認真滴。但是你聘用他們的時候你得通知他們你只是需要他們完成一個簡單的任務,時間不超過1小時。然後你把程式設計任務(第三步)的連結發給他們。這一小時是要支付報酬的。這是給候選人信心表明不是要讓他們白乾。如果你想找外包/自由職業者/合同工白給你幹活,那你立馬失去所有的優秀開發人員。如果你支付他們整個一小時的報酬,他們會更認真。

這時候會發生一件有意思的事。平均有50%的候選人沒能完成這一步。我猜想其原因就是他們根本不知道如何完成。這也正是第三步的目標:把能做事的人篩選出來。

第三步: 程式設計任務

目標: 確認候選人有能力通過程式碼解決問題。對候選人的程式碼進行審查。

這一步和“如何招聘程式設計師”的第三步很像,但也有一些改動。雖然很相似但也存在關鍵的流程差異,所以讀了之前一篇文章的同學還請繼續耐心閱讀。

過程中候選人會用我指定的語言解決實際問題。對於高手來說程式設計任務應該不超過1小時就能完成。我也只支付了1小時時間,他們可以愛用多久就用多久的時間,反正我只付一小時。目標很簡單:判斷候選人行還是不行。

程式設計測試是很好的調節閥。不是說問題有多難(恰恰相反,問題很簡單),而是因為你可以瞭解對方的程式碼質量,同時也能找到以下問題的答案:

  • 候選人的溝通能力
  • 候選人是否知道服從指示?
  • 候選人知道如何使用git和GitHub嗎(後面會細說)
  • 候選人知道最佳程式碼實踐嗎?
  • 候選人知道如何寫程式碼嗎?
  • 候選人能通過測試嗎?

我一般告訴候選人截止時間是24小時。題目放在一個線上的GitHub/BitBucket的一個Git庫裡面,所有候選人共享一個程式碼庫。這意味著候選人可以看到別人答案。但這沒關係,如果有人作弊也很容易發現。如果三個人的repo看起來一樣,那很可能最先提交的人才是真的寫出程式碼的人。沒有人在一次測試中寫出一模一樣的程式碼。

repo裡包含題目所需的所有資訊。候選人只需要按照指示操作,並在完成後發我一封郵件就行了。下面是一些我建立的程式設計題。

你可以fork這些例子並儲存。如果你訪問過這些網站中的任何一個你就會發現這裡面的每一個例子都要求候選人經歷一系列步驟。如果候選人不清楚幹什麼,他們可以跟我確認或者直接在Goolge上找答案。候選人完成後需要提交一個pull 請求給我,然後我可以進行評審。

這種方式可以說是神來之筆,因為它能全方面瞭解候選人。比如候選人是否能按時寫出程式碼完成工作。同時也能讓我審查程式碼來判斷到底是好還是壞。基於我的經驗,平均5%的候選人不能完成任務,因為他們不知道如何解決問題。這也是我讓他們在家面試的原因。從第一步到第三步都可以遠端進行。這為公司節約了時間。在這完成了任務的40%的人中,只有20%的人做對了,並且到這個時候基本上只剩下一兩個候選人看起來不錯。如果你有更多的選擇當然更好。

有的網站要求候選人安裝監控軟體,它會定期進行截圖讓你檢查。所有者讓我不僅可以看到他們的進度,也能讓我部分評估他們解決問題的過程。

對於這種方式有一個很正常的顧慮:萬一他們作弊怎麼辦?如果他們叫朋友或者其他人當槍手怎麼辦?是有這種可能,但我認為現實中也存在這個問題。有時候程式設計師不知道如何解決問題就會尋求幫助。他們通過QQ向朋友求助,或者是在網上搜或者是找一些滿足要求的開源專案來修改。這就是程式設計師的作風,管你是在家還是在公司誰關心。如果對方真是在欺騙,我想很快我也能發現。就算是對方被招進來了,團隊也能很快發現問題。這時候你就需要需要決定是否要留下這個人了。

如果候選人沒能完成測試,這就直接是紅牌了。當然出的問題也應該足夠簡單讓有經驗的程式設計師能在一個小時內完成。如果不能完成,要麼是題目太難了要麼是候選人不合適。如果你用的是我上面提到的連結(或者類似的),那就不存在這個問題。對於那些沒通過測試的,我建議放棄後面的面試直接換下一個人。

對於那些正確解決問題的人,我一般會審查他們的程式碼,如果沒問題我回把他們加入潛在僱員清單。

如果你不會寫程式碼又想參照本流程那我強烈建議你找一個會程式設計的朋友,或者是同事來幫你。支付他們2個小時的報酬讓他們給你的候選人進行評價。向他們解釋你要進行的流程並告訴他們擔任的角色:程式碼評審。如果你採用這種方式,你需要他們按照“行/還行/不行”這三個等級對程式碼進行審查。“不行”的意思就是不行、不能聘用。“還行”就是說可以,不是最好的但可以用。“行”表示可以,聘用這個人,活幹得不錯。我把那些“還行”的人也包含進來了是因為有時候程式碼看著可以但不完美,這也不是大問題。有時候你希望產品能儘快出來並不要求完美,只要能用就行。這些”還行“的人就適合幹這種事,因為有時候你在測試市場反應或其他方面,你希望越快完成越好。然而能招到”很行“的人總是好事。

如果沒人能完成程式設計任務,那就再發布職位。有時候要找到合適的人得釋出好幾次職位資訊。這是要花點錢,但花在前面比後面一直花錢要好。

第四步: 留下最優秀的

目標: 招聘合適的人選

通過上面的流程你已經找到了合適的人選,現在就要準備聘用了。一般到這一步可能剩下2到3人。

如果只招聘一個人,那就留下最好的,並告訴其他人你已經招了其他人,但會和他們保持聯絡,團隊擴充的時候需要他們。這正是做人留一線,日後好見面。說不定以後還需要他們。如果你要招兩個人,那就留排名前兩個。道理你懂的。如果人不夠,那就再發布職位。

總結

招聘外包人員也是蠻有挑戰的。但如果你採用上面的流程,你會始終鎖定優秀的外包開發人員並過濾掉濫竽充數的人。我希望這些流程能幫到你。

我很想把創造這些流程的功勞歸功於自己,但做人要厚道。程式設計挑戰的實踐受啟發於一家名叫Integrum的公司。

相關文章