TinyPilot:第 13 個月
一句話總結
委派的一個月。
重點回顧
- TinyPilot 的歐盟經銷商預計將在八月底前開始銷售。
- 我透過將職責委派給團隊成員,空出了時間。
- 我奇蹟般地解決了兩個卡關數月的任務。
目標評分
每個月月初,我都會宣告當月想完成的目標。以下是本月目標的達成情況:
讓歐盟合作夥伴在八月底前準備好開始銷售
- 結果:我們正按計畫在月底前開始銷售。
- 評分:A
進展順利。下週前,我的經銷商應該就能取得組裝 TinyPilot Voyager 裝置所需的所有零件與說明。他預計將在本月底前開始銷售。
建立讓 TinyPilot 在地員工能共享並輪替所有工作的流程
- 結果:我們建立了共享待辦清單,讓員工可以輪替任務。
- 評分:A
TinyPilot 過去從未同時由超過一人負責庫存與出貨作業。要建立一套讓兩人能平等分擔責任的系統,比我想像中困難,但我們現在已有一套可行的機制,讓兩位員工輪替工作並協調排程。此外,我也把過去由我補上的流程缺口記錄下來,讓在地員工能夠接手處理。
為 TinyPilot 銷售網站尋找設計師
- 結果:一位新的開發者正在進行重新設計。
- 評分:A
經過數月的尋覓,我終於找到一位網頁開發者來負責 TinyPilot 網站,他目前正在進行重新設計。
尋找能為 TinyPilot Voyager 打造 PoE adaptor(乙太網路供電轉接器) 的電機工程公司
- 結果:原本合作的公司找到了能打造 PoE adaptor 的零組件。
- 評分:A+
這是另一個幸運的突破。全球晶片短缺讓我的電機工程合作夥伴卡關了好幾個月,因此我開始聯繫規模更大的供應商,希望他們在電子零件供應鏈上有更好的人脈。這本來會是個緩慢的過程,而且他們很可能會想從頭開始。
幸運的是,TinyPilot 現有的電機工程合作夥伴找到了足以支撐我們 6 至 12 個月使用的供貨,價格不到我原本預期支付金額的 10%。他們目前正在進行 PoE adaptor 的 PCB 設計,預計在未來 4 至 6 週內完成原型。
TinyPilot 數據
| 指標 | 2021 年 6 月 | 2021 年 7 月 | 變化 |
|---|---|---|---|
| 不重複訪客 | 6,339 | 5,234 | -1,105 (-17%) |
| 總瀏覽量 | 11,514 | 9,730 | -1,784 (-15%) |
| 銷售營收 | $29,446.46 | $23,954.64 | -$5,491.82 (-19%) |
| 企業訂閱 | $48.00 | $48.00 | $0 (0%) |
| 總營收 | $29,494.46 | $24,002.64 | -$5,491.82 (-19%) |
| 利潤 | -$9,452.32 | -$9,713.34 | N/A |
由於我專注於建立歐盟經銷體系並將 TinyPilot 的出貨流程移交給在地員工,銷售持續低迷。幸運的是,TinyPilot 在完全沒有行銷或廣告的情況下,仍能連續兩個月達到 2.4 萬美元的營收,但未來幾個月我需要加大在銷售與行銷上的投入。
轉向託管式庫存服務
從 TinyPilot 創立最初的幾個月起,我就在尋找能追蹤庫存的託管服務。便宜的方案過於陽春,只適用於無需組裝或製造的產品。高階方案則過於複雜,是為擁有數千項產品與多個倉庫的企業級客戶所設計。
偶然間,我發現了 Craftybase,它看起來終於是適合 TinyPilot 的解決方案。某種程度上也確實如此,但轉換過程相當崎嶇。
Craftybase 有些設計得很好,完全符合我們的工作流程。我最喜歡的功能是「recipes」,可用來定義組成產品的原物料。舉例來說,我可以在 Craftybase 中設定一個 TinyPilot Power Connector 由一個外殼和一塊電路板組成。當我在 Craftybase 中記錄一次 10 個 Power Connector 的「build」時,它就會自動從庫存中扣除 10 個外殼與 10 塊電路板。

