EP8 - 不同level的工程師職責是什麼

上禮拜跟我們Discord社群的人一起做了pair programming

挺好玩的也讓雙方互相學到東西不同的觀點

本來沒有想做成正式活動的想說是社群上的朋友問能不能練習

沒想到蠻多人有興趣的

maybe之後會是個活動吧

以下開放報名或是有其他需求都能在社群上問

上面很多大神都很樂意回答問題

只怕你不問而已

職涯方面我常常被問到一個問題說要怎麼升上senior

或是senior的定義是什麼

我能怎麼做才可以升到下一個level

今天想講一下工程師大概有幾個level

每個level的工程師主要職責是什麼

而且要怎麼晉升到下一個

我自己是在工作四年後升上senior的

當時和同事弄了一個plan做system migration

從當時的Java monolithic把前端搬出來變成自己的SSR service

然後架設了GraphQL server

算是當時蠻重要的project因應當時的快速發展

應該是因為這個project而升的

撇開升職不說 這project對我影響蠻大的

幾乎從零架構且怎麼說服stakeholder我們需要這個

然後弄了個plan怎麼同時有business feature又可以邊做technical upgrade

最後是挺成功的而且現在還在用

今天要講的level其實每間公司可能都有名字不太一樣

就算level一樣但涵括的範圍和需要的技能可能不一樣

levels.fyi除了能看公司薪水多少也有個圖會告訴你比如Google的L5 senior是微軟的 63 64

然後微軟senior有兩個level但他們沒有staff位置所以下一階會跳到Principal

以下資料是我google到的加上根據我公司的評分表

可以當參考但不一定每一間公司都一樣

我們公司評分表蠻好玩的會拿繩子來比喻你應該懂多少

蠻奇怪的我們是做電動車的怎麼會拿繩子而不是車子比喻

SWE 1

比喻如果有一條繩子的話SWE 1了解什麼是繩子和繩子的定義是什麼

面試過程中會比較注重在computer science 的基礎

會問一些問題來看你對程式語言的熟悉度

假如今天你面試這個position是後端用Java 可能會問很多OOP 的概念

前端或許會問基本的const let var有什麼不一樣

CSS哪一個rule會被apply

怎麼query HTML DOM

然後問問框架類的問題來看你有沒有用過

如果你有其他的實習經驗那會有很大的加分

代表你有和別人一起共事的經驗

一些工程工作flow你或許也會了解

比如為何需要用git和了解code review的重要性

工作方面你可以在資深工程師領導下完成你的ticket

這階段不會期望說你要own某個feature或是自己獨立帶一個小團隊做feature

雖然這麼說但如果你覺得你準備好想要往下一個level邁進

你可以和經理提表達你的立場看看能怎麼往這個方向前進

之後sprint planning時候或許會給你一些超過你的level該做的事情

這方面之後的level都一樣

先和經理溝通表達你的意願然後draft a plan看看怎麼達成

你可能會在這邊待一到兩年然後promote到下一個

SWE 2

比喻為你可以拿繩子繫基本的繩結

面試過程和SWE 1差別沒有說特別大

問得東西可能也差不多但這時候你應該對語言的掌握或是框架的熟悉度要比之前高一點

也會了解best practices有哪些 效能怎麼處理 或是知道也寫過單元測試

可以簡單的比較出為何某些library比較好或是library怎麼運作的

這階段是你對coding比較有信心了而且因為有些經驗了你有一些自己的想法和邏輯

這在你之後想升senior的話會非常有幫助

工作方面你可能會有機會自己做一個feature而不是像level 3時候是別人lead而你是幫忙的

這個feature或許不是很大但至少是個responsibility

比如今天的feature是要把landing page的UI改一下

設計師會找你溝通

PM會問問你時間上行不行

ticket有可能是別人開給你或是你得自己開

其他時候比如有個bug或是需要解決方案時候

你也能給出自己的意見

不一定是最好的但能給就行了

