在這6個月我一直在思考幾件事,不一定都有答案,但我知道我仍在路上。
身為一個剛步入職場的工程師,要怎麼適應Work from home?
跟in-person相比,WFH看不見其他同事在做什麼。同事可能在寫code,可能在開會,可能躺在床上,可能跑出去跟朋友hangout。沒有人管你,只要完成工作就好,如果沒有在開會,沒有oncall,也不需要時時刻刻坐到電腦前。甚至可以在開會前一分鐘,在起床坐到電腦桌前面。我有時候也發現我的同事們會頂著一頭亂髮,開著視訊,用著剛睡醒的聲音,報告standup會議。
那這樣會不會都在偷懶?事情會做不完嗎?沒做事的時候會不會有anxiety?
我在一開始onboard階段,非常想彌補和組員們之間的差距,或許有一點imposter syndrome的感覺。到後來,很容易陷入不知道做什麼,只好偷懶的情況。我仍然有把被assign的事情做完,進度也都有達到預期,但我仍有很多時間可以睡午覺或是提早下班。由於在工作上有些不滿足,我下班後會讀書進修自己,或是研究一些我感興趣的技術,也會寫一些side project。這當然是好的,但短時間內不會反映到工作成效。而且有些技術,沒有長時間大量使用,很容易忘記,終至無法上手。無論如何,隔天工作時,腦袋又要切換到另一個領域上了。
回到原本的問題,我享受remote帶來的自由,但同時又渴望能夠長時間專注在工作上。所以,到後期我的答案變成,我漸漸的會做超過當前sprint規劃的tickets,超過每個sprint的capacity。但在這過程,我也開始漸漸自我懷疑,我會不會造成別人的困擾,或是我跑得太快了?
我到底是做多還是做少? Should I move faster or slower?
自從我開始完成更多tickets後,我會不確定要不要偷懶一下。這有點矛盾,但實際上是,我越完成更多tickets,越擔憂。更多tickets,也代表著更多工作給其他組員。我也在跟manager 1:1的過程表達我的擔憂。不斷的跟整個team溝通後,我們一致認為,能做多就不要做少,但同時要注意工作質量,避免犯錯。
另外,除了完成手上的tickets,還可以fill the void,花時間在別人身上。Poke around,看看別人在做什麼。可以從jira tickets, design doc, coda reports, PR reviews, slack threads中,了解別人在做的事情,為什麼要做這件事,是為了達到什麼目的,有誰是stakeholders。好處是,有一天要support同一個project時,才知道要怎麼做,或是知道要問誰。在這過程中,也會有機會讓自己發揮影響力,也會對自己的績效有好影響。
怎麼從L3升到L4,要多久?
要多久很不一定,但從網路上資料,3-5年是保守估計。實際上,大部分人在大公司(大公司數據多),會花1-2年。
以我們公司,L4要做到的事情是:
- Deliver the full development cycle from design, development, deploy, test, ...
- Impact on others, such as knowledge sharing and mentoring
- Work cross-functionally
因為我也才六個月,最近才開始,更明確定義我要達到的metric。但最重要的是,一定要趁早跟manager表達想要升職的慾望,寫出明確的metric。以下是我認為可以為1:1先開始做的事情:
- 準備每次1:1 topics
- 表達想要升職
- 定義明確的metrics (可以用來說我完成了L4的什麼條件,符合L4的期待,應該給我升職)
好的manager可以在職涯上幫助很多,但只有自己需要對自己的職涯負責,所以每一次的1:1最好由自己主導,職涯發展也應該由自己規劃。
追求Breadth or Depth?
說完Career growth,回到工作內容上。直接說我的看法,一開始不可能往depth發展。當每次研究某個技術,或是在工作上implement出來後,都會發現,自己會的實在太少。即使覺得自己變得很厲害,知道更多東西後,也仍然在組織裡有另外一個人在這個領域上花了更多時間和心血,比自己懂的更多,更不用說外面的世界了。舉個例子,我自己是IoT Platform Team,我在這六個月花了大量的時間在IoT的security方面,像是IoT registration和IoT authentication。然而,即使花了這麼多時間在這方面,還是有個C同事和我們N老大懂的更多。更不用說,實際上在這個領域,還有更深的知識。而且,一開始只往depth發展,很容易讓自己的技能變得狹窄,會的東西不多,能做的事情也就少。
不過,也不是說breadth是剩下來的選擇。一開始追求breadth是對自己也是對公司很多好處。對公司而言,你涵蓋的範圍越多,可以support的東西也就越多,無論是technology或是公司的系統,都可以很快地幫助別人,或是完成額外的功能。這或許也是為什麼大部分一開始都是先完成小功能,修修bug。對自己而言,還沒實際做過前,很難判斷說自己到底喜歡什麼,以後想往哪個方向發展,想成為哪一種工程師。等到可以玩的大致都玩過一遍後,就可以慢慢往depth發展了。
什麼是Platform Engineer?
每家公司的對platform engineering的定義都不一樣,也沒有一個明確的定義。對一個junior而言,更是難以理解的詞彙,甚至我有時候都不知道要怎麼解釋給同屆同年齡的工程師朋友,尤其在台灣超級難看到platform engineer。對一個剛步入職場的菜鳥,大概會想把我們從frontend和backend之中分出一個來,硬要分得話確實也是偏向backend。如果你google搜尋platform engineer,可能很多人會提到devops和sre。先說對我而言,devops就是協助developer把feature放到不同環境甚至production,sre就是確保production乖乖的。那platform是什麼?以我在公司看到的而言,platform是提供工具和管理工具的組織,雜一點的甚至包括devops和sre在內。除此之外,還有infra, devprod, dba...了。對developer而言,他們不需要知道和管理底層使用的工具,例如DB, Container, distributed systems, internal tools, CICD, ... 對他們而言就是business logic和product而已,我們的工作就是讓他們輕鬆一點。
近一步討論IoT Platform做什麼的。我們是embedded team和backend team的橋樑,專門提供cloud-side的pipeline,同時提供部分CICD的automation,大致上的pipeline我們都不在乎business logic,畢竟我們提供的是infra,其他組會使用接口來使用這些tool。
我學到什麼?
Technical
以技術而言,我學到大量AWS方面的服務,包括AWS IoT, AWS S3, AWS SQS, AWS SNS, AWS Lambda, AWS DynamoDB, AWS CloudWatch, AWS IAM, AWS PCA等。從上面可以看出,是event-driven的pipeline,畢竟是IoT,所以相關的概念也都有持續在精進。在管理和開發上,遵循著Infrastructure as Code,所以也學到了Terraform,和相關的工具Terragrunt, Atlantis。
除此之外,也持續學習和使用Golang和Rails,以及其兩者周圍生態的工具,這裡就不贅述。還有,除了常見的Rest API,還有機會摸一下gRPC,是個好東西!
目前還沒有在CICD和Container上有太多琢磨,希望在剩下的今年有這個機會。
Soft
工程師的工作需要大量的溝通,不論是對組內或組外的溝通都很重要且大量。組內溝通可以確保大家都在同一條船上,可以互相協助。例如:
- 有不懂得可以問, 有需要幫忙的task可以主動講
- 需要PTO可以請人幫忙cover自己oncall
- 討論職涯 (這個可能要看組內的dynamic)
- 有想要做的ticket可以和組內討論可不可以你做
- 共同決定組的發展,像是: team culture, team size, team activity, team roadmap
組外溝通最常見的就是跟stakeholders,常規的溝通才可以確保,大家都了解需求。另外,stakeholders可能是你升遷的其中一個原因,所以對他們好一點哈哈。
有什麼我可以做得更好?
Keep the conversation public when working with others
這是我家老大給我的feedback。我當時的問題是,我會私下把事情做完,如果是跟別人合作,討論的內容也會在private message裡面。這對於管理階層或是組裡其他人,他們會不知道我的進度,甚至可能會認為我沒有在做事,可能會擔心我無法meet deadline。而解決辦法就是,把所有過程都記錄下來,甚至留在slack thread裡面,這包括了跟他人的討論、incident actions、deployment logs。讓所有事都暴露在陽光底下,讓所有人都知道發生什麼事。
Fill the void by understanding what others are doing
這個在前面有提到,這裡想要做點延伸,來思考為什麼要了解別人在做什麼,不只是組內,甚至到組外。除了未來可能要互相幫助,以及每個team行進的方向應該要一致,或是符合公司的priority,還有就是發掘機會了。到一定程度的工程師或是員工,都可以在一切不清楚的情況下,決定著組的未來,提早準備為公司著想。所以不斷做事以外,還要不停思考,讓自己可以成為主導公司或組裡的更多決策。
Be more focus in the meetings and involved in the discussion
我為了想趕快完成tickets,然後接著做更多的tickets,我有時候會在會議的時候開始在旁邊做自己的事。或是沒有完全投入到討論之中,這裡說的討論,可能是線上也可能是線下asynchronous的,也可能是正式的會議,或是非正式的co-working hours。如果跟組織detached是非常危險的,不了解priority可能會讓自己辛苦的事情都白費了。更不用說不清楚別人在說什麼和做什麼,這感覺是會很差的。
我到底在追求什麼?
進一步修飾這個問題,應該是我五年前左右做了決定,來到矽谷讀大學,是為了什麼?在兩三年前,我仍然是抱持著來矽谷學習創業,甚至找到志同道合的朋友一起創業。到近兩年,我越來越發現,我沒有什麼能跟別人比得上的好點子,在這裏的點子很多,不論好點子或爛點子,而且迭代非常快,一家一家公司倒閉,一家一家公司上市或被收購,還記得我第一份工作是在咖啡廳寫ios app,完全沒pay,一群人瞎胡弄,雖然找了客戶,最後也是沒有成功。到近期,我漸漸把目標放到成為一位頂尖的Software Engineer,像是那種有自己的部落格,會發發twitter,參加conference的talk,平時也參與open source contribution,又或者可以在大公司開發開源的大型專案。
然而,在這過程,我也常常被身邊的人影響,除了系上的同學以外(灣區有大量的immigrant和留學生),同溫層中的台灣人中國人印度人,許多人來讀master,甚至轉系轉專業,每個人為的就是進到FAANG工作,也就是這裡有些人說的「上岸」。想進大公司的原因很簡單,薪水高福利好,Work Life Balance也不錯(除了某A家),我剛來到灣區時,也想進大公司工作,感覺裡面很多厲害的人,但隨著我問到越來越多人在裡面的工作以後,發現在大公司,就要知道有可能自己只會是個小螺絲釘,有許多技術不一定帶的出來,因為有很多in-house的工具。當然,大公司也會有更嚴謹的流程和規範,對工作的基礎一定會很有幫助,更不用說大公司的經歷就是在履歷上蓋個合格印章了。所以,當大家都想破頭想要進到大公司時,我有時候會質疑自己為什麼要待在比較小的公司,領著比較少的錢。
直到在2021/2進到辦公室和同事一起工作後,寫出更多的code,有更多的討論和腦力激盪,才給這個問題的答案增加了更多確定性。我回顧五年前,我為了什麼來到矽谷,思考自己的初衷是什麼,如果我哪一天要回台灣了,或是哪天去別的國家工作,我會後悔有什麼事情沒有在這裡完成或嘗試的?照著我家N老大說的,寫出我到底在乎什麼,然後每次有想要離開念頭時,或不確定時,就來一一檢視,如果有很多都沒達到的話,就應該思考離開了。那對我而言,目前最重要的就是:
- 學習機會
- 這個吃公司和團隊,有沒有機會,和會不會把機會讓給你
- 成長空間/Career Growth
- Mentorship
- There is a least one person on your team who you look up to and learn from. Even better if he/she is your mentor.
- Not undervalued (self-explained)
- 對產品和技術有沒有熱情
- Flexible work time/location (remote) and flexible time off
- Team dynamic and experience or feelings
最後一點,非常含糊,很吃感覺,但簡單的說就是自己喜不喜歡現在的team。我超級喜歡現在的team,除了第二點的原因以外,我們的互動非常好。我們每天都會有一段co-working hour,雖然是已經在calendar上mark起來,但其實隨時隨地都可以call大家加入,所以私下的討論也很隨意很自由,隨時都可以進huddle或google meet來討論事情,只要大家有空和願意。除此之外就是我們很常分享一些有的沒的和講幹話,相處起來很輕鬆。雖然只有幾次in-person team bonding,但我們見面時的互動也很自然和愉快,無論是花公司的錢在SF吃吃喝喝,還是一起跑去攀岩,或聚在一起打桌遊或手機遊戲。就我所知,在其他公司或其他team,成員之前不會那麼close,所以在這點,我算是運氣很好。