TinyPilot: Month 11

Michael Lynch

TinyPilot:第 11 個月

一句話總結

我該如何提升 TinyPilot 的利潤率?

重點摘要

  • 儘管月營收達 3 萬美元,TinyPilot 仍僅能勉強打平成本。
  • 我正在探索讓大型企業為 TinyPilot 支付更多費用的方案。
  • 我必須正視管理人員本身就是一份正職工作的事實。

目標成績

每個月月初,我都會宣告當月想完成的目標。以下是我的達成情況:

將 TinyPilot 的營收提升至 3.3 萬美元

  • 結果:將 TinyPilot 的營收提升至 3.9 萬美元
  • 評等:A

TinyPilot 在 ServeTheHome(IT 硬體領域頂尖的部落格/YouTube 頻道之一)發表重磅評測後,銷量大幅激增。

將 TinyPilot 的營運完全遷移至新辦公室

  • 結果:TinyPilot 已完全在新辦公室營運
  • 評等:A

我們終於將 TinyPilot 的營運從我家搬進了真正的辦公室。過程中也有些壓力很大的日子,例如我一度不確定能否在 Linux 上搞定列印功能,但整體而言轉換相當順利。現在進貨的零件直接寄到辦公室,員工在辦公室組裝與測試產品,完成的訂單也從辦公室出貨。

針對 Refactoring English(《重構英文》) 的目錄蒐集回饋並進行迭代

  • 結果:已蒐集到回饋,但尚未確定如何整合
  • 評等:B

我從 Write Useful Books 社群以及我的電子報訂閱名單獲得了回饋。在 202 名訂閱者中有 6 人回覆,雖然比我預期的少,但提供了很有幫助的回饋

大家似乎對「寫出更好的部落格文章」這類高階任務更感興趣,而對解釋如何改善動詞使用的章節較不感興趣。我想重新排序,把有趣的部分往前放,但還不確定該怎麼做,因為後面的章節依賴前面的內容。

令人興奮的成果自然比基礎知識更吸引人。如果我寫一本關於製作電玩遊戲的書,大家會對「如何打造具備智慧 AI 的敵人」這類章節感興趣,而可能對「線性代數基礎」沒那麼有興趣。這不代表我可以直接跳過基礎,但或許意味著我需要在教授基礎的同時,找到讓課程實用且容易應用的方法。

TinyPilot 數據統計

指標2021 年 4 月2021 年 5 月變化
不重複訪客5,8807,283+1,403 (+24%)
總瀏覽量10,48313,267+2,784 (+27%)
銷售營收$28,880.65$38,767.77+$9,887.12 (+34%)
利潤$843.56$6,858.72+$6,015.16 (+713%)

TinyPilot 迎來了有史以來第二好的月份。在這樣的銷售水準下,一切運作都十分順暢。今年 1 月出現類似的搶購潮時,曾讓我們應接不暇。幸好我們已改善了訂單履行流程,因此所有系統都正常運作。

我只是個主管

2012 年至 2014 年間,我在一家名為 iSEC Partners 的公司擔任軟體安全顧問。我的主管 Peter(彼得)負責管理紐約的整個團隊。他經常自嘲地說:「我只是個主管——算是間接人力啦。」他這麼說,是因為所有員工都在做有生產力的工作,而他只是公司官僚體系的一部分。

但彼得是一位極為出色的主管,這點大家心知肚明。我想他之所以會開玩笑說自己的角色不重要,是因為管理工作讓他比較少時間參與公司裡更有趣的事,像是安全研究與工具開發。

現在我能體會彼得當時的心情。常常到了一天結束時,我會覺得自己一整天只做了回電子郵件這件事。但退一步想,我能理解為什麼會有這樣的日子。目前我在 TinyPilot 與許多人合作:

  • 三位遠端軟體開發者
  • 三位負責庫存、組裝與訂單出貨的本地員工
  • 兩家在 3D 列印與電機工程方面密切合作的廠商

因此,總共有八個人我每週至少會聯繫一次。除此之外,還有其他需要往來的人員與服務,例如辦公室房東、我的人資/薪資服務、我們的知識庫,以及用來追蹤庫存的工具。而客服與銷售目前只有我一個人在處理。

考量到這些情況,會覺得我大部分時間都在回電子郵件也就合理了。我需要調整策略,更徹底地擁抱管理工作。

