TinyPilot: Month 13

Michael Lynch

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,3395,234-1,105 (-17%)
總瀏覽量11,5149,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.34N/A

由於我專注於建立歐盟經銷體系並將 TinyPilot 的出貨流程移交給在地員工,銷售持續低迷。幸運的是,TinyPilot 在完全沒有行銷或廣告的情況下,仍能連續兩個月達到 2.4 萬美元的營收,但未來幾個月我需要加大在銷售與行銷上的投入。

轉向託管式庫存服務

從 TinyPilot 創立最初的幾個月起,我就在尋找能追蹤庫存的託管服務。便宜的方案過於陽春,只適用於無需組裝或製造的產品。高階方案則過於複雜,是為擁有數千項產品與多個倉庫的企業級客戶所設計。

偶然間,我發現了 Craftybase,它看起來終於是適合 TinyPilot 的解決方案。某種程度上也確實如此,但轉換過程相當崎嶇。

Craftybase 有些設計得很好,完全符合我們的工作流程。我最喜歡的功能是「recipes」,可用來定義組成產品的原物料。舉例來說,我可以在 Craftybase 中設定一個 TinyPilot Power Connector 由一個外殼和一塊電路板組成。當我在 Craftybase 中記錄一次 10 個 Power Connector 的「build」時,它就會自動從庫存中扣除 10 個外殼與 10 塊電路板。

Craftybase 將 HDMI 擷取晶片標示為庫存偏低的擷圖

Craftybase 的「recipe」功能可讓你定義組成各項產品的零組件。

配方也可以包含我自行製造的其他項目,這對 TinyPilot 多階段製造流程來說非常實用。舉例來說,我們分階段組裝 TinyPilot Voyager。通常會先批次組裝 10 台以上的 Voyager 裝置、進行測試,然後再將每台裝置與所需的線材、說明書和 microSD 卡一起裝箱。Craftybase 能讓我們在流程的不同階段追蹤零組件,因為配方可以同時包含原物料與先前階段已製作好的零件。

不幸的是,我們在 Craftybase 上的大多數工作流程都有些卡頓。最誇張的例子是管理進貨。Craftybase 允許你為每項物料設定「low stock limit」,系統會用這個數值來標示庫存偏低的零件。

Craftybase 配方功能的擷圖

當庫存數量低於你設定的庫存下限時,Craftybase 會標示該物料。

問題在於,即使你已經下訂補貨,它仍會持續標示該項目為庫存偏低,因為這個標示會忽略待進貨的數量。在上面的範例中,我已在 Craftybase 中記錄有一批 HDMI 擷取晶片將在月底到貨,但 Craftybase 仍將此項目標示為庫存偏低,彷彿我還有什麼事沒做。

這表示當 TinyPilot 員工想確認哪些項目需要重新訂購時,必須逐一檢視每個被標示的項目,並在考慮待進貨數量後,判斷它是否真的庫存偏低。

起初,我以為有個簡單的變通方法。我以為 Craftybase 的「purchased」欄位代表待進貨數量。結果發現,「purchased」其實是從一開始至今的採購總量,一個無關緊要的指標,Craftybase 卻給了它異常顯眼的版位。

Craftybase 將 HDMI 擷取晶片標示為庫存偏低的擷圖

當庫存數量低於你設定的庫存下限時,Craftybase 會標示該物料。

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

Craftybase 將 HDMI 擷取晶片標示為庫存偏低的擷圖Craftybase 將 HDMI 擷取晶片標示為庫存偏低的擷圖

要在 Craftybase 中確認某項物料是否庫存偏低,必須在多個畫面之間比對數字。

透過委派空出更多時間

在經營 TinyPilot 的大部分時間裡,我一直苦於時間不足。這門生意有許多環節,而我是串連所有環節的唯一橋梁。

六月時,我列出了一份任務清單,這些是只要在訓練與工具上投入一些資源就能委派出去的工作。我很開心地說,我已經成功委派或刪除了清單上半數的項目,甚至更多。

卸下試算表工作

TinyPilot 之前的庫存解決方案是我自己維護的自製試算表。它能很好地支援 TinyPilot 的工作流程,但缺乏彈性。每當我們新增產品或更換零件,我就得花上好幾個小時調整那些拼湊出來的試算表公式,才能讓它重新運作。

TinyPilot 在 Google Sheets 上透過試算表管理庫存的擷圖

在 TinyPilot 成立的第一年,我們透過一系列含有複雜公式的試算表來追蹤所有庫存。

儘管 Craftybase 讓我感到挫折,它卻讓我不再是庫存流程中的關鍵瓶頸。Craftybase 能以比試算表更細緻、更彈性的方式追蹤庫存,雖然確實需要大量令人沮喪的變通方法。

為在地員工建立共享待辦清單

我仍在無意間微觀管理的任務之一是工作分配。TinyPilot 的每位在地員工每週會到辦公室三天,每次數小時。對於每天都會發生的任務,例如訂單出貨或處理進貨,直接請員工在當班時處理就很簡單。

每週或每月才發生一次的任務,則較難在兩位員工之間分配。在進駐實體辦公室的前幾個月,每週與每月的任務是一團混亂,混雜著「需要時再做」、「等 Michael(麥可)來請人幫忙」或「麥可會自己處理」等狀況。

TinyPilot 的其中一位員工對深入了解我們用來建立知識庫的工具 Notion 很感興趣。這似乎是個適合用 Notion 來做的專案,於是我請他建立一個共享待辦清單來管理每週與每月的任務。

