「首席工程師」首席(Principal )工程師修鍊之道
- 2019 年 10 月 25 日
- 筆記

在過去的幾年裡,Grab從一家小的初創公司發展成為東南亞最大的科技公司之一。隨着公司的發展,微服務、功能和團隊的數量也大幅增長。在寫這篇博客的時候,我們大約有350個微服務在支持我們的超級應用。
一個偉大的工程團隊是我們成功的關鍵組成部分。作為一名工程師,你面前有兩條職業道路:個人貢獻者角色,或者管理角色。雖然管理角色通常更容易理解,但本文澄清了在Grab擔任首席工程師意味着什麼,Grab是我們的工程職業階梯中的最高級別之一。

提高質量
「你們為自己的技術家族樹立了卓越的工程標準。您的架構在效率、穩定性、可擴展性、可測試性和隨時間演進的能力方面堪稱典範。您的軟件在出現故障時是健壯的,可伸縮的,並且具有成本效益。您的編碼實踐在代碼組織、清晰、簡單、錯誤處理和文檔方面堪稱典範。你解決本質上困難的問題,在需要的時候獲取專業知識。你把複雜的問題分解成簡單的解決方案。——Grab的工程職業階梯
那麼,首席工程師是做什麼的呢?隨着您的職業生涯從初級到高級再到主管工程師,我們的責任越來越大;您管理越來越大的系統。例如,初級工程師可能管理微服務的特定組件。高級工程師的任務是設計和操作整個微服務或產品。而首席工程師通常關注團隊級別的體系結構。
首席工程師級別類似於高級經理,你負責整個子組織的架構,而不是間接管理人員(經理的經理),這被稱為技術家族/平台。這些技術家族通常有超過50名工程師,分佈在多個團隊中,作為一個小公司,擁有自己的企業主、設計師、產品經理等。
有挑戰性的項目
「你承擔了可能需要多個團隊共同完成的項目的工程所有權;您可以劃分職責,這樣每個團隊都可以獨立工作,並將系統集成為一個整體。你的項目經常跨越團隊、技術家族、平台甚至研發中心的邊界。你徵求不同的意見,保持開放的心態。你善於建立共識。——Grab的工程職業階梯
作為首席工程師,你的工作是解決更大的問題,並將一些模糊的問題轉化為一系列可操作的項目。您可能會面臨一個大問題,如「提高Grab運輸系統的效率和互操作性」。「你需要了解問題所在、業務影響,並考慮如何改進。它可能需要你設計新的系統,改變現有的系統,了解所涉及的成本,並召集合適的人來實現它。
獨自解決這樣一個問題幾乎是不可能的。你必須與其他經理和工程師一起工作,作為一個團隊來實現它。通過給你的領導/高級工程師一個明確的目標來幫助他們設計正確的系統,但是讓他們負責系統級的架構。
你還需要和經理們一起工作,建議他們把事情做好,把正確的事情放在團隊的優先位置。雖然您不需要精通項目管理和敏捷方法,但您確實需要能夠提前與您的團隊進行計劃,並了解項目或遷移將花費多少時間。
一個技術家族可以很容易地擁有20多個微服務。您需要很好地理解它們的功能需求和交互。這很有挑戰性,因為學習新東西總是「不舒服」,而且需要時間。你必須接觸工程師、產品經理和數據科學家,最好是面對面地建立同理心。不斷地問問題,試着理解事物是如何運作的。您還需要閱讀現有的文檔及其代碼。
技術的所有權
「你們是對我們的架構和基礎設施做出重大技術貢獻的源頭。您將獲得由一個或多個團隊構建的軟件的安全性、性能、可用性和操作方面的設計和質量的技術所有權。您可以根據項目和團隊的需要,確定您的時間需要花在什麼地方,在編碼、設計和體系結構之間進行轉換。您交付軟件的方式允許團隊進行自助服務,提供清晰的採用/遷移路徑。——Grab的工程職業階梯
作為首席工程師,你要與技術家族的工程主管和經理一起工作,全面提高系統的質量。通常,沒有人告訴你需要做什麼。你需要發現差距,提高差距,並不斷改進系統。
你還需要學習如何更好地管理自己的時間,這樣你才能有效地確定優先級。這可以歸結為了解自己的長處和短處。例如,如果您確實擅長構建分佈式系統,但是對信息安全方面最新和最偉大的設計一無所知,那麼請在本次會議中找到合適的InfoSec工程師,並考慮跳過它。不要試圖一次做所有的事情,也不要參加每一次被邀請的會議——你仍然需要檢查代碼、設計和關注,所以要相應地計劃。
您還需要了解您的決策的業務影響。例如,如果你為產品特性做貢獻,你要知道這個特性對組織的影響有多大。如果你不知道,問負責的產品經理。如果你致力於一個平台特性,例如改進構建系統,你應該知道它將如何幫助你:每天為每個工程師節省30分鐘的構建時間是一個巨大的成就。
通常情況下,您必須驅動遷移,這類似於代碼重構,但是是在系統級別上,並且需要與人員進行大量協作。理解什麼是技術債務,以及如何減輕技術債務——一個好的架構可以將技術債務最小化,從而加快上市時間並幫助業務繁榮。
技術領導
你通過領導對複雜軟件和/或關鍵功能的設計評審來擴大你的影響力。你探查假設,闡明陷阱,促進共同理解。您使團隊朝着一致的體系結構策略發展。——Grab的工程職業階梯
在Grab中,我們有一個稱為RFC(徵求意見)的過程,它允許工程師提交設計和想法,供更多的觀眾討論。這一點尤其重要,因為我們的組織分佈在多個大洲,在東南亞、美國、印度和中國設有研發辦公室。雖然歡迎任何工程師對這些rfc發表意見,但首席工程師和首席工程師有責任定期對其進行審查。這將幫助您擴展現有系統的知識,並幫助其他人改進他們的設計。
溝通是你需要不斷提高的一項關鍵技能,也是許多工程師的致命弱點,他們寧願坐在自己的位置上工作,而不願與任何人交談。這對於一個初級工程師(甚至一些高級工程師)來說是完全可以的,但是對於一個首席工程師來說交流是至關重要的。讓我們將其分解為一組需要提高的特定技能。
為了把你的想法傳達給別人,你需要能夠有效地寫作。這包括了解你的聽眾,並以讀者能夠理解的方式來表達。以工程師為受眾的技術設計文檔與以產品和業務經理為受眾的設計建議的書寫方式不同。
你需要能夠公開展示和談論你正在從事的各種項目。這包括創建具有良好視覺效果的幻燈片,並將數月的工作濃縮為幾張幻燈片。學習這個的最好方法是走出去,繼續展示你的作品——隨着時間的推移,你會變得更好。
你還需要能夠在不浪費任何人時間的情況下推動會議和討論。作為一名技術領導者,你的主要職責之一是讓人們朝着同一個方向前進,並在會議中達成共識。
教學和學習
「你教育其他工程師,無論是在個人層面還是在規模上:讓工程社區跟上先進的技術問題、技術和趨勢。例如,新員工入職訓練營、實習生、特定的技能差距培訓開發,以及分享專業知識以提高其他工程師/團隊/開發中心的技術水平。」
首席工程師是技術領導者,作為領導者,你有責任指導、指導其他工程師,無論他們的水平如何。除了代碼審查之外,您還可以在您的團隊中組織辦公時間和知識共享會議,在那裡每個人都可以展示一些東西。你也可以幫助訓練營,幫助新員工跟上時代的步伐。
最重要的是,無論哪種方式適合你,你都需要堅持學習——閱讀期刊和論文、博客帖子、觀看視頻錄製的演講、參加會議、瀏覽各種開源項目。你也可以從其他的攫取者那裡學習,即使是一個初級工程師也可以教你一些東西,我們都有自己的長處和短處。不斷提高自己,不斷完善自己!
原文:https://engineering.grab.com/about-being-a-principal-engineer-at-grab
本文:https://pub.intelligentx.net/being-principal-engineer-grab