TinyPilot: Month 27

Michael Lynch

TinyPilot:第 27 個月

一句話總結

完全遠端的 TinyPilot 會是什麼樣子?

重點摘要

  • 我正在做一個思想實驗,思考 TinyPilot 是否能在沒有實體辦公室的情況下運作。
  • 思考外包的過程迫使我正視現有工作流程中的低效之處。
  • Playwright end-to-end testing(端對端測試) 工具已讓我信服。

目標成績

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

將 TinyPilot Pro 遷移至次世代更新系統

  • 結果:已發布 TinyPilot Pro 2.5.0,其中包含新的更新系統。
  • 成績:A

本次發布最大的改變在於更新機制的運作方式。過去 TinyPilot 會向 git 伺服器查詢更新,並一律嘗試更新到最新版本。現在,我們有了客製化的網路服務,讓 TinyPilot 查詢下一個版本。新的更新系統讓我們對更新流程有更多掌控,也讓測試新版本變得更容易。

這個版本花了五個月才完成,比我們所有人預期的都久。我們平常的發布週期大約是兩個月。我預期新版本未來能幫助我們更快地迭代與測試。

將 TinyPilot Voyager 寄給兩位 YouTube 創作者或部落客試用評測

  • 結果:為了重新招募而取消了此目標。
  • 成績:N/A

我最後讓一位技術支援工程師離職,因此轉而專注於招募接替人選。這項招募很成功,我在十月初聘請了一位新的工程師。

探索新的外殼製造方案

  • 結果:已訂購金屬外殼的原型。
  • 成績:A

這是一個比較模糊的目標,因為我目前仍在探索各種選項。過去我曾探索過射出成型外殼,這種方式單價低,但前期成本高昂。我現在則在探索金屬外殼,它不需要那麼高的前期成本,也能有效率地擴大量產。

TinyPilot 數據

指標2022 年 8 月2022 年 9 月變化
不重複訪客11,9039,040-2,863 (-24%)
總瀏覽次數23,21417,608-5,606 (-24%)
銷售營收$76,082.06$68,640.50-$7,441.56 (-10%)
企業訂閱$290.70$242.95-$47.75 (-16%)
權利金$3,264.23$3,440.90+$176.67 (+5%)
總營收$79,636.99$72,324.35-$7,312.64 (-9%)
利潤$21,580.82-$8,764.28*-$30,345.10 (-inf%)

* 此利潤數字僅為我依現金持有變化所做的簡易計算,實際帳務要到月中才會完成。

數字一片慘紅,看起來很嚇人,但我認為這個月其實表現不錯。看到營收再次突破 7 萬美元,我感到非常振奮。

利潤下滑是因為有一筆 1.1 萬美元的原物料費用,是六個月前的意外帳單。即便如此,我對最終呈現這麼大的虧損還是有點驚訝。我推測這主要是發票入帳時間點的影響,未來幾個月平均下來應該會轉為正數。

金屬外殼對 TinyPilot 意味著什麼?

我們生產上剩下的一個瓶頸是外殼。我們的外殼是 3D 列印的,而且使用列印速度很慢的高級材料,因此每月產能限制約為 160 個。我們也受限於只能與特定的一家 3D 列印廠商合作,因為我們依賴麻薩諸塞州政府的一項補助,而該補助只能透過這家廠商取得。

我們每月銷售超過 200 台裝置,因此外殼很快就會成為限制因素。我們還能以目前的速度出貨幾個月,是因為在銷售量低於產能時,我們已囤積了不少外殼。

我們的硬體合作夥伴建議改用金屬外殼,類似你在消費性網路設備上看到的那種:

金屬製 TP-Link TL-SG1005P 5 埠交換器照片

如果 TinyPilot 改用像這樣的金屬外殼會如何?

金屬外殼將能降低成本,並消除每月 160 個的產能限制,因為我們每個月可以製造數千個。

我們的硬體合作夥伴還隨口提到一件事,讓我開始思考:如果我們在中國製造外殼,也可以直接在中國組裝裝置。

起初,在中國組裝對我沒有吸引力。我們在麻薩諸塞州的組裝流程運作良好,為何要去更動它?