避免去做團隊成員也能勝任的工作

我現在做過最笨的事情之一,就是去承擔團隊中其他人明明也能勝任的任務。上個月,我提到自己一天只有一小時能寫程式。再仔細想想,我甚至不該做這件事,因為我的隊友也能寫程式,而我卻在只有我才能做的任務上落後了。

別再囤積只有 Michael(麥可)才能做的任務

有一些任務理論上別人也能做,但實際上卻不行,因為目前只有我擁有必要的存取權限或知識。

這些任務主要橫跨不同領域或職能,例如管理只有本地員工會使用的工具。以下是我應該委派出去的事項(依與我脫鉤的難易度由低到高排列):

  • 管理串接 Shopify 與庫存試算表的膠合程式碼。
  • 管理用於建置 TinyPilot 正式版映像檔的腳本。
  • 管理庫存試算表中的公式。
  • 回覆客服問題。
  • 對 TinyPilot 版本進行最終 QA 測試。

每月 3 萬美元怎麼會不賺錢?

最近我向女友感嘆,許多阻礙 TinyPilot 成長的問題很可能都有簡單的解法,只是因為我沒有接觸到經營類似事業的人,所以不知道。她問我希望向誰請教,並指出我其實可以直接想到人選就寫信給他們。

第一個浮現在我腦海中的人是 Mike Perham(麥克·帕勒姆),Sidekiq 的創辦人。麥克在 Indie Hackers 上的訪談是我最喜歡的節目之一。我還在 Google 擔任員工時就聽過,而他的事業一直讓我印象深刻,認為是獨立軟體事業的理想典範。他靠著撰寫開源軟體每月賺進約 8 萬美元。最棒的是,客戶在自己的機器上運行 Sidekiq,因此幾乎不可能出現需要麥克緊急處理的突發狀況。

我並不認識麥克·帕勒姆,所以我寫了一封自我介紹的信,詢問他對 TinyPilot 是否有任何建議。他隔天就回覆了,提供了幾個非常慷慨的建議。其中最讓我印象深刻的是他對我財務狀況的反應:

把利潤拉起來。5% 的利潤率不是一門健康的生意。要嘛降低成本,稍微調整一下價格,要嘛找一個更接近純利的純軟體附加產品。

那是一記有幫助的當頭棒喝。我知道自己的利潤很低,但仍覺得每月 3 萬美元代表我處在不錯的位置。但以 5% 利潤率的角度來看,情況就完全不同了。

根據麥克·帕勒姆的建議,我更仔細地檢視了我的支出。我還沒完成 5 月的帳務,所以在此以 4 月為例。

TinyPilot 支出圓餅圖

依類別區分的 TinyPilot 支出

類別總計
原物料$15,637.68
軟體外包人員$9,331.79
本地出貨人員$1,460.12
郵資$1,262.53
電機工程顧問$901.25
辦公室租金$550.00
廣告$370.00
律師費$270.00
辦公室設備$233.72
平面設計$169.00
貼紙$163.63
雲端服務$176.33
雜項$161.21

我的原物料成本並不令人意外。實體產品的利潤率一般約為 50% 至 60%,所以在約 3 萬美元的銷售額下,1.5 萬美元的成本符合預期。這部分沒有太多調整空間,因為我購買的材料沒有更便宜的替代品。有一些像是線材的品項,我為了品質而支付溢價,但那在售價 300 美元的產品上,每單位僅差 1 至 2 美元。昂貴的零件是那些沒有更便宜替代品的東西,例如 Raspberry Pi 或 HDMI 擷取晶片。

我的第二大支出是軟體開發,這在明明我自己也會寫軟體的情況下,或許看起來很奇怪。問題在於,要寫好軟體需要不被打斷的專注時間,而 TinyPilot 有太多非軟體的環節需要處理,無法讓我擁有那樣的時間。2020 年底,TinyPilot 的軟體開發幾乎陷入停滯,因為我是唯一的開發者,同時又忙於處理新產品相關的所有後勤事務。

我可以聘請更便宜的開發者,但那很快就會變成一場災難。我合作的開發者都特別優秀。他們維持了程式碼庫的高品質,讓軟體能持續易於維護且錯誤率低。

