圖文/(本文由Kai Hao授權轉載)
這次就來簡單分享一下面試 Automattic 的經驗,一邊想自己紀錄這段時間的成果,也希望可以幫助到對 Automattic 有興趣的人。
今年初,我開始找工作,上次的目標很明確是要找大公司為主,後來也如願進入 Verizon Media (Yahoo!),這次的目標也很明確,這次我只選擇完全遠端工作的公司。
原本以為只找遠端的公司的話選擇也不少,但實際開始研究後才發現大部分的公司其實都還是有很多限制,有些公司只接受美國境內的遠端工作,有些公司是必須要在一定的時區範圍內,即使這些都符合了,最後還可能因為法律等等的限制不接受台灣的遠端工作者。幸運的是,Automattic 沒有這些限制,而且其實已經有台灣人在裡面工作了。
這次就來簡單分享一下面試 Automattic 的經驗,一邊想自己紀錄這段時間的成果,也希望可以幫助到對 Automattic 有興趣的人。tldr; 我覺得面試的過程滿有趣的,面試的方式也是我目前遇過最喜歡的方式,但缺點就是時間會拉得較長,整體而言我還是相當喜歡這次的面試經驗的。
我投履歷時是 2/2 也差不多是我剛開始找工作的時間,投遞方式是直接在官網找職缺然後寄信,投遞的職缺是 JavaScript Engineer。其實當初看到職缺列表的時候就滿驚訝的,因為受到疫情的影響下,滿多公司都會被迫鎖住職缺或甚至裁員,Automattic 則是滿滿的職缺看起來絲毫不受影響。
線上投遞履歷後沒隔幾天 (2/6) 就收到了 HR 的來信,內容是滿制式化的「收到了你的申請了」的信,另外附一份小小的問券讓我回答。問券的內容就是一些簡單的介紹自己的問題,例如「介紹一下你自己」、「如何得知這個職缺」、「解決一個有趣的問題的經驗」、「失敗的經驗」、「最喜歡 Automattic 的哪一個產品和教條」等。寫這份問券沒有花上我太多的時間,但也盡量把一些自己的優勢點寫進去,平均每個問題都寫了 150 字左右,我也不知道是多還是少 😅。
在回答完問題後不久 (2/13),就收到了 HR 寄來的面試邀約。
Automattic 的面試相當有趣,由於想要盡可能模擬正式工作時的溝通方式,就連面試都是直接在 Slack 上只用打字面試。雖然如此,為了得到較快的回覆速度,我們還是有約了一段時間確保雙方當時都是有空的而且都在電腦前。
(小插曲一下,在約一面的信中,當時是使用一個第三方服務來安排時間的,但是不知道是不是該第三方服務的 bug,他們的時區顯示的很怪,在選擇畫面上寫是台北時間,確認畫面變成 CST,收到確認信時也是 CST,害我還寄信問了一下 HR 確認最後以台北時區為準,後來下次再約時間時就不是用這個服務了 😅)
由於我跟一面的面試官時區差距比較大,最後是選擇了 2/21 的凌晨 12 點面試,不過還好我本來就習慣晚睡,這倒是對我沒太大的影響。面試開始時面試官會在 Slack 上敲我,美式話家常了幾句後就開始進入正題。
面試的題目非常多元和開放,通常都是問過往經驗,然後會從中再更深入探討一些議題,面試的過程很放鬆也沒有壓力,沒有突如其來的考試或考題,就像是兩個人在聊技術一樣輕鬆自在。一開始主要都是面試官在發問,在問完問題後就可以輪到面試者提問,整個過程差不多在一個半小時左右,不過因為我問題比較多所以有超出一點點時間 (害別人下一個會議遲到 XD)。
一面就是讓你盡情表現自己的機會,切記不要對方問什麼才答什麼,一定要想辦法把自己以往的經驗多拿出一點來談。例如當對方問測試怎麼做時不要只講個大概,可以天馬行空的從剛接觸時寫的 unit testing 開始講,講到後來因為什麼原因而開始更加注重 integration testing 和 end-to-end testing,
自己使用測試框架時的經驗或是有沒有遵循的測試準則;
Enzyme 和 react-testing-library 的差別,各適合解決什麼樣的問題,自己因為什麼樣的具體原因而採用新的框架;
測試時對於 coverage 的想法以及其優劣;
多人協作時的測試處理,是否有架設 CI/CD,有沒有為了特別解決什麼樣的問題而引入新的測試工具;
使用 type checking (Typescript, Flow) 或測試的時機和取捨,導入時遇到的困難等。
簡單來說就是想盡辦法把腦子裡曾經處理過跟測試有關的問題都全部榨出來,這會比只講測試有包含 unit testing、integration testing 和 end-to-end testing 還好多了。
如果經驗豐富的話把遇到的經驗鉅細靡遺的都講出來也幫助很大,像是我就在對方問我曾經優化過效能的經驗時把以前 17 直播間噴愛心的故事從頭到尾講了一遍,不只是一個挺有技術深度的議題,把它當故事講其實也挺有趣的。
一面開始後幾乎所有的訊息都會在 Slack 上傳遞,有問題時也可以比較容易的即時討論。一面結束後的隔幾天 (2/24),就收到 HR 在 Slack 上的回覆,邀請我進入下一階段:Coding test。
2/24 當天我就被加入了一個 GitHub 上的 repo,而這個 repo 就會是接下來要做的 Coding test,我拿到的題目是要改善一個既有的 WordPress plugin,限時 6 個小時,但時間可以自己安排,通常是在一個禮拜內完成。
題目的敘述相當詳細,包含如何啟動、要解決哪些問題、該注意什麼以及不該注意什麼等,這也反映了 Automattic 平常工作時詳細且大量的文件的文化,讓人接到工作時可以安心的做而不會缺東缺西。雖然我之前從來沒有碰過 WordPress plugin,甚至有些內容還必須要理解部分 PHP 的程式碼,但整體來說題目並不算難,只要有能力 Google 的話還是幾乎能找到解答。
我覺得題目是出的還不錯的,同時測驗面試者如何理解和處理 legacy code,也同時給予面試者相當大的彈性做任何改變,題目中有很多開放性的問答,牽涉到 performance、security 等大方向的探討,以及測驗面試者在短時間內對 project 的理解度,能否給出明確的長期改善目標。
我在 3/2 完成測驗,發了一個 PR 後在 Slack 上通知,但因為疫情的影響,公司的人員調度有些延遲,在 3/12 才被安排了 reviewer。接下來就是 reviewer 會針對你提交的 PR 和 issue 做一些比較深入的探討和問答,或是我有漏掉的東西會提醒我補上。
這裡倒是產生了一些小誤會,例如我其實有寫在 PR description 裡但沒有被 reviewer 看到,於是被 reviewer 問 “What else?”,害我超級緊張想說我到底漏了什麼,把整個 project 翻來翻去還是找不到哪裡還有問題,最後只好坦白說我已經找不到了,我找到的只有上面寫的那些,才發現原來只是 reviewer 漏看了。我能給的建議只有盡量把回答寫成條列式並分段分清楚,不要步入我的後塵 😅。
在 3/20 時,reviewer 在 Slack 上給予最後的 feedback 和一些我做得好和做不好的地方,大部分都很公平,只有一個算是題目沒有講清楚的部分,我即時回應後他們也馬上改善了。結束後就是再次轉給 HR 準備 Trial 階段。
Automattic 的 trial 應該是最有名也算最惡名昭彰的一關了吧!這是一個相對 Coding test 大很多的專案,一樣是改善一個既有 WordPress plugin,但 scope 放大了許多,也更加專注於所面試的職缺內容。
專案內容盡可能地符合真實工作時會遇到的問題(聽說以前是真的直接做會上線的測驗,但現在應該沒有了),平均花費時間是 40 個小時,但這部分則會給薪,薪水是固定的 $25 USD/hr,對於台灣的薪資水準來說算相當優渥,但對其他地區來說則偏少了些,這也是最為人詬病的一點,要求面試者要花費 40 個小時在面試,而付的薪水卻不如預期,讓許多不能接受的人直接放棄。
花費的總時間是 40 小時,但跟上一關一樣可以自己安排時間,通常完成時間是介於 2 週到 8 週,看面試者能夠花費多少時間,有些人是一邊工作正職一邊利用下班時間寫測驗,也有些人是直接把正職辭了硬是要拼下這份工作,我是選擇一邊工作一邊寫測驗。
測驗內容更加有彈性了,這次我們愛提交幾個 PR 或 issue 都可以,而每次提交的 PR 也會有專屬的 trial lead 幫忙 review,工作的模式以及 git flow 的使用也都可以按自己習慣的方式進行。
這次的測驗更加注重於 React 的運用,雖然 roadmap 上只有短短三句,但我們必須自己規劃細節、理解需求、必要時詢問且釐清問題,有點像在測驗我們對於專案的主動性和專案管理的能力,畢竟 remote work 最注重的就是能否自動自發的完成所需的需求,roadmap 也是故意只寫短短幾句的。
整體的測驗並不算難,我反而認為最困難的地方在於溝通,對於不習慣 remote work 的人可能會覺得步調太慢,發了一個 PR 卻要等個一兩天才有人幫忙 review,但其實換個方面想想也比平常 open source 發的 PR 好太多了 😂。
每天和每週完成工作後要回報做了些什麼,雖然正式工作時不會這樣,但在 trial 階段時可以比較清楚追蹤進度,我最後花了 33 小時完成 trial,並寫了一篇相當仔細的performance optmization 的文章,滿令我訝異的是其實我並沒有把題目都寫完,完成度應該只有六七成吧,但也許 trial lead 已經對我的表現感到滿意於是決定直接進入下一階段。
我相當喜歡這樣的 trial,算是某種方面類似於部分公司會用的「試用期」,相對於一兩次的 onsite test,更能準確地看面試者的表現和能力,也比較不會給予面試者太大的壓力,又可以給面試者更多的發揮空間和表現機會。但當然缺點就是時程會拉得非常長,如果本身正職就很忙的話可能會很容易 burnout,但這時也都可以跟他們溝通,他們也會很樂意和建議休個長假,例如這一兩週就不需要有進度沒關係,Automattic 對於時程的安排也可以非常有彈性,聽說甚至有面試者斷斷續續寫了半年才完成 trial 的,最後也是得到了 offer。
值得一題的是,進入 trial 階段時,我們的 Slack 帳號就會像是被解鎖一樣,可以進入一些少數的 channel 和裡面的人互動,可以直接在某些 channel 中詢問 trial 裡遇到的問題,或是在裡面全是正在做 trial 的 channel 中和彼此互相打氣聊天,Automattic 也很明確的說裡面的人彼此都沒有競爭關係,他們所能接受的職缺數量非常充足,所以可以盡可能地互相幫助。
我自己和裡面一些人的互動都可以感受到滿滿的溫暖,詢問問題的話都可以得到很友善的回覆,「沒有問題是蠢問題」,這裡鼓勵問問題也鼓勵犯錯,至少我從沒有看過任何人因為問了問題而被訓斥或是調侃的,事實上,整個面試過程接觸過的任何人都友善到不行,而這其實也明確的寫在招募的流程說明中。
在 5/2 時,我的 trial lead 就通知我可以進入下一階段了:Matt Chat。
這一關原本叫作 Matt Chat,以前是 Matt Mullenweg 本人會親自和每一位面試者聊天,但現在已經超過 1000 人的員工的情況下看來還是不太實際,現在是改由一個資深員工和 HR 來進行。
這一關嚴格上來說不算是在面試流程中,在通過 trial 時其實就已經算是錄取了,這次只是要和公司中一位資深的員工聊聊天,分享面試過程有沒有可以改進的地方和理解未來工作的興趣和目標。
這次是我整個面試過程中第一次也是唯一一次和公司的員工視訊對話,不擅言詞的我緊張到不行,但幸好還是表現得勉強還算可以,面試官一樣非常友善,也是真的想知道我對於面試過程的想法,讓他們可以不斷地改善面試流程和進步,整場視訊會議耗時約 30~45 分鐘,結束後就會被安排和 HR 進入最後的階段。
和 HR 聊天是在 Slack 上進行的 (5/7),這次也是簡短的詢問了一次面試過程遇到的問題和改善的方向等,代表他們是真的非常看重面試經驗的,而後就是進入最重要的 offer 階段了,這時會討論期望薪資和預期會加入的 team。
沒錯,Automattic 是 global pay,不會因為身在台灣就領到比較低的薪水,所以儘管開吧!
隔不到兩天,就在 5/9 時收到了正式的 offer letter,也總算結束了這為期三個月的漫長面試流程。
這大概是我面試過最有趣的一次經驗了吧!Slack 面試讓面對人就會開始莫名緊張的我發揮得比較正常了些,途中遇到的所有人都超級友善讓我更想與他們一起工作,trial 也是能讓我好好發揮的方式,雖然也的確是我面試過最長最久的一次,但不管最後有沒有上,都還是最讓我印象深刻的一次面試。
最後還是不免俗的推銷一下,We’re hiring! 希望有興趣的人看完這次的分享會更加有信心,一起來加入 Automattic 的大家庭吧!
圖文/(本文由Kai Hao授權轉載)