假設在美國組裝每台裝置成本為 10 美元,中國廠商或許只要 1 到 2 美元就能完成。為了每台省下 9 美元,實在不值得去承擔改變一套運作順暢流程所帶來的風險。

但接著,思考在中國製造這件事,讓我開始想像那會如何改變 TinyPilot 的辦公室。我們的架子上將不再堆滿數百個外殼、USB 線材和小的橡膠腳墊,因為這些都會直接放在製造商那裡。而如果原物料都放在製造商端,製造商也能追蹤庫存並依生產需求重新訂購補貨。

然後,我開始問自己,我們是否還需要 TinyPilot 的辦公室。

TinyPilot 辦公室都在做什麼?

目前,我們將 TinyPilot 辦公室用於六大主要功能:

  1. 存放庫存
  2. 組裝裝置
  3. 燒錄 microSD
  4. 測試組裝完成的裝置(品質保證)
  5. 打包與寄送客戶訂單
  6. 處理退貨訂單

沒有自己的辦公室,TinyPilot 還能執行這些功能嗎?讓我們來一探究竟!

存放庫存與組裝裝置

如果我們將製造移至中國,庫存管理實際上也會跟著移到中國。

如果運作順利,將庫存與製造外包將能簡化 TinyPilot 的許多工作流程。另一方面,一旦出問題,當製造商遠在數千英里之外,問題會變得嚴重得多。

如果由海外製造商接手裝置製造,TinyPilot 辦公室裡的許多工作就會突然消失。辦公室大部分的儲藏空間將被釋放出來,因為我們只需要存放成品。我們的庫存追蹤也會變得簡單許多,因為只需追蹤成品,而不需追蹤原物料或半成品零件。我們終於可以取消庫存追蹤工具的訂閱——那是我們技術堆疊中最令人沮喪、品質也最差的一套軟體。

進口貨物的時間應該會縮短。我們大部分原物料來自中國,如果一次以成品的形式全部收到,會比以原物料形式零散到貨容易管理得多。

我經常被卡在進口的關鍵路徑上,因為 DHL 偏好撥打包裹上的電話號碼,而不是寄電子郵件到我們的客服信箱。我們沒有辦公室電話,所以他們最後都直接打到我的手機。如果每個月只有一兩次送貨,數量少到 TinyPilot 的員工可以主動追蹤並在對方來電前先繳納進口關稅。而如果我們將製造外包並搭配 3PL(第三方物流) 廠商,我們甚至可以完全置身事外,因為製造商可以直接將貨品運送到第三方物流中心。

缺點是,這需要我們對製造商投入高度的信任。由於晶片短缺,我們必須為數個月甚至數年的產量囤積電子零組件。如果製造商遺失了一年份的某個零組件庫存,我們將陷入非常糟糕的處境。我們可以要求定期盤點並派遣第三方稽核人員,但我不確定如果製造商只是說:「哎呀,我們弄丟了你們價值 2 萬美元的庫存。」我能有什麼補救措施。

TinyPilot 的產品會經過許多小幅調整,隨著我們升級零組件或發現設計問題而改動。採用廠內製造時,我們能很快發現零件組裝不夠密合或某個元件承受過大應力的情況。若交由海外製造商,回饋週期會變慢。等到我們發現問題時,製造商可能已經用同樣的瑕疵生產了好幾百台。

燒錄 microSD

每一台 TinyPilot 都需要一張由我們燒錄好 TinyPilot 軟體的 microSD。我目前對 microSD 未被竄改有高度信心,因為燒錄後它們從未離開過我們的手中。在我們與客戶之間,唯一可能竄改 microSD 的人就是物流業者,而如果 USPS 想使壞,他們大概會有比 TinyPilot 更有意思的目標。

我不確定該如何外包燒錄 microSD 的流程。我們使用客製化、印有品牌的 microSD,而生產這些卡片的公司很樂意幫我們燒錄軟體。我對此有所保留,因為我覺得惡意軟體的風險太高。理論上,我可以隨機抽檢他們的成品,確認是否與我提供的映像檔相符,但即便如此也無法讓我完全安心。