TinyPilot 在 Notion 上的共享待辦清單

TinyPilot 的在地員工透過 Notion 上的共享待辦清單追蹤待處理任務。

過去三週,我們已成功使用這份待辦清單。主要缺點是我們尚未在 Notion 中找到建立週期性任務的好方法。變通方法是每隔幾個月手動重新填入清單。雖然很繁瑣,但每季只需約一小時的工作量。

訓練在地員工補訂原物料

在 TinyPilot 的大部分時間裡,庫存管理(包括原物料快用完時的補訂)都是由我女友負責。當她在六月回去念研究所後,我們將她的大部分職責移交給新進員工,但補訂物料的工作又回到了我身上。

補訂庫存是一項看似簡單、實則難以委外的工作。不只是要說明怎麼做,還得處理如何安全地分享供應商網站的帳號密碼、提供一張設有消費上限的新簽帳金融卡以降低出錯風險等等。指派他人管理庫存也需要時間來建立信任。我不想把信用卡交給剛報到的新員工,然後說:「你現在每個月要負責一萬美元的採購。」

七月時,我終於為團隊的每個人建立了 Bitwarden 帳號,讓我們能安全地共享帳號密碼。我也撰寫了如何向各家供應商下單的說明。

TinyPilot 內部 Notion 頁面中關於訂購原物料的擷圖

TinyPilot 用於補訂原物料的內部文件

維持庫存水位感覺像是小事,但在補訂物資的過程中其實有許多瑣碎工作,因此當有人接手時,我總是感到無比輕鬆。

讓開發者互相審查 pull request

自二月以來,有兩位特約開發者與我一起開發 TinyPilot,上個月又加入了第三位。由於時間不足,我大多已停止撰寫程式碼,但每個變更仍都由我審查。

幾個月前,我們曾嘗試讓我退出程式碼審查流程,但沒有成功。我是全職待命,而其他開發者大多是兼職,且工時幾乎不重疊。如果他們有一系列相互依賴的變更,審查之間的延遲可能會扼殺進度

在每月的開發會議上,我們意識到只有少部分變更會出現這種連續依賴的情況。對大多數變更而言,等上一兩天才審查並不是什麼大問題。因此,現在開發者們開始互相審查程式碼。

作為一個仍自視為獨立開發者的人,要對自己沒有親自審查過的程式碼負責,感覺有點可怕。但我信任我的團隊成員,也認為這個制度對公司整體而言更好。

將映像檔建置流程外部化

每次發布新版 TinyPilot 時,我都會製作一個預載最新版 TinyPilot 的 microSD 映像檔。我的 microSD 映像檔建置流程需要一台 Raspberry Pi,因此我一直使用放在辦公室角落的一台備用 Pi 和 SSD。

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 提供裸機 Raspberry Pi 伺服器託管服務。

Mythic Beasts 提供了很棒的 API,可動態啟動 Pi 伺服器,但我發現相較於開發者的工時,他們的伺服器成本非常便宜,與其自動化任何聰明的伺服器分配邏輯,不如為每位開發者各配一台全年無休的個人伺服器更划算。

伺服器問題解決後,我整理了映像檔建置程式碼並與團隊分享。現在任何 TinyPilot 開發者都可以在自己的伺服器上部署最新的建置程式碼,並用它來產生 TinyPilot microSD 映像檔。更重要的是,如果我們在流程中發現錯誤或新增步驟,TinyPilot 的開發者就能自行修改,而不再是只有麥可才能處理的工作。

啟動歐盟經銷

過去一個月我最大的專案,就是與新的歐盟經銷商展開合作。我目前有在銷售給歐洲客戶,但跨境運送速度慢、成本高,收件時還可能產生意外的關稅。歐盟經銷商將在德國製造並出貨 TinyPilot,這將改善歐盟消費者的購買體驗。

建立這段合作關係的主要挑戰之一,是如何在承諾與彈性之間取得平衡。過去,TinyPilot 的未來很難預測超過數個月,因此我盡可能保持彈性。可以理解的是,我的經銷商需要我提供一定程度的長期承諾。開始銷售 TinyPilot 裝置需要投入大量工作與資金,所以他不希望當有其他經銷商提出更好條件時,我就突然抽手。

另一個難題是權利金。我們一致認為,最能讓雙方誘因一致的方式是按比例分潤。如此一來,經銷商可以在不受固定付款限制的情況下嘗試不同定價。如果他發現可以賣得更貴,我也能跟著受惠。

分潤的困難在於,它會引發許多關於如何精確計算利潤的棘手問題。如果我的經銷商為了行銷而免費贈送裝置,他是否需要為這些裝置支付權利金?人力成本是否應計入每台裝置的利潤?如果我們共同投資產品改良,這會如何影響利潤計算?

我們一直在釐清這些問題,並試圖預見潛在的衝突來源。目前合約已完成約 95%,看起來有望在數週內,甚至數天內定案。

舊有專案

Is It Keto

指標2021 年 6 月2021 年 7 月變化
不重複訪客49,83939,568-10,271 (-21%)
總瀏覽量122,70096,494-26,206 (-21%)
網域權重 (Ahrefs)13.013.00
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 月變化
不重複訪客248109-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 月變化
不重複訪客594547-47 (-8%)
總瀏覽量1,4701,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 的使用者介面與種種限制讓我感到挫折,它仍勝過讓我困在複雜試算表中維護公式。

下個月的目標

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