Craftybase 的「recipe」功能可讓你定義組成各項產品的零組件。
配方也可以包含我自行製造的其他項目,這對 TinyPilot 多階段製造流程來說非常實用。舉例來說,我們分階段組裝 TinyPilot Voyager。通常會先批次組裝 10 台以上的 Voyager 裝置、進行測試,然後再將每台裝置與所需的線材、說明書和 microSD 卡一起裝箱。Craftybase 能讓我們在流程的不同階段追蹤零組件,因為配方可以同時包含原物料與先前階段已製作好的零件。
不幸的是,我們在 Craftybase 上的大多數工作流程都有些卡頓。最誇張的例子是管理進貨。Craftybase 允許你為每項物料設定「low stock limit」,系統會用這個數值來標示庫存偏低的零件。

當庫存數量低於你設定的庫存下限時,Craftybase 會標示該物料。
問題在於,即使你已經下訂補貨,它仍會持續標示該項目為庫存偏低,因為這個標示會忽略待進貨的數量。在上面的範例中,我已在 Craftybase 中記錄有一批 HDMI 擷取晶片將在月底到貨,但 Craftybase 仍將此項目標示為庫存偏低,彷彿我還有什麼事沒做。
這表示當 TinyPilot 員工想確認哪些項目需要重新訂購時,必須逐一檢視每個被標示的項目,並在考慮待進貨數量後,判斷它是否真的庫存偏低。
起初,我以為有個簡單的變通方法。我以為 Craftybase 的「purchased」欄位代表待進貨數量。結果發現,「purchased」其實是從一開始至今的採購總量,一個無關緊要的指標,Craftybase 卻給了它異常顯眼的版位。

當庫存數量低於你設定的庫存下限時,Craftybase 會標示該物料。
變通方法是,對於每個被標示為庫存偏低的項目,我們必須點進詳細資料,查看目前庫存總量,加上待進貨數量,再判斷這個數字是否低於庫存下限。檢查庫存是否偏低本應是兩秒鐘就能完成的工作,但在 Craftybase 卻變成需要數分鐘的繁瑣複雜流程。


要在 Craftybase 中確認某項物料是否庫存偏低,必須在多個畫面之間比對數字。
透過委派空出更多時間
在經營 TinyPilot 的大部分時間裡,我一直苦於時間不足。這門生意有許多環節,而我是串連所有環節的唯一橋梁。
六月時,我列出了一份任務清單,這些是只要在訓練與工具上投入一些資源就能委派出去的工作。我很開心地說,我已經成功委派或刪除了清單上半數的項目,甚至更多。
卸下試算表工作
TinyPilot 之前的庫存解決方案是我自己維護的自製試算表。它能很好地支援 TinyPilot 的工作流程,但缺乏彈性。每當我們新增產品或更換零件,我就得花上好幾個小時調整那些拼湊出來的試算表公式,才能讓它重新運作。

在 TinyPilot 成立的第一年,我們透過一系列含有複雜公式的試算表來追蹤所有庫存。
儘管 Craftybase 讓我感到挫折,它卻讓我不再是庫存流程中的關鍵瓶頸。Craftybase 能以比試算表更細緻、更彈性的方式追蹤庫存,雖然確實需要大量令人沮喪的變通方法。
為在地員工建立共享待辦清單
我仍在無意間微觀管理的任務之一是工作分配。TinyPilot 的每位在地員工每週會到辦公室三天,每次數小時。對於每天都會發生的任務,例如訂單出貨或處理進貨,直接請員工在當班時處理就很簡單。
每週或每月才發生一次的任務,則較難在兩位員工之間分配。在進駐實體辦公室的前幾個月,每週與每月的任務是一團混亂,混雜著「需要時再做」、「等 Michael(麥可)來請人幫忙」或「麥可會自己處理」等狀況。
TinyPilot 的其中一位員工對深入了解我們用來建立知識庫的工具 Notion 很感興趣。這似乎是個適合用 Notion 來做的專案,於是我請他建立一個共享待辦清單來管理每週與每月的任務。

TinyPilot 的在地員工透過 Notion 上的共享待辦清單追蹤待處理任務。
過去三週,我們已成功使用這份待辦清單。主要缺點是我們尚未在 Notion 中找到建立週期性任務的好方法。變通方法是每隔幾個月手動重新填入清單。雖然很繁瑣,但每季只需約一小時的工作量。
訓練在地員工補訂原物料
在 TinyPilot 的大部分時間裡,庫存管理(包括原物料快用完時的補訂)都是由我女友負責。當她在六月回去念研究所後,我們將她的大部分職責移交給新進員工,但補訂物料的工作又回到了我身上。
補訂庫存是一項看似簡單、實則難以委外的工作。不只是要說明怎麼做,還得處理如何安全地分享供應商網站的帳號密碼、提供一張設有消費上限的新簽帳金融卡以降低出錯風險等等。指派他人管理庫存也需要時間來建立信任。我不想把信用卡交給剛報到的新員工,然後說:「你現在每個月要負責一萬美元的採購。」
七月時,我終於為團隊的每個人建立了 Bitwarden 帳號,讓我們能安全地共享帳號密碼。我也撰寫了如何向各家供應商下單的說明。

TinyPilot 用於補訂原物料的內部文件
維持庫存水位感覺像是小事,但在補訂物資的過程中其實有許多瑣碎工作,因此當有人接手時,我總是感到無比輕鬆。
讓開發者互相審查 pull request
自二月以來,有兩位特約開發者與我一起開發 TinyPilot,上個月又加入了第三位。由於時間不足,我大多已停止撰寫程式碼,但每個變更仍都由我審查。
幾個月前,我們曾嘗試讓我退出程式碼審查流程,但沒有成功。我是全職待命,而其他開發者大多是兼職,且工時幾乎不重疊。如果他們有一系列相互依賴的變更,審查之間的延遲可能會扼殺進度。
在每月的開發會議上,我們意識到只有少部分變更會出現這種連續依賴的情況。對大多數變更而言,等上一兩天才審查並不是什麼大問題。因此,現在開發者們開始互相審查程式碼。
作為一個仍自視為獨立開發者的人,要對自己沒有親自審查過的程式碼負責,感覺有點可怕。但我信任我的團隊成員,也認為這個制度對公司整體而言更好。
將映像檔建置流程外部化
每次發布新版 TinyPilot 時,我都會製作一個預載最新版 TinyPilot 的 microSD 映像檔。我的 microSD 映像檔建置流程需要一台 Raspberry Pi,因此我一直使用放在辦公室角落的一台備用 Pi 和 SSD。

直到最近,這還是 TinyPilot 官方的建置伺服器
儘管 TinyPilot 的開發者完全有能力管理程式碼,但要協調共享存取這台孤立在我家中的單一伺服器實在太困難。結果,建置程式碼仍只有我一人在維護。
有時候,我會絕望地用 Google 搜尋某個東西好幾個月,渴望找到解決方案,最後才發現自己用了錯誤的關鍵字。我一直想要 Pi 雲端主機,也經常搜尋「pi cloud hosting」或「pi cloud server」,卻只找到關於如何把自己的 Pi 當作雲端伺服器的無用結果。最後,我靈機一動改搜尋「pi dedicated server」,才找到了 Mythic Beasts,這是一家提供可按秒計費的雲端 Raspberry Pi 伺服器的公司。