印有 TinyPilot 品牌的 microSD 照片

我們目前有一家可以幫我們將映像檔燒錄到 microSD 上的廠商,但我仍有顧慮。

我們或許可以繼續自行燒錄 microSD,再寄給製造商。這假設製造商是誠實的,但這大概也是每家將電腦產品交由海外製造的公司所承擔的相同風險。

測試組裝完成的裝置

組裝完裝置後,我們目前會以人工方式測試,確保所有功能正常運作。

我們目前的測試設置速度慢、很複雜,而且很難交給製造商接手。這需要 TinyPilot 員工將新組裝好的 TinyPilot 連接到一台目標電腦,然後從第二台電腦用瀏覽器開啟 TinyPilot 的網頁介面。員工接著必須等待 TinyPilot 開機,然後驗證 TinyPilot 是否有正確擷取目標電腦的畫面,並準確轉發鍵盤與滑鼠輸入。

我們目前測試設置的手繪示意圖

TinyPilot 目前的 QA 流程需要兩台筆記型電腦以及相當複雜的線材連接。

將這個流程自動化一直列在我們的待辦清單上,但自動化需要硬體工程資源,而這正是我們目前最稀缺的資源。

把這些寫出來後,我意識到我們其實可以用現成的硬體加上僅需軟體工程資源來解決。我們應該能用 Raspberry Pi 打造一台 TinyPilot 測試機。

Raspberry Pi 具備 HDMI 輸出與 USB 輸入。我們可以將 Raspberry Pi 程式化為測試執行器,確認 TinyPilot 是否有擷取來自 Pi 的 HDMI 輸出畫面。Pi 可以驗證當它指示 TinyPilot 發送某個按鍵時,Pi 是否透過來自 TinyPilot 的 USB 輸入接收到相同的按鍵。這個測試將能讓我們確信新組裝好的 Voyager 2 一切連接與運作皆正常。

可能的簡化測試設置手繪示意圖

我們很可能可以透過將 Voyager 2 連接到 Raspberry Pi 並搭配一些客製化腳本,來自動化 Voyager 2 的 QA 流程。

到那個階段,我們只需要在測試裝置上有一個外部指示燈,來宣告 TinyPilot Voyager 2 是否通過驗證。這應該會是一個足夠簡單的測試設置,我們可以把 Pi 和網路交換器交給製造商,並教他們如何在他們那端進行測試。

這是一個很好的例子,說明思考如何外包某項任務,即使最終沒有外包,也能帶來好處。

打包與寄送客戶訂單

在我們所有工作流程中,訂單履行是目前最容易外包的一環。

我們隨時都有一批可直接出貨的包裝盒,因此我們可以將這些交給 3PL 廠商,而不是放在辦公室裡。

紙箱中已包裝好的 Voyager 2 照片

我們在辦公室裡存放已預先組裝好、隨時可出貨的 Voyager 2 包裝盒。

外包履行業務的好處是,讓我們原本就彈性的工時變得更有彈性。目前,TinyPilot 辦公室每週有六天、每天排班數小時。如果交給 3PL 廠商,只要我們組裝足夠的裝置維持訂單流通,就不需要在特定日子派人到辦公室。

我們也能釋放辦公室的實體空間,因為紙箱和包裝材料在我們狹小的辦公室裡佔據了大量空間。

另一個好處是客戶將有更多運送選項。我們目前只提供 USPS 和 DHL,因為與每家物流業者協調會增加複雜度。3PL 業者已經有與各大物流業者的每日取件安排,因此他們能輕鬆支援任何主要物流商。

運送速度或許會略微提升,不過這一點影響不大,因為 TinyPilot 已經有 90% 的訂單在一個工作天內出貨。

缺點是,3PL 廠商會增加複雜度。目前,我們的客服體驗非常出色,因為當客戶來信時,他們是直接與知識豐富的 TinyPilot 員工對話。而且很可能同一位員工就曾組裝、打包或寄送了他們的那台裝置。他們也有權限查詢運送狀態、取消訂單和安排退貨。