我曾與較便宜的開發者(約每小時 30 美元)合作過,他們要不是完全無法完成工作,就是採用天真的實作方式,導致後續產生錯誤與維護上的麻煩。如果我用低成本的開發者來組建專案,程式碼庫會在幾個月內變得無法維護、成為一場惡夢。

除此之外,我沒有任何可以大幅削減的支出。我的第三大支出是本地出貨人員,但即使削減 50% 的成本,也只能降低整體支出 2.4%,所以不值得去動一個運作良好的系統。

遵循麥克·帕勒姆建議的另一種方式是增加營收。

從大型客戶身上獲取價值

今年稍早,我與一家大型企業的 IT 經理談過。他非常喜歡 TinyPilot,並想在公司內部推廣,以取代他們舊有的、每台要價 2,000 美元的企業級設備。而且他成功了!該公司在其中一個部門部署了 40 台 TinyPilot,並計畫部署更多。

猜猜 TinyPilot 從這次部署中賺了多少?零。

他們沒有向我購買硬體,而是自行打造裝置。而由於軟體採用了寬鬆的開源授權,他們可以免費在公司內使用,完全不需要付費給我。

這在開源領域是極為常見的問題。寬鬆的授權有助於讓人們發現你的產品並鼓勵他們使用,但同時也讓大企業能夠從你的成果中獲利,卻什麼也不回饋。

我也為此詢問了麥克·帕勒姆。以下是他的回覆:

聽起來你的授權讓大客戶予取予求。這是你的程式碼,對吧?改掉你的授權吧,例如只允許愛好者以單一實例供個人使用。MIT 或 BSD 授權很適合用來分享程式碼,但不適合作為事業的基礎。

算是我的程式碼……某種程度上。為 TinyPilot 工作的特約人員都簽署了合約,表明我擁有他們貢獻程式碼的智慧財產權,但我也接受過少數志工開發者的貢獻。我的理解是,那些免費貢獻程式碼的開發者在技術上與我共同擁有 TinyPilot 程式碼的著作權。

我將 TinyPilot 以 MIT 授權釋出,因為它也給了我彈性。我想我可以自行將程式碼「分叉(fork)」成不同的授權,並表示它也使用了 MIT 授權的程式碼,但我不太確定實際運作方式。

我思考過從大型企業客戶身上獲取更多價值的方法,以下是我的想法:

為 TinyPilot 提供 Enterprise(企業版)功能

大型客戶會要求、但其他人不會要求的功能之一,就是對 TinyPilot 進行程式化的存取。例如:「我想監控遠端畫面,以偵測目標裝置何時當機,然後產生警示。」

我打算與大型客戶洽談推出具備此功能的 TinyPilot Enterprise 版本,並收取高額費用。我認為像每台裝置每月 50 美元這樣的價格,對家庭使用者來說很荒謬,但對財星 500 大企業而言,如果能省去數週自行打造解決方案的時間,這筆錢根本微不足道。

提供 SaaS(軟體即服務)附加產品

如果你與裝置位於同一個區域網路內,TinyPilot 很容易使用,但如果客戶想透過網際網路存取他們的 TinyPilot,目前就必須依賴第三方解決方案。我已向幾位客戶提過「TinyPilot Cloud Portal」這個構想:一個安全的網頁介面,讓他們能在網際網路上的任何地方遠端存取自己的 TinyPilot 裝置。

這將是一個很好的軟體即服務訂閱機會,可作為 TinyPilot 硬體產品的補充,並帶來更高的利潤率。

不過,我想避免託管一個需要我隨時待命的服務。我正在探索與能夠管理該服務營運層面的廠商合作的可能性。

諮詢專精於開源授權的律師

關於開源授權,我還有很多不了解的地方,所以我應該去諮詢律師,了解我有哪些選擇。理想的授權應該能讓個人使用者以可負擔的價格在家試用 TinyPilot,然後在商業環境中為雇主採用更昂貴的授權,類似 Sidekiq 的模式

舊有專案

以下是一些我仍在維護、但已非主要開發重心的專案的簡要更新:

Is It Keto

指標2021 年 4 月2021 年 5 月變化
不重複訪客56,09449,085-7,009 (-12%)
總瀏覽量123,723108,862-14,861 (-12%)
網域權重(Ahrefs)11.011.00
AdSense 營收$560.20$466.84-$93.36 (-17%)
Amazon 聯盟行銷營收$116.78$138.99+$22.21 (+19%)
總營收$676.98$605.83-$71.15 (-11%)

