技術總監與 AWS 省錢大作戰——Snapask
本篇是「我的職涯地圖:一個工程師的 20 年回顧」系列的第 9 / 12 篇。你可以從系列總覽開始閱讀,也可以直接接著看本文。
2022 年四月,我加入了 Snapask(知之有限公司),職稱是 Director of Engineering——技術總監。
上一篇提過,這個決定背後有三股力量在推:加密貨幣投資的財務破洞、接不到女兒放學的愧疚、和一個更高的職位與薪水。三個理由裡面,第三個最理性,但真正讓我下定決心的是前兩個。
為了接女兒選擇遠距工作
在那家公司的最後一段時間,我每天最有壓力的事不是寫程式,而是趕著下班去幼兒園接女兒。
每天不管工作再忙,到了五點半我就開始焦慮:等一下會不會遲到?今天有沒有塞車?路上會不會耽擱?但幾乎每一次,我到幼兒園的時候都已經六點半過後了。天已經黑了,老師把教室的燈關掉,只留門口的一盞燈。我的女兒一個人站在門口等我。
那個畫面,每一次都讓我心疼。
所以當 Snapask 提供了一個可以遠距工作的 Director of Engineering 職位時,我幾乎沒有猶豫。不是因為職稱多好聽,而是因為遠距工作意味著我可以在家裡辦公,下午四點走路去幼兒園接女兒,然後帶她回家,剩下的工作晚上再做。
那種牽著女兒的手走在放學路上的感覺,比任何升遷都讓我快樂。
軟體考古學家
加入 Snapask 的第一天,我就發現了一個巨大的問題:幾乎沒有技術文件。
原始的開發團隊經過多輪換血,每一輪都有人帶走了知識卻沒有留下文件。系統就像一座沒有地圖的古城——它在運作,但沒有人完全理解它是怎麼運作的。
我在這裡第一次自稱「軟體考古學家」。就像考古學家在遺跡中一塊一塊拼湊歷史一樣,我在程式碼中一行一行追蹤邏輯,試著理解前人的設計意圖。為什麼這個 API 要繞這麼大一圈?為什麼這張表有一個欄位永遠是空的?為什麼這段程式碼被註解掉但沒有刪除?
每一個「為什麼」的背後,可能是一個已經離職的工程師在某個深夜做出的決策,而那個決策的脈絡,隨著他的離開一起消失了。
我做的第一件事就是導入 Notion 作為團隊的知識文件管理工具,藉由每週的技術分享,慢慢累積產品知識和技術文件。這個過程很慢,但每累積一篇文件,未來的團隊就少走一段彎路。
AWS 省錢大作戰:從 100 萬到 65 萬
Snapask 的 AWS 帳單,是我看過最讓人心痛的數字:每月約 100 萬台幣。
對一家還在尋找獲利模式的公司來說,這個數字太高了。我接手後的第一個大型專案,就是 AWS 架構優化。
方法不是什麼魔法,就是扎扎實實的工程功夫。
第一步是「看清楚錢花在哪裡」。用 Terraform 和 Ansible(自動化組態管理工具,像是伺服器的「食譜」,告訴每台機器要安裝什麼、怎麼設定)梳理所有的雲端資源。你會發現很多冤枉錢:閒置的 EC2 Instance 沒有人在用但每天在收費、RDS 資料庫的 Instance Type 開太大(用跑車的引擎在送外賣)、S3 儲存的舊檔案沒設生命週期會無限累積費用、跨 Region 的資料傳輸流量在無聲無息地吃錢。
第二步是「用對的工具做對的事」。導入 GitOps (Flux2)——所有 Kubernetes 叢集的設定都存在 Git repo 裡,Flux 會自動把 Git 裡的定義同步到叢集上,確保「Git 裡寫的就是線上跑的」,沒有人可以偷偷手動改設定。用 Consul 做服務發現(讓微服務之間自動找到彼此),用 Traefik 做反向代理和負載均衡(聰明地把使用者的請求分配到不同的伺服器)。
最終成果:每月 AWS 支出從 100 萬降到 65 萬,節省了 35%。
35% 聽起來不多,但換算成每月省下 35 萬台幣,一年就是 420 萬。這筆錢可以多請兩三個工程師。這段經歷讓我深刻體會到:省錢也是一種創造價值的方式。
電商平台、DDoS、和各種挑戰
除了省錢,我在 Snapask 還領導團隊建置了一個全新的電商平台。Snapask 原本是家教媒合平台,現在要加上課程商品的購買和訂閱功能。從需求討論和規劃開始,實際參與開發提供 API 串接——這是我第一次在正式工作中用 Ruby on Rails(之前創業時碰過,但這次是大規模的商業應用)。
效能優化是另一個重頭戲:修 N+1 query(一個常見的資料庫效能殺手——你以為只查了一次資料庫,其實框架在背後偷偷查了 N 次)、圖片多尺寸處理(同一張圖要有縮圖、中圖、大圖,針對不同裝置送不同尺寸,省頻寬也省載入時間)、CDN 配置(讓全球各地的使用者都能從最近的節點取得靜態資源)。
其中一個最刺激的事件是認證簡訊被 DDoS 攻擊。有人惡意大量觸發我們的簡訊驗證 API,導致簡訊費用暴增。這種攻擊不會讓你的網站掛掉,但會讓你的帳單爆掉。
發現攻擊的那天,我在很短的時間內實作了 rate limiting、IP 封鎖、和異常偵測機制,把攻擊擋了下來。在壓力下快速做出決策和行動——這種能力是在之前的每一份工作中一點一點累積起來的。
每季裁員三分之一
但 Snapask 最讓我難忘的,不是技術上的挑戰,而是那段持續裁員的煎熬。
公司的財務狀況不好,每一季都要裁員。而且不是小規模的優化——每次裁掉大約三分之一的人。連裁三季。
第一次裁員的時候,辦公室裡瀰漫著一種不安的氣氛。大家表面上還是在工作,但每個人都在想:下一次是不是我?
第二次裁員的時候,不安變成了麻木。你已經習慣了週五的下午可能會收到那封 email。
第三次裁員的時候,名單上有了我的名字。
我成為了被裁的那個人。
第二次在離開的同時迎接新生命
巧合得不可思議的是,我離開 Snapask 的時間,剛好也是我二寶出生的時候。
人生第一次離開公司的時候(17 Media),大女兒出生。人生第二次離開公司的時候(Snapask),小兒子出生。太太笑我說:「你是不是每次要當爸爸就會被裁員?」
離開之後,我申請了第一次的創業補助。這是政府提供給非自願離職者的一項補助,可以讓你在找下一份工作的過渡期有一些經濟緩衝。
煎熬中的收穫
Snapask 是我職涯中最煎熬的一段經歷。連續的裁員讓每一天的工作都帶著一種不確定感,你不知道自己今天做的事情,明天是否還有意義。
但即使在這樣的環境裡,我還是有收穫。AWS 省錢大作戰讓我成為了雲端架構優化的實戰派,Notion 文件化的實踐讓我確認了知識管理的價值,「軟體考古學家」這個自嘲的稱號後來甚至成為了我的內容品牌之一。
而最重要的收穫,是每天下午牽著女兒的手走在放學路上的那些時光。那些時光不會出現在任何履歷上,但它們是我在 Snapask 最珍貴的回憶。