如果由 3PL 廠商履行的訂單出了問題,TinyPilot 的客服人員就必須向 3PL 廠商的窗口確認,而對方可能又得再向其他人確認,依此類推。

處理退貨

我不知道在沒有辦公室的情況下,我們該如何處理退貨。

我不會信任 3PL 廠商來整修 TinyPilot 裝置,但也不希望他們直接將退貨銷毀。

或許我們可以設置一個獨立的退貨地址,也就是一個郵政信箱。員工可以到郵局領取退貨、進行整修,然後再將其寄給 3PL 廠商,以整新品的形式販售。

我還沒和 3PL 廠商談過,所以他們或許有更好的解決方案。

當一切都外包後會發生什麼?

假設我們能成功將所有辦公室功能轉移到第三方廠商或不受地點限制的替代方案,那對我和公司而言意味著什麼?

我們將不受地點限制

目前,我們受制於實體辦公室。如果我們撤掉辦公室,理論上每一位 TinyPilot 員工都能在任何地方工作。

我們對時間的依賴降低

若無需負責履行與製造,我們唯一有時效性的責任就只剩下客戶支援。

我們對員工缺勤的韌性提升

在過去幾個月中,TinyPilot 的在地員工有幾次連續好幾天無法工作。有些是事先安排的休假,有些則是因為生病。

TinyPilot 有足夠的備援人力,得以在不影響客戶的情況下持續營運,但這確實對我們系統的其他環節造成壓力

如果我們將製造與履行外包,TinyPilot 要應對員工缺勤就會容易得多。我們將不再手忙腳亂地維持訂單出貨,因為我們已不再是履行流程中的關鍵路徑。

在地員工的角色轉變

外包的一大挑戰是它對現有在地員工工作的影響。如果我們撤掉 TinyPilot 辦公室並將製造與履行外包,那將會消除在地團隊目前約 75% 的工作。

在地團隊表現優異,我希望確保如果我們撤掉辦公室,他們在公司內仍有職位。

在地團隊仍將有客服工作。外包很可能會讓我們擴大銷售,因此更多的客戶將意味著對客服的更大需求。

在地員工也可以承擔更多對外聯繫的工作。過去,我們曾主動聯繫大型客戶、詢問他們對產品的使用體驗,並獲得了正面的成果。我們之所以不常這麼做,是因為時間有限,但如果釋放出時間,我們就能在這方面投入更多。同樣地,在地員工也能與更多評測者和 YouTube 創作者合作,這將有助於行銷。

我們減少繁文縟節

目前,TinyPilot 的在地員工是公司中唯一被法律歸類為「員工」的人。其餘所有人皆為獨立承包商。由於在地員工在公司據點工作,美國勞動法要求他們必須是員工而非承包商。

如果我們撤掉 TinyPilot 辦公室,員工就可以轉為承包商。我知道這聽起來像是:「我等不及要砍福利了!」但我認為我們可以用對大家都有利的方式來進行轉換。我的目標不是降低薪酬,而是減少壓力與文書作業。

在支付員工與承包商之間,複雜度有著巨大的差異。幾乎每個月,麻薩諸塞州的某個政府機關都會寄來一封難以理解的信件,告訴我有關預扣或合規要求的某些事項,但從來不清楚我到底需要採取什麼行動(如有)。

有些服務可以協助處理合規與正確繳稅事宜,但我從未找到特別好用的。當我把政府通知轉寄給薪資服務商 Gusto 時,他們只會告訴我必須自己打電話給政府機關去弄清楚。然後,當我撥打州政府機關的電話時,又會在語音選單中被轉來轉去,最後接到對我收到的通知一無所知的承辦人員,於是我只能置之不理,並祈禱這就是正確的做法。

承包商需要的文書作業少得多。我們可以調整薪酬,讓員工獲得與擔任員工時相當甚至更好的報酬,同時對大家來說都減少繁文縟節。

我們降低成本

外包也將降低成本,雖然這對我來說是最不吸引人的好處。

沒有辦公室,我們就不再需要支付房租(550 美元/月)、Gusto 薪資服務費(80 美元/月)、庫存追蹤費(59 美元/月)、勞工保險(30 美元/月)或租屋保險(10 美元/月)。