Is It Keto 持續在背景運作,但這個月我難得做了一些維護。我的許多 Amazon 聯盟行銷連結已經過期,指向已不存在的產品,所以我花了幾個小時進行修復。

在數個月沒碰程式碼後重新檢視,實在很想一頭栽進去修修改改。但我必須克制自己,因為把重心盡可能放在 TinyPilot 上對我更有幫助。

Hit the Front Page of Hacker News

指標2021 年 4 月2021 年 5 月變化
不重複訪客114191+77 (+68%)
Gumroad 營收$341.61$417.85+$76.24 (+22%)
Blogging for Devs 營收$109.20$0.00-$109.20 (-100%)
總營收$450.81$417.85-$32.96 (-7%)

這門課程每個月仍有少量銷售,但我沒有花太多時間推廣。

其中一個亮點是 Dan Willoughby(丹·威洛比)應用了課程中的經驗,撰寫了一篇文章,登上了 Hacker News 的第二名。而且他並非套用什麼「成長駭客」手法來操弄系統。他只是花時間寫了一篇高品質的文章,並獲得了相應的回響。看到這樣的成果讓我感到很欣慰。

Zestful

指標2021 年 4 月2021 年 5 月變化
不重複訪客892659-233 (-26%)
總瀏覽量2,1321,784-348 (-16%)
RapidAPI 營收$40.82$32.85-$7.97 (-20%)
總營收$40.82$32.85-$7.97 (-20%)

儘管 Zestful 仍處於維護模式,上週末我還是發布了官方 Python 套件。這是我一直覺得該專案應該要有、卻因為不知道如何發布 PyPI 套件而一再拖延的事。我在 3 月把玩 Restic時學會了做法,所以我想不如就利用這個知識為 Zestful 製作套件。

現在,使用者可以在幾分鐘內開始使用 Zestful。像這樣安裝套件:

pip install zestful-parse-ingredient

接著,匯入 parse_ingredient 模組,並傳入一個食材:

import json
import parse_ingredient

ingredient = parse_ingredient.parse('2 1/2 tablespoons finely chopped parsley')
print(json.dumps(ingredient.as_dict()))

你會看到像這樣的 JSON 輸出:

{
  "quantity": 2.5,
  "unit": "tablespoon",
  "product": "parsley",
  "productSizeModifier": null,
  "preparationNotes": "finely chopped",
  "usdaInfo": {
      "category": "Vegetables and Vegetable Products",
      "description": "Parsley, fresh",
      "fdcId": "170416",
      "matchMethod": "exact"
  },
  "confidence": 0.9858154,
}

總結

完成了什麼?

  • 將 TinyPilot 的營運從我家搬至真正的辦公室
  • 與庫存管理人員合作,在 Notion 中記錄我們所有的流程。
    • Notion 固然有些小缺點與陷阱,但相較於我們先前用來記錄內部流程的 Google Docs,已經是一大進步。
  • 成功將職責從 TinyPilot 原本的庫存管理人員(我的女友)移交給新的本地員工。
    • 我女友的研究所課程下週就要復課,所以她將沒有時間再處理 TinyPilot 的事務。

學到的教訓

  • 關於新員工訓練,「用寫的,別用口頭教。」
    • 我們幾乎完全透過書面指示,而非即時口頭討論,來訓練第一位本地員工。
    • 我們對上手過程的順利程度都很滿意,這也讓職責移交給新員工的過程十分順暢。
    • 第二位本地員工在 5 月中旬到職,而由於一切都已記錄下來,我們預期他的上手過程會更加輕鬆。
  • 管理工作同樣需要時間。
    • 如果我想做好管理,就需要放手讓團隊成員去做他們能勝任的任務。
  • TinyPilot 需要更高的利潤率。
    • 增加營收會比削減支出更容易。

下個月的目標

  • 發布新版的 TinyPilot。
  • 創造 3.5 萬美元的 TinyPilot 營收。
  • 打造具備內建 Power over Ethernet(乙太網路供電)功能的 TinyPilot Voyager 2 原型。

原文由 Michael Lynch 發布

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