早在五月,我們發布了第一個職位公告,以幫助我們找到一位全端開發人員加入我們的團隊。
在收到近 900 份申請並面試了數十位才華洋溢的人之後,我們很高興終於宣布 Robin Malfait 接受了我們職位的邀請,並於今天正式成為 Tailwind Labs 團隊的一員!

Robin 是來自比利時的才華洋溢的開發人員,並且長期以來一直是 Tailwind 社區的活躍成員。如果您是 Tailwind UI 的客戶,並且曾經在我們的 Discord 伺服器上的 #react
頻道中提出問題,那麼有 90% 的機率是那位樂於助人的人回答了您的問題。他甚至建立了一個 書籤小工具,以幫助人們將 Tailwind UI 元件轉換為 JSX!
Robin 是一位經驗豐富的 React 開發人員,他加入我們是為了協助領導我們正在開發的開源無渲染 UI 函式庫,這些函式庫將成為 Tailwind UI 中官方 React 和 Vue (至少是從這裡開始) 支援的基礎。
我們非常興奮他終於在今天加入我們,並且迫不及待地想看到他的貢獻如何讓大家能夠更快、更有信心地建構出很棒的 UI。歡迎加入團隊,老兄!
接下來是關於我們如何為這個職位招聘的故事,以及我們如何將候選人從最初的近 900 份申請縮減到最終向 Robin 發出邀請。
職位公告
在這個職位之前,我們只聘請了我們已經認識和信任的 Brad,因此我們不需要職位公告或任何形式的嚴格申請流程。
我知道如果我們想要找到真正優秀的候選人,我們必須寫一份引人入勝的職位公告。經過約 3-4 天的努力,我們最終得到了這個
以下是我在撰寫時所關注的重點事項
- 具體說明申請人在開始工作後將會參與的專案
- 清楚說明我們是一個小團隊,所以每個人都必須做一些雜事,包括客戶支援
- 舉出我們剛剛完成的專案的具體範例,申請人如果已經在公司工作就會參與這些專案
- 深入探討我們預期在下一個即將到來的主要專案中會遇到的特定難題,以幫助申請人了解對我們有價值的專業知識類型
- 分享具體的薪資和福利資訊。如果沒有清楚了解薪資,我永遠不會申請工作,那麼我為什麼要期望有才華的人在不了解薪資的情況下申請我們的職位?
我們收到了大量關於這份公告的正面回饋,我為它的成果感到非常自豪。我認為它是以申請人為中心的,而且我認為它對我們收到的申請品質產生了很大的影響。
申請流程
我們與其他公司略有不同的一件事是,我們沒有要求履歷或要求申請人回答一大串問題。我們所要求的只是一份「申請」,無論申請人決定以何種形式提交。它可以是求職信、一個小型網站、一個影片、一個投影片簡報,任何形式都可以。
我決定以這種方式要求申請的原因有幾個
- 我認為履歷沒有那麼重要
- 我想要篩選出具有一些天生行銷敏感度的人,我們是一間小型公司,所以我們需要 T 型人才,而不是需要專家
- 我想要篩選出可以交付成果的人,而讓申請完全自由形式可以告訴您很多關於一個人從無到有地自行製作出精緻產品的能力
- 我想要找到一個人在沒有被提示的情況下談論我們正在尋找的東西的人 — 找到一個自然而然地與我們想做的事情非常契合的人對我們來說是一個很大的優勢
- 我預期會收到很多申請,而且我認為以這種方式要求申請可以很容易地篩選出那些使用地毯式搜索方式找工作,而不是特別有興趣與我們合作的人
即使我認為申請流程相當令人卻步,我們還是收到了 100 多份申請,其中顯然花了很多時間為我們的職位公告製作非常具體的內容,當然也包括 Robin 的申請
有些人確實在他們的申請中做了一些非常出格和有創意的事情(甚至有人製作了一個互動遊戲!)但 Robin 的申請讓我們脫穎而出,原因有幾個
- 視覺設計很棒。我們是一家非常注重設計的公司,因此對設計有良好的品味對我們來說非常重要。
- 他關於學習程式設計和加入 Laravel 社區的故事告訴我,即使我們從未見過面,我們也擁有豐富的共同歷史。
- 他冒險分享了他對元件設計的一些強烈看法,這些看法與我們很快就要做的一些工作非常相關,而且我同意他的觀點,甚至學到了一些東西。
- 他分享了一個他撰寫的非常有趣的 開源函式庫,儘管它非常默默無名,但仍然有經過深思熟慮且完整的說明文件,並以結構良好的方式呈現。很明顯,即使在撰寫 markdown 檔案時,他也會考慮視覺設計。
- 他分享了很多他想與我們一起合作的專案的具體想法,而且其中很多都是我已經很期待做的事情。
- 他將「GitHub」中的「H」大寫了(天啊,我超討厭人們不這樣做)。
Robin 的申請是從內容角度來看,可能真正脫穎而出的 40-50 份申請之一。
篩選申請
處理近 900 份工作申請是一項繁重的工作。超過一半的申請我們可以立即丟棄,因為他們只提供了他們 LinkedIn 個人資料或通用履歷的連結,但是篩選其餘的申請真的很困難。
我以前從未以這種方式聘請過任何人,一開始我真的覺得我們需要與每一位提交高品質申請的人會面並面試。但是,隨著申請湧入,我意識到這根本不切實際,而且我們必須對此設定某種上限。
我決定盡可能地將優秀的應徵者排序,然後直接從前 20 名開始。這意味著我們會錯過許多很棒的人,甚至可能錯過了最頂尖的應徵者,但現實是我們只能投入這麼多時間在這上面,而且我必須相信,在最優秀的約 20 名應徵者中,肯定會有多位我們不會後悔錄用的人,即使有可能最棒的人在另外 30 名之中。
面試流程
我們首先安排與前 20 名左右的應徵者進行視訊面試,這大約花了 3 週的時間完成。
這些是 30-45 分鐘的通話,我們就幾個主題進行了相當輕鬆的對話
- 應徵者最近在做什麼,以及他們認為自己的優勢在哪裡
- 他們為什麼申請這份工作,以及這個職位有哪些地方吸引他們
- 我們公司在未來一年左右要做什麼,並深入探討幾個專案細節
- 回答應徵者關於這份工作或我們公司的任何問題
這是一個了解應徵者並對誰最突出有直覺的好方法。我們真的很享受與每位面談者交流,但我們還是做出了艱難的決定,再次篩選至約 10 人進入下一階段。
居家專案
應徵流程的下一步是居家專案,應徵者必須使用 Vue 或 React 根據 Steve 建立的設計來進行建構。我們估計這是一個約 4-8 小時的專案。
我們提供了一個壓縮檔,其中包含所有說明、Figma 檔案格式的設計,以及一個工作實作的逐步影片,其中概述了 Figma 中難以捕捉的任何行為。
我們試圖給予非常明確的說明,並確保指出我們希望應徵者將時間集中在哪裡,以及我們不希望他們過度思考或花費太多時間在哪方面的領域。
我們給每位候選人約兩週的時間來完成專案,只是為了確保他們有機會在不影響他們行程的情況下完成。
我們收到的所有提交內容都很棒,但我們再次強迫自己限制下一階段的候選人,這次降至 6 人。
我們非常喜歡 Robin 的提交內容的一點是,他花了很多時間用程式碼中的註解來引導我們了解他的解決方案。對於常規的生產程式碼,我會說這絕對是過度的,但作為工作申請的一部分,我認為這非常有助於了解他實際上如何思考他正在編寫的程式碼的幕後情況。他也花了很多時間描述某些問題的替代解決方案,以及他為什麼不採用這些方法,這也很有幫助。
結對編程環節
應徵流程的最後一步是與我進行兩個小時的結對編程環節。
當像這樣在面試過程中進行結對編程時,存在著權力動態影響整個過程的風險。我真的想盡可能地避免這種情況,所以我做了兩件事
- 我確保我們結對的內容是全新的,我之前沒有任何經驗
- 我讓候選人建議一些我們可以結對的內容,並從他們的列表中選擇了一些內容
我絕對不想就我已經知道所有答案的內容進行結對,而只是看候選人是否能弄清楚我已經知道的事情。這絕對不能代表真實的工作,而且我認為這根本沒有用。
相反地,透過選擇一個我們都沒有豐富經驗的問題,我們可以將權力動態放在一邊(至少盡可能地),而只專注於一起學習新事物,並了解我們如何幫助彼此擺脫困境。
我結對的一些內容包括
- 從頭開始建構日期選擇器
- 學習 XState
- 使用 Vue 3 Composition API 建構模態對話框
我真的很享受這個過程,並為我們如何將其整合在一起感到非常自豪。這絕對是面試過程中資訊量最豐富的部分,也真的讓我非常有信心,我們是把工作機會提供給了正確的人選。
在 Robin 的環節中,我們決定從頭開始建構一個 SVG 圖表庫(我們兩個人以前都沒做過的事情),使用 Svelte(我們兩個人以前都沒有使用過的框架)。這是 Robin 的想法,而他有勇氣在面試的情境下同時處理兩個全新的問題,這真的讓我印象深刻。我們在結對過程中度過了愉快的時光,而且在整個環節中,從來沒有感覺到我們中的任何一方領先於另一方,或試圖讓另一方趕上進度。我們之間的化學反應很好,感覺非常充滿活力且富有成效,讓我想起我職業生涯中一些最棒的結對環節,這真是令人難以置信,因為我們以前從未一起工作過,而且他正在接受工作評估。
發出錄取通知
整個過程大約花費了 1.5 個月,最後我們很難在前幾名候選人之間做出選擇。實際上,我們錄用他們中的任何一位都不會後悔,但我和 Robin 面試和結對的經驗稍微突出了一些,我非常興奮能夠向他提供這個職位。我們知道他會非常適合團隊,而且我迫不及待地想在未來幾個月與他一起解決一些難題。
想討論這篇文章嗎?在 GitHub 上討論 →