TinyPilot: Month 27

Michael Lynch

TinyPilot:第 27 個月

原文由 Michael Lynch 發布,訂閱此部落格

一句話總結

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

本月亮點

  • 我正在進行一項思想實驗,思考 TinyPilot 是否能在沒有實體辦公室的情況下運作。
  • 思考外包迫使我正視現有工作流程中的低效之處。
  • 端對端測試工具 Playwright 徹底贏得了我的青睞。

目標成績單

每個月初,我都會設定當月想完成的目標。以下是這個月的達成狀況:

將 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 五埠金屬交換器的照片

如果 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 卡,因為燒錄後它們從未離開過我們手上。在我們與客戶之間,唯一有機會動手腳的就是物流業者,而如果 USPS 真想使壞,大概也有比 TinyPilot 更值得下手的對象。

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

印有 TinyPilot 品牌標誌的 microSD 卡照片

我們目前合作的廠商可以幫我們將映像檔燒錄到 microSD 卡上,但我仍有疑慮。

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

測試已組裝的裝置

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

我們現有的測試架構既慢又複雜,很難直接交給製造商操作。它需要一位 TinyPilot 員工將新組裝好的 TinyPilot 接到一台目標電腦上,再用第二台電腦的瀏覽器開啟 TinyPilot 的網頁介面。員工必須等待 TinyPilot 啟動,然後確認它是否能正確擷取目標電腦的畫面,並準確轉送鍵盤與滑鼠的輸入。

我們目前測試架構的手繪草圖

TinyPilot 目前的品管流程需要兩台筆電,以及不算簡單的線路連接。

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

寫到這裡,我才意識到我們其實可以用現成的硬體、僅靠軟體工程資源來解決這個問題。我們應該可以用 Raspberry Pi 打造一台 TinyPilot 測試機。

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

可能簡化後測試架構的手繪草圖

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

到了那個階段,我們只需要在測試裝置上有一個外部指示燈,顯示 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 辦公室並將製造與出貨外包,將會消除在地團隊目前約 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 這套端對端測試工具後,我就一直是它的愛用者。這些年來,我也越來越常聽到大家在討論 Playwright,這套微軟推出的 Cypress 競爭對手。

一年前我曾試用過 Playwright,但當時並沒有留下深刻印象。我最近讀到一篇 Hacker News 討論串,大家似乎一致認為 Playwright 已經超越了 Cypress,於是我又給了 Playwright 一次機會。

現在我必須承認,我同意 Hacker News 上的看法。作為一項實驗,我將 PicoShare 的所有端對端測試都改寫為 Playwright。我發現 Playwright 在幾乎每個面向都比 Cypress 更容易上手。

我正在撰寫一篇更長的文章,詳述從 Cypress 移植到 Playwright 的過程,但簡單來說,我現在會推薦使用 Playwright 而非 Cypress 來進行網頁應用的端對端測試。

總結

完成了哪些事?

  • 發布了 TinyPilot Pro 2.5.0。
  • 親自回覆了八月份所有應徵客服工程師職位的人。
  • 聘請了第二位 TinyPilot 客服工程師。

學到的教訓

  • 光是思考如何外包工作,就能發掘現有流程中的改進機會。

下個月的目標

  • 讓新任客服工程師盡快上手。
    • 目標是讓第一位能獨立回答 80% 的問題,第二位能獨立回答 50%。
  • 啟動第二款金屬外殼原型的製作。
  • 聯繫三家 3PL 廠商,洽談轉移出貨流程的事宜。

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

留言