跳至主要內容

技術總監與 AWS 省錢大作戰——Snapask

技術總監與 AWS 省錢大作戰——Snapask
我的職涯地圖:一個工程師的 20 年回顧 第 9 / 12 篇 ,前往系列總覽

本篇是「我的職涯地圖:一個工程師的 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 最珍貴的回憶。

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →