TinyPilot:第 13 個月
原文由 Michael Lynch 于 發布,訂閱此部落格
一句話總結
授權分工的一個月。
本月亮點
- TinyPilot 的歐盟經銷商預計將在八月底前開始銷售。
- 我透過將職責委派給團隊成員,空出了自己的時間。
- 我奇蹟似地解決了兩個卡關數月的任務,終於取得進展。
目標成績
每月初,我都會宣告當月想完成的目標。以下是我的達成狀況:
讓歐盟合作夥伴準備好在八月底前開始銷售
- 結果:我們正按計畫,預計在月底前開始銷售。
- 評分:A
這項進展很順利。下週,我的經銷商應該就能拿到組裝 TinyPilot Voyager 裝置所需的所有零件與說明。他預計將在本月底前開始銷售。
建立流程,讓 TinyPilot 的在地員工能共享並輪替所有工作
- 結果:我們建立了共享待辦清單,讓員工可以輪替任務。
- 評分:A
TinyPilot 過去從未有超過一個人同時負責庫存與出貨作業。要建立一套讓兩個人能平等分擔職責的系統,比我想像中困難,但我們現在已經有了一套可行的機制,讓兩位員工可以輪替任務、協調排班。此外,我也把自己原本代為處理的環節記錄下來,讓在地員工能夠接手。
為 TinyPilot 銷售網站尋找設計師
- 結果:一位新加入的開發者正在進行重新設計。
- 評分:A
尋覓數月後,我終於找到一位願意協助 TinyPilot 網站的網頁開發者,他目前正在進行重新設計。
尋找能為 TinyPilot Voyager 打造 PoE 轉接器的電機工程公司
- 結果:原本合作的廠商找到了能製作 PoE 轉接器的零件。
- 評分:A+
這又是另一次幸運的突破。全球晶片短缺讓我合作的電機工程公司卡關了好幾個月,因此我開始聯繫規模更大的供應商,看他們是否在電子零件供應鏈上有更強的人脈。這原本會是一個緩慢的過程,而且對方很可能想從零開始。
幸運的是,TinyPilot 現有的電機工程合作夥伴設法找到了一批貨源,應該能支撐我們 6 到 12 個月,而且價格不到我原本預期要付的十分之一。他們目前正在進行 PoE 轉接器的 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 仍能維持 $24k 的營收,但接下來幾個月我需要加大在銷售與行銷上的投入。
轉向託管式庫存管理服務
從 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 讓人沮喪,它還是讓我從庫存流程的關鍵路徑中解脫出來。它比試算表更細緻、更有彈性地追蹤庫存,雖然確實需要不少令人沮喪的變通做法。
為在地員工建立共享待辦清單
有一項我仍在無意間緊抓不放、事必躬親的工作,就是任務分配。TinyPilot 的在地員工每週會來辦公室三天,每次幾個小時。對於每天都要做的事,例如訂單出貨或處理進貨,只要請他們在當班時段處理就行。
但每週或每月才做一次的任務,就比較難在兩位員工之間分配。在進駐在地辦公室的前幾個月,這些週期性任務的狀態相當混亂,混雜著「需要時再做」、「等 Michael 來交辦」或是「Michael 乾脆自己做」的情況。
其中一位員工對深入了解我們用來做知識庫的 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 伺服器,但我發現相較於開發者的時間成本,他們的伺服器費用便宜到與其去自動化什麼聰明的伺服器分配邏輯,不如直接給每位開發者一台 24 小時全年無休運行的個人伺服器還划算。
解決了伺服器的問題後,我清理了映像檔建置的程式碼並分享給團隊。現在任何 TinyPilot 開發者都可以在自己的伺服器上部署最新的建置程式碼,並用它來產生 TinyPilot 的 microSD 映像檔。更重要的是,如果過程中發現錯誤或需要新增步驟,TinyPilot 的開發者們就能自行修改,而不再是只有 Michael 才能處理的工作。
啟動歐盟經銷
過去一個月我最大的專案,就是與新的歐盟經銷商展開合作。我目前雖然也有出貨給歐洲客戶,但跨洋運送既緩慢又昂貴,還可能在收貨時產生意外的關稅。歐盟經銷商將在德國製造並出貨 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 的試讀章節。
隨機一篇部落格
留言
登入後參與討論