在電商產業做八年工程師的心路歷程

前言

先介紹一下自己,沒顯赫的家世,非名校畢業,本科資工系成績普通,對學習技術高度興趣,程度大概是大學時期把學校圖書館軟體開發有關的書都借回家翻過一遍的程度,從大二開始在班導研究室開發一些教學相關系統跟做專題參加比賽,大學畢業後直升同校資工所,服完兵役以後,第一份工作找到一份成立不到兩年的新創電商,加入的時候是第三位工程師,在同一個集團工作約八年,近兩年開始接管理職,到最近集團公司進行整併,整併完整個工程團隊約 30 人,由於個人背景一般,所以這段職涯經驗應該可以給大部分的人參考

工作選擇

因為在學校的開發經歷,比較熟悉 Web 開發,所以偏好選擇網路相關產業,在那個年代台灣網路新創剛開始興盛,符合我期待且有職缺的公司也不太多,所以投了幾間不同產業的公司 最後的決定標準是該公司的發展跟產業狀況,有點像是投資一間公司的股票,新創公司當下的規模不大,但是發展的延展性比較高,公司當下可能被市場低估

而我在畢業當下自認在取得大公司的工作機會上沒有特別優勢,因為第一份工作也比較有時間能承擔高風險,所以就選擇了電商產業的新創,且開發團隊規模還不大,我加入後不包含主管也只有兩個工程師,而公司也在創立沒多久雖然還沒獲利的情況下在市場上取得了一點成績(該年營收約 3 億),所以不期待公司有完整的制度,但是相對發揮的空間跟個人在團隊的影響力上就大很多 如果以我現在經驗回到當下,決定工作選擇最重要的指標是技術最有成長性的工作,但是這個指標在面試的時候很難看出來,算是一個落後指標,會更直接相關的是個人的心態、主管的態度、公司的文化、產業的狀況

特別想提的一點是薪資跟個人成長其實不見得有直接相關,反而可能是一個干擾因素,我在求職的當下有點困擾,不確定是不是沒有努力談判最佳化自己的薪資,但是回頭來看因為不刻意追求,所以相對會有比較多機會拿到 offer 能夠評估跟選擇,而人力市場雖然反應速度沒有很快,但最終你的個人成長跟價值還是高機率可以反應回薪資上的,尤其是軟體工程師的市場偏向需求大於供給的狀況,但是如果你有能力談判到一個好薪資又有成長性的工作當然是更好

總結當初選擇第一份工作的幾個考量點

  • 1. 新創公司當下規模不大,但是發展的延展性比較高,公司當下可能被市場低估
  • 2. 畢業當下的條件在大公司裡面得不到太多競爭上的優勢
  • 3. 因為是人生的第一份工作,所以有很多承擔風險的空間,較有額外收穫的可能性

結果論是公司在幾年後營收成長到年營業額五十億,我也因此有幸經歷了一段奇妙的探險歷程,累積了中大型交易規模電商網站的完整工程知識,了解怎麼處理上千人同時在線的流量,累積了設計有擴展性的基礎設施的架構的經驗,通常這些知識在大公司都是分散在不同部門或職位當中,只有在成長中的小團隊才有機會讓少數人有這麼大的參與度跟嘗試錯誤的機會。

承擔責任,技術成長

剛開始工作的時候,其實沒有太多想法,比較是被分派任務,就嘗試去解決,比較重要的是,自己有沒有在思考每件事,有什麼更快更有效的方式做好,由於每間公司都有自己的哲學,我在這份工作裡面學到的哲學是,用最簡單快速的方式做出能產生商業價值的產品,其他都可以取捨,這在學校開發專案的思維完全不一樣,開始以不只是以開發程式的角度在思考目標

工作過程中有一個 mentor 可以適時的指引自己的方向也很有幫助,自己工作的過程總有一些盲點,通常會用自己認為最快速聰明的開發邏輯可以解決,但是換一個角度來看,就會發現其實有更簡單十倍的方式可以透過溝通協調來解決。適時的被打開盲點,會讓自己的視野不停有新的刺激 工作之中有一個重點就是,不要排斥學習與碰觸任何你不熟悉的知識,用開放的心胸面對所有問題

別人遇到什麼狀況,主動出擊協助解決,不斷地承擔責任的過程中,最後你就會發現別人有狀況都會想找你幫忙,就逐漸地成為一個可被依賴與信賴的人,這樣你就會比別人有更多機會承擔更多責任面對更多挑戰,這樣的心態對後續的職涯發展上有不小的幫助