理論上,勞動成本也會因每單位降低幾美元而下降,因為中國製造商能以遠低於我們的勞動成本製造裝置,而 3PL 廠商則具備規模經濟,能以比我們更低的成本履行訂單。

我們降低彈性與敏捷度

將一切外包雖然優化了我們的「順利情境」,卻讓處理例外狀況或修正錯誤變得更加困難。

過去,我們能夠快速迭代產品,以減少外觀瑕疵並提升易用性。若一切外包,回饋週期將會變慢。我們可能要等到數位客戶回報後才會發現問題。到了那時,可能已有數百台裝置已經通過流程中的問題環節,正運往客戶或倉庫途中。

我們的錯誤率將上升

外包幾乎肯定會提高我們的錯誤率。目前的錯誤率已接近零。在過去 18 個月約 2,500 張訂單中,只有兩、三次客戶告訴我們寄錯商品或收到有製造瑕疵的商品。

即使是經驗豐富的製造與履行廠商,我想也無法達到我們在內部達成的錯誤率。不過,我認為目前的錯誤率遠比維持客戶滿意所需的還要好。我們可以承受約 0.3% 左右的錯誤率,而不會對客戶體驗造成重大影響。

外包會增加還是降低複雜度?

我外包的主要目標是降低複雜度。我仍在嘗試將我的管理時間縮減至每週 20 小時

我最大的擔憂是,製造與履行是 TinyPilot 中最不需要管理的部分,因此外包並無法幫我省回時間。為了建立可重複的工作流程,前期投入了大量工作,但自那之後就一直運作順暢。

我需要介入製造與履行的時候,通常是遇到零件短缺或客戶在配送上遇到夠特殊、需要升級到我這裡處理的問題。即使我們轉向外部廠商,我仍會介入這些問題,而且跨公司協調會更難處理。

同時,感覺上與外部廠商合作一定會比繼續維持我們自己土砲的製造與履行方案來得輕鬆。即使我們的辦公室運作順暢,光是維持辦公室及相關流程本身,就有可觀的心智負擔。

我希望我們目前在複雜度上處於一個局部最小值。轉換流程的摩擦會增加複雜度,但我認為外包最終會讓我們達到更低複雜度的狀態。

圖表顯示隨著我們優化流程,複雜度下降,接著在外包時大幅上升,然後在外包流程穩定後降至低於目前狀態的水準。

業餘專案

哈囉,Playwright;再見,Cypress

我自從在 2018 年的一場網頁開發聚會上看到 Gleb Bahmutov(格雷布·巴赫穆托夫)示範後,就一直是 Cypress end-to-end testing 工具的愛好者。多年來,我陸續聽到越來越多關於 Playwright(微軟對 Cypress 的競品)的討論。

一年前我試用過 Playwright,但並沒有留下深刻印象。我最近讀到一則 Hacker News 討論串,大家似乎一致認為 Playwright 已超越 Cypress,因此我又再次嘗試了 Playwright。

現在我必須承認,我同意 Hacker News 的看法。作為一項實驗,我將 PicoShare 的所有 end-to-end testing 用 Playwright 重寫。我發現 Playwright 在幾乎每個面向都比 Cypress 更容易使用。

我正在撰寫一篇更長的文章,詳述從 Cypress 移植到 Playwright 的過程,但簡短的結論是,對於網頁應用程式的 end-to-end testing,我現在會推薦 Playwright 而非 Cypress。

總結

完成了什麼?

  • 發布了 TinyPilot Pro 2.5.0。
  • 親自回覆了每一位在八月應徵技術支援工程師職位的人。
  • 聘請了第二位 TinyPilot 技術支援工程師。

經驗教訓

  • 僅僅思考如何外包任務,就能在現有工作流程中發現改善機會。

下個月的目標

  • 讓新進的技術支援工程師上手。
    • 我的目標是讓第一位能獨立回答 80% 的問題,第二位能獨立回答 50%。
  • 開始製作第二個金屬外殼原型。
  • 聯繫三家 3PL 廠商,洽談轉移履行業務的流程。

原文由 Michael Lynch 發布

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