Mythic Beasts 提供裸機 Raspberry Pi 伺服器託管服務。
Mythic Beasts 提供了很棒的 API,可動態啟動 Pi 伺服器,但我發現相較於開發者的工時,他們的伺服器成本非常便宜,與其自動化任何聰明的伺服器分配邏輯,不如為每位開發者各配一台全年無休的個人伺服器更划算。
伺服器問題解決後,我整理了映像檔建置程式碼並與團隊分享。現在任何 TinyPilot 開發者都可以在自己的伺服器上部署最新的建置程式碼,並用它來產生 TinyPilot microSD 映像檔。更重要的是,如果我們在流程中發現錯誤或新增步驟,TinyPilot 的開發者就能自行修改,而不再是只有麥可才能處理的工作。
啟動歐盟經銷
過去一個月我最大的專案,就是與新的歐盟經銷商展開合作。我目前有在銷售給歐洲客戶,但跨境運送速度慢、成本高,收件時還可能產生意外的關稅。歐盟經銷商將在德國製造並出貨 TinyPilot,這將改善歐盟消費者的購買體驗。
建立這段合作關係的主要挑戰之一,是如何在承諾與彈性之間取得平衡。過去,TinyPilot 的未來很難預測超過數個月,因此我盡可能保持彈性。可以理解的是,我的經銷商需要我提供一定程度的長期承諾。開始銷售 TinyPilot 裝置需要投入大量工作與資金,所以他不希望當有其他經銷商提出更好條件時,我就突然抽手。
另一個難題是權利金。我們一致認為,最能讓雙方誘因一致的方式是按比例分潤。如此一來,經銷商可以在不受固定付款限制的情況下嘗試不同定價。如果他發現可以賣得更貴,我也能跟著受惠。
分潤的困難在於,它會引發許多關於如何精確計算利潤的棘手問題。如果我的經銷商為了行銷而免費贈送裝置,他是否需要為這些裝置支付權利金?人力成本是否應計入每台裝置的利潤?如果我們共同投資產品改良,這會如何影響利潤計算?
我們一直在釐清這些問題,並試圖預見潛在的衝突來源。目前合約已完成約 95%,看起來有望在數週內,甚至數天內定案。
舊有專案
Is It Keto
| 指標 | 2021 年 6 月 | 2021 年 7 月 | 變化 |
|---|---|---|---|
| 不重複訪客 | 49,839 | 39,568 | -10,271 (-21%) |
| 總瀏覽量 | 122,700 | 96,494 | -26,206 (-21%) |
| 網域權重 (Ahrefs) | 13.0 | 13.0 | 0 |
| AdSense 收益 | $536.85 | $438.07 | -$98.78 (-18%) |
| Amazon 聯盟行銷收益 | $134.59 | $59.65 | -$74.94 (-56%) |
| 總營收 | $671.44 | $497.72 | -$173.72 (-26%) |
上個月,我還在慶祝 Is It Keto 的流量在每年一月的暴增後仍能維持得這麼好。看來是我烏鴉嘴了,因為本月的訪客數出現了今年最大的月減幅,跌幅超過 20%。
遺憾的是,這波下滑正好發生在我申請與更高階的多媒體廣告夥伴合作之際。我聽過建議從 Google AdSense 轉到 MediaVine,因為後者給發布商的報酬高得多。MediaVine 要求每月至少 10 萬次瀏覽量,我申請時剛好達標,但現在又略低於門檻。只能靜觀其變了。
Hit the Front Page of Hacker News
| 指標 | 2021 年 6 月 | 2021 年 7 月 | 變化 |
|---|---|---|---|
| 不重複訪客 | 248 | 109 | -139 (-56%) |
| Gumroad 收益 | $123.52 | $218.09 | +$94.57 (+77%) |
| Blogging for Devs 收益 | $0.00 | $27.30 | +$27.30 (+inf%) |
| 總營收 | $123.52 | $245.39 | +$121.87 (+99%) |
這門課程最近沒有什麼新進展。每個月有幾個人購買,似乎也很喜歡,但我沒有特別推廣。Martin Schleiss(馬丁·施萊斯)在他最近的部落格文章中給予了正面的提及。我計畫本月主動爭取在一些科技 Podcast 上擔任來賓,或許能為課程帶來新學員。
Zestful
| 指標 | 2021 年 6 月 | 2021 年 7 月 | 變化 |
|---|---|---|---|
| 不重複訪客 | 594 | 547 | -47 (-8%) |
| 總瀏覽量 | 1,470 | 1,300 | -170 (-12%) |
| 總營收 | $40.20 | $620.67 | +$580.47 (+1444%) |
本月 Zestful 的使用量大幅上升,但我相當確定這是詐欺。有好幾位使用者在幾天內相繼註冊,帳號名稱像是 joe-84ad853 這樣的形式。本月大部分的營收都來自其中一個帳號。從來沒有 Zestful 客戶在未向我接洽大量折扣的情況下,花費超過 100 美元的 API 請求費用。這位使用者從未聯繫我,因此我高度懷疑。RapidAPI 表示我將在 8 月 30 日收到這筆款項,但如果真的入帳,我會非常驚訝。
總結
完成了什麼?
- 發布了新版 TinyPilot
- 找到負責管理 TinyPilot 網站的開發者
- 恢復了 TinyPilot PoE HAT 與機架安裝套件的進度
- 轉移至託管式庫存服務
經驗教訓
- 不完美的工作流程,也勝過依賴執行長的工作流程。
- 儘管 Craftybase 的使用者介面與種種限制讓我感到挫折,它仍勝過讓我困在複雜試算表中維護公式。
下個月的目標
- 協助歐盟經銷商完成首筆銷售。
- 完成 Voyager 2 的設計定案。
- 發布 Refactoring English(《重構英文》) 的試讀章節。
隨機一篇部落格