軟體工程師的職涯路徑概覽

2024年12月20日

💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容

過去有不少讀者提問一些職涯發展的問題,在跟讀者們聊的過程中,發現有部分讀者對於工程師的職涯發展路徑有一些困惑。因此,希望透過這篇主題文,概覽式地解說業界常見的工程師職涯發展路徑。

特別注意,軟體工程師的職涯,可以有很多發展方向,甚至可以不用侷限在工程師這個職位,例如可以轉去做產品經理 (PM),或者技術專案經理 (TP),甚至過去看過不少工程師轉去行銷或銷售職位,也發展很好的案例。但本文會主要聚焦在,如果你決定要持續在工程師的職位上發展,可以有哪些不同的發展方向。

工程師的職涯框架

當談到工程師的職涯框架,就不能不提 Dropbox 公開的 《Dropbox Engineering Career Framework》。之所以這樣說,是因為過去這類職涯框架,雖然在各大公司行之有年,但並沒有在業界與社群中流傳,而過去 Dropbox 公開後,才有了在社群中廣泛流通的版本。

雖然在那之後,有許多公司也都公開自己的版本,但當大家談到這類資源時,第一個會想到的還是 Dropbox 公開的。事實上,目前業界在這類職涯框架的訂定上,有越來越收斂的趨勢。換句話說,雖然每間公司的細節會不同,但是多半在概念上是互通的。

因此,本文所寫的內容,雖然不必然會跟你待過的公司一模一樣,但是從概念上來看,應該都會是通用的。

通則上來說,軟體工程師的職涯,會是在成為資深工程師開始,會有一個分流。換句話說,在初階 (junior) 與中階 (mid-level) 的階段,基本上都會是做為個人貢獻者 (Individual Contributor,也就是大家很常會聽到的 IC),接下來我們會用工程師來指稱這個路線。

所謂的工程師,是對比工程經理 (Engineering Manager) 這個路線;前者會專注在技術,後者則會是專注在人。工程師路線的頂點會是一間公司的技術長 (CTO),而管人路線的頂點會是一間公司的工程副總 (VP of Engineering)。

你可能會問,技術長跟工程副總在做的事情,有什麼差別呢? Meta 的工程副總 James Everingham 曾經寫過一篇貼文分享兩者的差異。

他提到當年在 Instagram 時,技術長負責技術願景、技術發展路徑、研究最新的技術、跑實驗、與產品端共同制定計劃;而他則是負責流程、績效、職涯成長、招聘,以及確保團隊有使用最佳實踐。

技術長與工程副總彼此合作,但是當團隊中的人遇到問題時,不同的問題需要找不同人。舉例來說,如果是團隊想要增加人手、團隊成員間有衝突,會需要找工程副總;而如果要展開一個新項目需要人給架構面的輸入、想要實驗一個新技術需要回饋,則是要找技術長。

如果要對應職級,兩者的路徑分別會是有以下階段

  • 初階工程師 (junior software engineer)
  • 中階工程師 (mid-level software engineer)
  • 資深工程師 (senior software engineer) / 工程經理 (engineering manager)
  • 主任工程師 (staff software engineer) / 資深工程經理 (senior engineering manager)
  • 首席工程師 (principal software engineer) / 工程總監 (engineering director)
  • 資深首席工程師 (senior principal software engineer) / 資深工程總監 (senior engineering director)
  • 傑出工程師 (distinguished software engineer) / 工程副總 (VP of engineering)
  • 技術長 (CTO) / 資深工程副總 (SVP of engineering)

備註:以上僅為概要式的以職級比對,不同公司可能會有不同的職級對照、職位稱呼

不同的職級,有什麼區別?

在大致了解工程師可以有什麼樣的職涯路徑,以及工程師與工程經理的差異後,接著我們拉回從最初階的工程師,一路到開始分流的資深工程師與工程經理,這些不同的職級,具體上有什麼差別?

我們會從技術 (technical excellence)、方向 (direction)、團隊 (team)、商業影響力 (business impact) 三個角度來切入。不同公司使用的詞彙可能不一樣,但從概念來看,影響能否往上走的,最主要為是這些因素 (當然,與公司文化的契合也是,但由於每間公司的文化不同,這邊就不展開這面向)。

具體來說,這四個角度分別衡量以下的內容

  • 技術:衡量你的系統設計、程式碼品質、對團隊與公司做出的技術面優化貢獻等
  • 方向:衡量你的策略思考、長期願景能力。具體來說,會看你的目標設定能力、排定優先順序的能力,例如你是否都做重要的事,而不是做很多但不重要的事
  • 團隊:衡量你對團隊協作面的貢獻,例如有沒有協助指導他人、有沒有在別人需要時跳出來幫忙、有沒有促成團隊正向的文化
  • 商業影響力:衡量你的產出,對於團隊與公司要達成的目標,帶來多少貢獻。如果是做產品開發,會看你的產出對於終端使用者的影響;如果是做基礎設施,則會看你的產出幫助到其他工程師多少

初階工程師

  • 技術:能在資深工程師指導下,開發好被交派的功能,負責的範圍會是在 2 週內能完成的。不會被預期要做複雜的系統設計,但會被預期寫出高品質的程式碼
  • 方向:能在資深工程師的協助下,排定好優先順序,且會專注在重要的事情上。
  • 團隊:會參與技術評審、程式碼審查,,在最開始不會被預期能貢獻太多,但隨著加入團隊的時間變多,也會被預期有所貢獻。此外,會被預期能協助新加入的實習生
  • 商業影響力:能貢獻到團隊要完成的目標上

中階工程師

  • 技術:能在沒有資深工程師的協助下,獨立完成開發,負責的範圍會是一季 (3 個月) 內能完成的。會被預期做有一定複雜度的系統設計,程式碼面不僅要維持高品質,還會被預期主動改進程式碼庫、幫忙做程式碼審查 (code review)
  • 方向:拆解被分派到的專案,成多個子任務,並設定合理的時程,並時時與利害關係人更新進度,確保專案能被順利完成。
  • 團隊:協助指導團隊中的初階工程師,且開始能有跨部門 (cross-functional,俗稱 XFN) 的協作
  • 商業影響力:具備產品思維,知道什麼對終端使用者好,且會主動去追相對應的指標,確保開發出的成果對指標有所貢獻。當成果不如預期時,也會主動去追原因出在哪,並提出改善的方案

資深工程師

  • 技術:在系統設計與程式碼品質,都能達到帶領團隊的層級,舉例來說,如果只是自己重構和清理程式碼,是屬於中階工程師的等級。而資深的等級則是需要,更進一步帶領團隊來共同優化程式碼。負責的專案是以半年度 (6 個月) 為單位的大型專案,且會是當別人有技術相關問題時,第一個會找的人。
  • 方向:設定團隊等級的技術方向,甚至開始做到跨團隊層級的方向設定。能夠辨別做什麼東西有影響力,並帶領團隊往該方向前進。與中階工程師的差異在於主動性,中階工程師仍屬於被分配專案,但資深工程師則需要進一步推動團隊規劃,並建立多個中到大型功能的專案路徑圖
  • 團隊:有效與工程經理協作,讓工程經理知道什麼重要,以幫忙爭取資源。同時協助指導團隊的初階、中階工程師在技術面的成長,例如透過技術評審、程式碼審查的回饋來協助其他工程師成長
  • 商業影響力:總是會把終端使用者需求放在腦中,能帶著產品思維,來確保技術決策有對終端使用者的影響力。當沒能達成預期指標,能迅速辨別原因,並帶領團隊一同改善

從上面的描述可以看出

  • 初階工程師是在有他人協助下能順利完成任務
  • 中階工程師是可以獨立完成被交付的任務
  • 資深工程師則是不僅能完成,還能協助團隊中的其他人把任務做更好

工程經理

  • 技術:在技術設計上給予回饋,確保團隊能有高品質的技術設計,確保該考量到的面向都沒有遺漏;同時,能預判技術設計有的潛在風險,並確保團隊有相對應的解決方案
  • 方向:能夠發掘機會點,並幫助團隊爭取到更大範疇的專案,且能確保團隊不受瑣事分心,能專注在最重要的事情上
  • 團隊:能獨立帶領一個團隊,打造健康的團隊文化、高效率的協作流程,同時協助個別團隊成員發展出理想的職涯。能預判團隊的需求,提前完成調度支援、跨團隊協調、招募人力等事項
  • 商業影響力:清楚知曉公司層級的目標,並確保團隊順利交付成果,同時確保所交付的成果,能夠達到預期的商業成果

如上面提到,在資深工程師與工程經理後,還有能繼續往上走的職級,但本文暫時不展開,有興趣的人,推薦可以看文末的各公司的框架,來進一步瞭解再往上的職級,具體有什麼差別。

閱讀更多

如果你對「工程師的職涯路徑概覽」這主題感興趣,我們在 E+ 有更深入的討論。有興趣的讀者,歡迎加入 E+ 成長計畫

本文為 E+ 成長計畫的深度內容,截取段落開放免費閱讀。歡迎加入 E+ 成長計畫閱讀完整版本 (點此了解 E+ 的詳細介紹)。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們