工作了幾年以後,就會逐漸開始發現,當你不主動的管理自己的時間的時候,工作與需求就會接踵而來,而通常你懶惰去面對時間管理的問題,你的時間就會被人支配,而在時間被支配的情況下,保證不是對你或團隊最有效率的工作方式,因為不會有別人可以站在技術的角度幫你評估每件工作的代價,甚至也不是每個提出需求的人都了解自己的需求能創造的價值,所以當你不支配時間,你的時間就會被用最沒有效率的方式利用,久而久之會對自己的職涯與成長造成很大的傷害,簡單一句溝通詢問別人需求所期待產生的價值是什麼,你就多了超多資訊可以幫助你釐清事情的輕重緩急

總結當你用開放的心胸面對所有挑戰,主動承擔各種責任,這些責任的成功,就會轉換成你成長的來源,不論是個人技術或是團隊,都會有所助益,且隨時注意自己是不是用最聰明有效率的方式分配時間跟工作。

迷惘與轉折

雖然我自認還算是個正面思考的人,但是工作開始的前幾年,每一年都會不停質疑自己,是不是原地踏步了,感覺開始重複的工作內容中,我到底獲得了什麼,成長了多少,這是一個蠻痛苦的過程,因為作為一個職場新鮮人,你沒有辦法估計未來工作的三十年,你會走往何處,你目前是否在用正確的方式在前進,到底有沒有產生踏入職場時想產生的價值

如果以當下年紀可以理解的事物來比喻,大概就像是準備大學考試的過程,每天唸書覺得很難熬,或小時候朋友跟你絕交之類的,在當下覺得很驚天動地的大事,過了幾年回頭來看都會覺得是一件小事,因為當下你的人生還沒有打開全地圖的視野,不曉得這場開什麼地形,所以最簡單的方式就是打開履歷到市場找找工作,或上網多看看其他產業在做什麼討論什麼,也了解你這段時間累積的專業在市場上價值有沒有增加,也可以找工作比較久的前輩或主管聊聊當下的狀態,請他們提供一些建議跟不同視野的觀點,絕大部分這些開視野的嘗試,都會有很實質的回饋

有時候爭取在部門內嘗試不同的工作內容,也會跳脫出這種迷惘的狀態,例如當年智慧型手機與行動網路正在起飛的那段時間,我們團隊就在嘗試導入 App,當下也臨時轉調去做了一段時間 Android 開發直到全職 Android RD 加入,前幾年 AI 技術很火熱的那段時間,也因緣際會的開始嘗試做些 Data Engineering,也同時帶了一位 DevOps 加入團隊,逐步讓開發團隊有更完整的開發流程跟機制,後來這些在迷惘過程中嘗試過的工作,最後都變成了獨立的部門,我也有幸得到更多不同專業的實務經驗跟視野

帶領團隊

當你以個人的立場承擔夠多責任以後,當團隊取得成功,團隊自然就會擴大,當你是足夠可信賴的人以後,團隊擴大的過程中,你就有機會扮演 mentor 的角色,去讓你自己的心態與工作方式以更規模化的影響其他人,如果你認真思考帶人對你的幫助的時候,你會發現其實你是開始承擔團隊的責任,不只是個人的工作責任了。

而自己不論作為什麼角色,都要嘗試換位思考,想一想自己的主管是用什麼方式在評斷工作,很多時候就會得到很多啟發,例如大家很容易抱怨自己主管多糟,但是當你自己作為該角色的時候,你能確保自己也能做到完美嗎?那更實際的是你怎麼站在跟他同一陣線讓事情更好地被完成,當你站在跟他同一陣線幫他達成目標的時候,你自然就會成為他心中最重要的夥伴,也解決了你想要解決的問題

而實際開始做為主管的角色以後,其實不會覺得自己變得多位高權重,而是責任轉變,人的跟技術的問題變得更多,自然強迫開始思考,團隊該怎麼用更有效率的方式做事,來讓自己不要這麼辛苦,每個人是否都有發揮最大的價值,該怎麼協助大家成長融入文化跟團隊,就變得日常煩惱的一部分(包含下班時間T_T),換位思考的訓練固然有幫助,但是爭取到每一個機會去承擔不曾承擔的責任,壓力會加速成長的過程

除了讓團隊效率最大化以外,其實另外一個面向是正確的定義自己團隊的責任,有時候 PM 跟 RD 之間的責任有高度的重疊,跨部門之間的合作方式跟責任,就會隨著工作方式逐漸變形,做為主管的角色就是要思考怎麼定義團隊責任跟守備範圍來最大化團隊的價值,例如當 PM 把需求都轉化成規格交付給 RD 開發以後,作為 RD 要怎麼對產品負責?會不會認為所有規格錯誤都是 PM 的責任呢?這在組織變大的情況下,很容易會發展成這種模式,所以主管的責任就是努力建立讓 RD 承擔責任的環境,以上是這兩年管理職的粗淺心得,不見得適用所有情境

