作者自述:2015 年,當我第一次擔任 Packback 的工程主管時,我接手了一個很棒的工程師團隊,他們在我升職之前就已經被招聘進來了。那年年底,當我要自己招聘一些人的時候,我不得不迅速制定一套流程,來發現和培訓新入職的軟體工程師。多年來,我一直在改進這個招聘流程。我的方法有點非常規,但我希望它能激發你的思維。這篇文章比較長,所以我將它分成五個部分:1、關於招聘的問題;2、我要找的技能;3、我如何發現候選者;4、我如何招聘工程師;5、我犯過的錯。
本文最初發布於 Karl Hughes 的個人博客,由 InfoQ 中文站翻譯並分享。
2015 年,當我第一次 擔任 Packback 的工程主管 時,我接手了一個很棒的工程師團隊,他們在我升職之前就已經被招聘進來了。那年年底,當我要自己招聘一些人的時候,我不得不迅速制定一套流程,來發現和培訓新入職的軟體工程師。
我從公司前輩使用的框架入手,並深受《人件》和 Josh Tyler 的著作「建立偉大的軟體工程團隊」所影響。多年來,我一直在改進這個招聘流程——主要是通過反覆試驗——得出這裡要介紹的迭代方法。
我的方法有點非常規,但我希望它能激發你的思維。這篇文章比較長,所以我將它分成五個部分:
關於招聘的問題我要找的技能我如何發現候選者我如何招聘工程師我犯過的錯註:如果你正在找一些書來幫助你成為軟體工程經理,這裡有一些我最喜歡的:https://www.karllhughes.com/posts/reading-for-engineering-managers
關於軟體工程師招聘的問題
過去,任何做過招聘的 工程經理 都會告訴你這項工作很難。
有很多限制因素,我們沒法完全公平地比較兩個候選人,適合一個團隊的候選人可能對另一個團隊來說就很糟糕。因為這太困難了,所以在這個過程中,人們會更青睞那些和面試官想法類似的人,那些在公司認識人的人,或者那些在壓力巨大的面試中表現出色的人。這讓那些擁有非傳統背景的人陷入了苦苦的掙扎,他們要與形形色色的候選人展開競爭,而這與大多數工程師的日常工作關係不大。
例如,一個典型的面試可能會要求面試官通過電話面試來考查「軟技能」。接下來,一個工程經理可能會進行基本技術技能面試,可能會要求候選人完成一個獨立的項目,或者到辦公室參加一個白板會議。在這兩種情況下,面試與工程師的日常工作完全不同。
軟技能很重要,但是,像「請告訴我什麼時候……」這樣的問題是為了檢驗語言組織能力,而 並不能真正的展示出其判斷能力或解決問題的能力。在 30 分鐘的電話面試中評估一個人的性格是不可能的,因此,你最多就是淘汰那些完全不靠譜或語言交流能力差的人。
同樣的,在一個小時的技術面試中也很難全方位地判斷一個人的技術能力。Web 開發(以及一般的軟體工程)領域是如此之大,以至於沒有人能夠完美地滿足你的需求。你可以問他們熟悉什麼技術,看看他們是否能就技術話題進行連貫的對話,但你可能無法觸及他們所掌握的知識,特別是如果這些知識與你自己所擁有的知識不存在重疊的話。
最後,我從來不和候選人進行白板或在線編碼,很多人討厭這樣做,我認為這是有原因的。在現實世界中,程式設計師在一個人的注視下用模糊的算法解決問題,沒有時間進行獨立研究,也無法獲得資源。如果那是我的日常工作,我絕不會做這份工作。
考查程式設計師不需要掌握的東西,並期望了解他們在公司的工作方式,這是妄想。這類面試只會讓招聘團隊有優越感,並確保擁有傳統計算機科學背景的工程師可以獲得更好的結果。
我要找的技能
為了圍繞軟體工程中真正重要的技能重新設計我們的招聘流程,我把這個問題歸結為 第一性原則。軟體工程師團隊需要具備什麼技能?
主動性
我從不喜歡事無巨細地管理別人。記得在大學時,我在一家餐館當領隊,對那些在顧客排隊結帳時閒站著不做事的人,我感到異常惱火。「去點菜或幹點其他什麼事!」
我跑題了。
大多數正在找工作的軟體工程師都有一定的主動性,但是優秀的軟體工程候選人總是會付出額外的努力。例如,我在 Packback 工作的時候,有一個傢伙建立了一個網站和一個非常受歡迎的 Twitter 帳戶,用來跟蹤警方掃描儀上的聊天記錄。他做這一切都是為了學習新東西。
積極主動的軟體工程師不會等招聘經理回覆郵件,他們會詢問下一步的工作,並在參加面試前了解公司的情況。這並沒有多難,但確實需要時間,而且很少有候選人會這麼做。
可靠性
主動性僅僅是個開始,但 我不要英雄。我想建立一個由始終可靠的工程師組成的團隊,他們會隨著時間不斷進步。
通常,在招聘時,長期工作經驗、強有力的推薦信和對項目的全心投入會讓他們在我這裡脫穎而出。
勝任力
當我還是一名新工程經理時,我有些過度關注技術技能。我們很容易會陷入這樣的陷阱:僅僅根據工程師的技術知識來給他們打分(像 Toptal 和 Triplebyte 這樣的公司就是建立在這種謬誤之上),但那些晦澀難懂的瑣事並不能造就一名優秀的工程師。
我會在下文中更詳細地討論我如何衡量應聘者的能力,但關鍵問題是,我是否認為這個工程師能學會解決我們所面臨的問題嗎?
我不關心他們是否第一天就知道所有的答案,相反,我尋找的是有好奇心的人,終身學習者,願意不斷提高自己。如果他們有這樣的能力,我會設法為他們提供成功擔任這一職務所需的信息。
對企業使命的興趣
我曾經把這稱之為「激情」,但 在「歡迎例外」播客上進行了一次生動的對話 後,我決定重新命名這種技能。
最終,我只想招聘那些關心我們行業,關心我們正在解決的問題,關心我們實現目標所用方法的軟體工程師。我不想他們加入之前就和我們走在不同的方向上,然後我要在前六周花時間說服他們。
雖然我不想要毫無疑問的忠誠或住在辦公室的人,但我確實認為,軟體工程師對他們將要做的工作要真正感興趣,這很重要。這會讓他們更快樂,這種積極的情緒會感染到每個人。
我如何發現軟體工程師
這些年來,我用了好幾種方法來發現和招聘軟體工程師。雖然我沒有大量的數據來證明這些方法,但我發現,以下這些方法對我有效。
職位列表
職位列表是求職者的 著陸頁。
一份引人注目的職位列表應該列出求職者應該知道的工具和語言,求職者將從事的項目,以及儘可能多的關於日常工作預期的信息。我試圖讓職位列表變得有趣和有創意,所以我通常使用一個 GitHub 儲存庫,其中包含關於我們團隊、我們公司和面試過程的大量信息(下面這個例子是我為 The Graide Network 創建的存儲庫)。
記住,不要只是和求職者分享這份清單。你還可以通過電子郵件發送給你的人際關係網中的每個人,在社交媒體上分享,並在你的網站提供相應的連結。那是一份公開文檔,務必要外觀美觀、功能強大。
人際關係網
我從來沒有花錢做招聘廣告,我對此持懷疑態度,原因是:最好的軟體工程師從來不會主動在招聘網站上找工作。
他們藏在他們的人際關係網中,包括前經理、同事、朋友以及專業機構中認識他們的人。當他們信任的人告訴他們有一個好機會時,或者當他們四處打聽時,他們可能就會跳槽。高級軟體工程師經常會笑我們,從天真的招聘人員那裡收到了那麼多領英信息。
那麼,建立軟體工程師人際關係網的訣竅是什麼呢?
時間。
當我告訴人們,我 每周花 4 到 8 個小時建立和維護我的人際關係網 時,他們很驚訝,但是這種投資回報巨大。每當有新的職位空缺,我就寫一份職位列表並分發。我有一個很長的清單,上面都是我希望將來某天與之共事的人,我瀏覽了一遍,然後找個藉口一起去吃午飯。
如果你現在還沒有積極地建立你的人際關係網,那就開始 寫作、演講、和有趣的人見面。這會是你職業生涯中最好的投資。
冷不丁的聯繫(Cold Outreach)
另一個不受歡迎的軟體工程師招聘工具是冷不丁的聯繫。我發現它有效,但你必須小心。這很容易給人留下不好的印象。
把冷不丁的聯繫當成是為了擴大人脈,而不是直接提出「要求」。「接觸別人,真誠地提問;對他們的背景做一些研究;去了解他們。你只是和他們進行對話,最終,可能會提到自己正在關注軟體工程師。
在每次電話結束時,問一下你是否可以在幾個月後繼續聯繫,然後真的那樣做。我就這樣遇到過一些優秀的人,即使我們最終未能一起工作。
獵頭
獵頭在軟體工程領域的名聲並不好,因為他們很煩人。一些初級獵頭會在我上班的時候主動打來電話,或者向我的公司郵箱中發送招聘職位。這種感覺不好。
另一方面,也有一些具有良好人際關係網的、誠實的技術獵頭。準備好一大筆錢,因為最好的獵頭是需要預付定金的,而不是事成再收費。
即使你找了獵頭,也還是需要不斷招聘。如果你找的獵頭運氣不好,你肯定也不希望失去所有的線索。
我如何招聘軟體工程師
現在你已經知道了我在找什麼,以及我從何處入手尋找軟體工程師候選人,招聘過程的下一個環節就是工作面試。多年來,我一直在對這個過程做調整,但目前,我是按照以下五個步驟招聘工程師。
第一步:信息性面試
我沒有設置「電話面試」,而是將我們的第一次通話視為雙向 信息性面試。
應聘者需要知道我們是否能很好地合作,我需要知道他們是否具備我上面列出的四項技能。我不會試圖探究深奧的技術知識,但如果他們的工作經歷或簡歷中有什麼特別突出的地方,我也會問。在電話結束時,我向他們推介這個職位,看看他們對這個職位多感興趣。
第二步:面對面的結對編程項目
以前,我會給通過初步電話面試的候選人分配一個項目「帶回家」。我的想法是,給他們一些空間來發揮他們的創造力,而且沒有時間限制。另外,在候選人完成之前,也不需要我的團隊在他們身上花很多時間,而且,他們可以在自己方便的時間完成。
個人獨自完成項目的問題在於,它沒有告訴我任何關於候選人在團隊環境中如何工作的信息,所以我仍然需要和團隊的其他成員開會,以弄清楚他們是否能與每個人和諧相處。
我們也錯過了一些優秀的候選人,因為他們沒有在項目的「適當」部分投入時間。例如,如果有人沒有編寫測試或者沒有覆蓋足夠的用例,他們看起來可能就不如覆蓋了足夠用例的人,即使項目沒有嚴格要求這樣做。
所以,在 2018 年,我開始在求職者中使用一個面對面的結對編程項目。這更接近我們的團隊成員在日常工作中的做法,而且通常比白板或帶回家的項目有趣得多。
通常,我會選擇一個有一些問題,但可以在 2 到 3 小時內取得進展的開源項目,安排一個時間與候選人見面,然後就一個問題進行結對編程。通過這種互動,我可以評估他們的批判性思維能力(特別是當他們是負責人的時候),他們的溝通技巧,他們學習新東西的速度,以及我們緊密合作的能力。同樣,這也可以讓應聘者了解他們是否願意在未來幾年和我一起工作。
最後,如果在第一次信息性面試中還遺留了任何問題,那麼在這個環節的末尾,我們會問更多的問題。
第三步:與團隊見面
通過信息性面試和技術評估的候選人將與工程團隊的其他成員見面。
對於其他工程師來說,這是一個機會,他們可以看看自己是否願意和候選人一起工作,也可以自己問一些問題。通常,為了方便比較進入這一階段的候選人,我們會使用一組問題。關於如何讓面試問題更客觀,Jeff Hyman 的著作 Recruit Rockstars 提供了一些很好的見解。
在團隊的其他成員與候選人見過面後,我將分別詢問他們的意見。過去,我常常讓所有人在一個房間裡公開談論候選人,但這導致了群體思維,通常聲音最大的工程師會對招聘產生巨大的影響。現在,我會權衡團隊成員的意見,但不會讓他們投票決定結果。
第四步:背景調查及錄取
在我決定提供這份工作之前,我會要求求職者提供推薦人的聯繫方式。你可能會認為進行背景調查很容易,但我遇到過很多求職者提供的推薦人都不怎麼熱情。這讓我懷疑自己對他們的判斷,並懷疑我是否還遺漏了什麼。
假設他們的推薦人證實了求職者的經驗和工作經歷,我就會打電話給求職者提出工作邀請。
我總是在電話上提出邀請,然後通過電子郵件跟進。我會在電話裡給候選人說下薪酬,這可以幫助我知道他們是否對此很感興趣,或者我提供的薪酬是否太低了。這也給了他們一個機會,可以在花幾天時間進行思考之前,直接問一些問題。
第五步:入職
在我提供 offer 並確定薪酬的同時,入職程序也已經開始了。
我會設法與每一位新員工見面,說下前幾周希望他們做些什麼,並開一個規劃會議,幫助他們儘快完成他們的第一個項目。從那時起,新員工的適職過程就取決於他們的經驗水平了。如果你想深入了解這個問題,這裡有我寫的 一篇關於人才發展和入職流程的長文。
我在招聘軟體工程師時犯過的錯
再說一遍,招聘是很難的。
儘管我有完善的招聘流程和豐富的經驗,但有幾次我還是招回了非常糟糕的人。不過,錯誤是學習過程的一部分,所以,如果你剛開始招聘軟體工程師,請做好把事情搞砸的準備。以下是我犯過的四個最明顯的錯誤。
1. 忽視危險信號
這是到目前為止我犯過的最大的錯誤。我招聘了一名求職者,他面試遲到了 30 分鐘,因為他現在的工作太忙了。在我僱用他期間,他總是「很忙」,但從來都沒有專注於正確的事情或工作。他幹了很多工作,但什麼也沒做成。
2. 注重技術知識勝過學習能力
在一次招聘中,我淘汰了幾名很有潛力的訓練營畢業生,因為我想要的是在這個領域有幾年工作經驗的人。這似乎很有道理,但我招到的是一些多年來一直以錯誤方式做事的人,他們帶來了一些壞習慣,我不得不努力幫他們改掉。
3. 在查找個人人際關係網之前聯繫獵頭
儘管我在人際關係網上投入了大量的精力,但在最初的幾次招聘中,我並沒有充分利用它。我很早就向獵頭求助了,雖然獵頭有幫助,但他們 並不是小型公司找到最初幾名軟體工程師的最佳途徑。
4. 沒有定義我希望候選人具備的技能
我花了很長時間才意識到,我需要一個招聘評分規則。
取而代之,我找到的是一些懂得一套特定語言和框架的人,這樣我就不用從頭開始教會他們所有的東西。這讓我放棄了一些候選人,而他們對我們的企業使命感到興奮,只是技術技能上並不完全符合要求。
雖然招聘軟體工程師仍然是一項挑戰,但是,有一個專注於所需(技術和非技術的)技能的健壯流程會好一些。反思過去的成功經驗總是能幫助我理解未來如何改進招聘流程,所以我也非常願意傾聽你們的意見。你們的招聘流程是怎麼樣的?歡迎在 推特 上和我聯繫。
英文原文:
https://www.karllhughes.com/posts/hiring-process
延伸閱讀:
為什麼頂級軟體工程師得不到應得的薪水?-InfoQ
關注我並轉發此篇文章,私信我「領取資料」,即可免費獲得InfoQ價值4999元迷你書,點擊文末「了解更多」,即可移步InfoQ官網,獲取最新資訊~