Senior

比喻為了解各個不同的繩子和打各種不同的繩結

大部分擁有4,5年左右經驗的人會到Senior

面試方面會比較多元化 會想更多的了解你有沒有帶project的能力

會不會主動的去解決問題和與stakeholder做協調

換句話說就是你有沒有領導力

技術方面除了coding以外也會多一輪叫做系統設計system design

有看我發的推文 or X文 whatever it's called

前端系統設計我自己遇過滿多的例子是給一個API

做一個search function和把結果弄成一個list

可能會要求說邊打字邊做search

做pagination

或是問做infinite scroll的話要怎麼保證效能

如果你不清楚我在說什麼的話

你下次可以試試自己做infinite scroll而且list很長的時候你整體效能感覺如何

工作方面你可能會帶一個team或是 畢竟這個是前端的podcast 負責一個project前端的進度和細節

會需要你去主動的了解business需求 product需求 和designer溝通

最後開ticket和經理溝通timeline來決定什麼是第一版最重要的東西和什麼時候可以上線

總而言之你會有更多的responsibility和ownership

某個feature有問題 負責人是你他們就會來問你

根據公司政策你可能也會需要加入on-call 雖然很多人可能會問前端的oncall要做什麼

也會因為公司的制度你或許會開始當其他人的mentor

技術領域方面你因為之前的種種經驗會知道很多不同的做事方式或是新的pattern

你可以幫忙評估什麼樣的場合可以用什麼樣的pattern

用你所知道的技術和domain knowledge去不光是幫忙做code review也幫忙做business和engineering之間的協調

然後因為你是senior了 code quality幾乎會自然而然的由你來幫忙決定和維護

大家會自然而然的以你為準 採納你的意見

若senior開始放鬆了 quality大概就直接下去了

可能開始performance越來越差了 測試開始不寫了

雜亂的code開始被merge了

這些總總不能說都是senior的責任但senior肯定有疏忽

概括總結就是

作為senior你會有更多的responsibility

你會有更多展現自己領導力的時候

和用自己的經驗才確保code quality

Staff

我們公司是有staff和senior staff不過就一起講吧

比喻為你知道繩子是怎麼製作的還了解各種不同的繩子

面試方面除了coding外會更加注重在你團隊能力 領導能力 和比較大方向的系統設計

我曾經被問過假設這裡有個舊的系統我們要換到這個新的系統

我會怎麼做

這很open ended而且也沒有所謂的一個正確答案也是一個Staff以後工作上會遇到的事情

工作上你會有project是需要跨組的而不完全只侷限在自己的組裡

可能會有個feature或是migration需要很多不同的組一起做而Staff就需要幫忙協調和決定這技術的大方向

這時候的project其實不會像還是SWE 1的時候那麼的比較有detail

會需要你去釐清為何要做這些事情

或是某個workflow其實可以更好而Staff就需要幫忙評估和決定能怎麼做

其實這個職位除非公司規模比較大或是比較注重工程文化

要不然這個和下一個Principal應該都很少見

Principal

比喻為你發明了繩子

面試方面和工作方面其實和Staff有點像

但scope會比Staff大很多

一間公司Principal Engineer可能才幾個人

管的東西可能是一個或多個不同的系統設計

你的影響力不侷限於你的組而可能是整個公司的

加入今天有個人要把GraphQL帶進公司說服大家federation是多好的東西可以幫助不同的team一起合作

這種能影響整個公司工程運作的人通常是Principal Engineer

不過這當然是看公司規模

同樣的技術在不同規模下所需要考慮到的東西都不一樣

Principal 上面還有一個叫Distinguished

這職位大概全公司就一個人

這種神級別的人物我也不清楚他們具體在做什麼

如果你喜歡這內容的話幫我在 Twitter 和 Threads 上面分享給其他正在前端這條路上努力的朋友們,也別忘了訂閱我們電子報收到第一手消息喔 🚀