回歸初心

當初工作最想得到的回報,可能是對社會能有什麼貢獻,後來發現做大部分的工作,都會對社會產生一些價值,所以作為個人,只能追求自己的價值與影響力最大化,作為一個工程師在團隊裡面可以有很大的貢獻,但是你開始站在團隊的思維思考以後,你在追求的不只是讓自己成長,而是幫助團隊成長,整個團隊產生的價值,最後都可以跟你產生的價值有所連結,個人的價值才會沒有邊界的延伸

那追求個人成長重要嗎?當然重要,要幫自己設計一個好的職涯成長的途徑,所有的工作結果都盡可能地累積堆疊再一起,你所能產生的價值才會持續線性的增加,但如果你開始更著重在怎麼幫助團隊成功跟成長,你的團隊所帶來的價值跟你個人來比,是有可能指數增加的 補充一個小插曲,我在一度迷惘的過程中,為了讓自己覺得可以對社會有所貢獻,就參與了 g0v 的社群活動,雖然不太會跟人組隊解決問題,也是自己刻了一個讓標案查詢可以更公開的系統,最後每個月也有近三十萬個使用者使用,這有一段心得紀錄在我的另外一篇文章 https://lihi.tv/QXxIM

片尾小工商

最後因為我們工程團隊目前在大舉招募中,有約莫九個職缺,Frontend、Backend、DevOps 都有超過一個缺,如果願意跟我們一起嘗試建立理想中的工作文化的團隊,目前團隊正在嘗試調整轉型,規模還容許大家去嘗試跟挑戰各種不限職位的技術議題,團隊設計也是有超多機會讓你承擔責任,討論需求,參與設計出更好產品,上述個人與團隊成長的過程還是在持續發生中,如果有興趣一起參與,優點跟缺點都是目前公司市場表現處在一個不見得很理想的狀態,正在大規模的調整策略,但是也因為疫情因素,很大幅度的短期內實體零售正在轉往網路渠道,有效率的網路銷售可以解決大家在防疫生活上的困擾,你也有機會參與這間公司轉型的過程

本文原始發表於 PTT Soft_job

Macbook air 2020 M1 開發環境實測

上一部筆電是二手的 2012 macbook air,最近電池用一個小時就會沒電,已經受不了惹,看了一些最近網路ㄉ實測,因為不喜歡 touch bar,所以最後就衝了 macbook air 512GB 16GB,跟八年前的電腦比,體感真的是升天,鍵盤也是又回到我最喜歡的觸感,螢幕跟喇叭也大升級🥰

因為這次架構是全新的 arm cpu,所以就玩樂性的把平常會開發跟不會開發的東西都裝了一下實測,幾乎都會動,記錄一下要怎麼跳過一些坑

Continue reading…

開放政府標案專案流量爆發的一年記錄與啟發

從 2014 年開發了開放政府標案到現在已經過了超過五年了,這個專案跟著我開始工作到現在,雖然不算達成當初開發專案最初的目的,但是期間挹注了許多讓我個人成長的養分,而在這兩年,這個網站的月流量也成長了八倍,全都來自自然流量,變成一個月有超過二十萬流量的專案,這個成長過程跟我在工作的體驗很一致,無法細數你每天日常做對了哪些事,但重點是要不停的思考跟前進

所以寫篇文章紀念這些年的開放標案演進與我的學習的記錄,跟 side project 亂選技術對工作的幫助,跟作為一個專案的 PM 的角色思考的方式如何轉變。

Continue reading…

電商站內搜尋筆記,以 elasticsearch 實踐

今年因為營運的目標,對搜尋的準確度要求越來越高,實際上要面對的商品數指數增加,所以在越來越多雜訊的情況下,搜尋的挑戰就變得更大了,一路下來認知到搜尋能努力的方向越來越多,所以就想寫一篇文來紀錄一下做了哪些改進,大致上能努力的方向就是中文斷詞、自訂排序、tag、Learning2rank..

Continue reading…

MongoDB 透過 lookup pipeline 實踐 Left Join

很久以前寫過一篇基本的 mongodb group 語法的基本介紹,在這些年間也持續跟 mongodb 持續纏鬥無法自拔…,對他又愛又恨,雖然超想拔掉他,但是從用途/功能性上卻無法找到他的取代品。

如今已經面臨要開始用他來 JOIN 了,感覺這毒是越吸越重了..XD 讓我們繼續看下去..

我們今天試著從 3.2 開始 aggregate 新支援的語法 $lookup 搭配 3.6 開始的 lookup pipeline 來解決我們需要 LEFT JOIN 的問題。

Continue reading…