TinyPilot: Month 17

Michael Lynch

TinyPilot:17ヶ月目

原文は Michael Lynch により に公開されました。 このブログを購読する

一行サマリー

たった1つのリンクを削除して売上が62%増加した方法

ハイライト

  • TinyPilotの売上が5万7,000ドルに急増し、持続する可能性も出てきた。
  • TinyPilotの新製品と新しいブランディングを間もなくローンチする予定だ。
  • サイドプロジェクトのGoogle Cloud Platform料金を90%削減した。

目標の自己評価

毎月のはじめに、その月に達成したいことを宣言している。結果は以下のとおりだ。

TinyPilotのウェブサイトのリブランディングを完了させる

  • 結果:リブランディングは95%完了したが、まだ公開していない。
  • 評価:B

デザイン会社とロゴのコンセプトとカラースキームは固めたが、新しいブランディングを公開する前に細部を詰めているところだ。

ハードウェアが準備でき次第、Voyager 2のローンチに備える

  • 結果:ハードウェアを受け取ってから1週間以内にローンチできる体制が整った
  • 評価:A-

Voyager 2に必要なカスタムハードウェアの調達は長い道のりだったが、製造が完了し先週最初のロットが届いたので、今週にはローンチできるはずだ。Voyager 1の需要に追いつくのに手一杯で想定より少し遅れているが、遅れは1〜2日程度で済む見込みだ。

TinyPilotの有料マーケティングチャネルの開拓を支援するマーケティング会社またはフリーランサーを雇う

  • 結果:優先順位の変化により見送った
  • 評価:対象外

いくつかのマーケティング会社と話したが、まだ誰かを雇う準備はできていなかった。現状でもTinyPilotの売上増に対応するのに精一杯なので、マーケティングは一旦中断し、現在の需要に応えるための生産拡大に注力している。

TinyPilotの統計

指標2021年10月2021年11月変化
ユニーク訪問者6,8987,983+1,085 (+16%)
総ページビュー13,00814,596+1,588 (+12%)
販売売上$34,927.55$56,626.33+$21,698.78 (+62%)
エンタープライズ向けサブスクリプション$48.00$47.75-$0.25 (-1%)
ロイヤリティ$6,804.53$8,185.78+$1,381.25 (+20%)
総収益$41,780.08$64,859.86+$23,079.78 (+55%)
利益$1,936.22$12,758.39+$10,822.17 (+559%)

製品を1つに絞ったことで売上がほぼ倍増した

供給不足のため、10月にTinyPilotの低価格モデルを廃止し、プレミアム製品であるTinyPilot Voyagerに絞った。製品カタログはVoyagerといくつかのあまり売れないアクセサリだけになったため、カタログページ自体を廃止することにした。

要するに、サイトのナビゲーションバーからリンクを1つ削除しただけだ。

古い製品カタログページのスクリーンショット
古い製品カタログページのスクリーンショット

TinyPilotのウェブサイトで行った変更の中で最も効果が大きかったのは、ナビゲーションバーの製品カタログページへのリンクを削除したことだった。

先月の振り返りで、売上が上向き始めていることに触れ、それが製品ラインナップの簡素化と関係しているのではないかと書いた。さらに1ヶ月分のデータが加わった今、それが大きな違いを生んだとほぼ確信している。

製品を1つに統合した後に売上が上昇傾向を示すTinyPilotの売上推移グラフ

製品を1つに統合する前後のTinyPilotの週間売上

これまでも売上のスパイクは何度かあったが、常にYouTubeでの紹介や人気サイトでのレビューといった明確なきっかけがあった。売上は急増した後、徐々に落ち着いていくのが常だった。

製品を1つに絞ってからは、売上は過去のスパイク時と同じくらい高い水準にあるが、一過性のイベントのときのように徐々に落ち着く気配がない。

もしこの売上増がカタログページの廃止によるものだとすれば、TinyPilotで行ったことの中で最も投資対効果の高い施策だ。たった1つのリンクを削除しただけで売上が62%も跳ね上がったのだから!

成長の痛みの再来

TinyPilotの最初の6ヶ月間は、成長に追いつくのに必死だった。売上は4〜8週間ごとに倍増していたため、常に新しいサプライヤーを探し、事業を拡大するためにプロセスを作り直さなければならなかった。その成長はエキサイティングであると同時に疲弊するもので、2021年の大半はより安定した予測可能なペースに落ち着けたことを嬉しく思っていた。

今回の売上増で、再び成長の痛みが戻ってきた。売上の急増に対する緊急時計画は用意しており、今年はそれがうまく機能してきたが、今回のような持続的な成長に対する計画はなかった。

電源コネクタの在庫切れ

最初に気づいたのは、電源コネクタの消費ペースが速く、次の基板の納入を待たずに在庫が尽きてしまい、Voyagerを販売できなくなるという事態だった。

TinyPilot Power Connectorの写真

TinyPilot Power Connectorの在庫切れまであと数日というところだった。

単品販売分を在庫切れとして表示したところ、消費ペースがちょうど良い具合に落ち、新しい出荷が届くまで持ちこたえることができた。

[余談:Voyager以外は何も売らないとあれだけ強調したのに、なぜ電源コネクタをまだ販売していたのか不思議に思うかもしれないので説明しておく。ついさっき大きな話をしたばかりなのに、ということだが、DIY TinyPilotガイド経由では、今でもTinyPilotのサブ製品の一部へのリンクが有効だが、TinyPilotのウェブサイトを訪れただけではユーザーはそう簡単には見つけられないようになっている。]

リボンケーブルの在庫切れ

次に、リボンケーブルの在庫が少なくなってきた。普段は大量にまとめ買いしており、手元に大量にあるため在庫システムで管理するほどでもないと考えていた。しかし管理していなかったせいで、最後の注文が遅れていることに気づかなかった。残りはわずか30本で、数日分のVoyagerを作るのがやっとの量だった。

TinyPilotで使用しているリボンケーブルの写真

70mmリボンケーブルを切らしたせいで、TinyPilotの販売がほぼ止まりかけた。

私たちが使っているのは非標準サイズのリボンケーブルのため、特注で取り寄せている。リボンケーブルというしょうもないものが原因で、何週間も販売を止めなければいけなくなるのか?

幸い、サプライヤーが注文を早めてくれ、数日以内に新しいケーブルを届けてくれた。さらに慌てて1,500本を追加で買い込んだので、しばらくは大丈夫なはずだ。

加えて、今後はこれらのケーブルも通常の在庫システムで管理することにした。これまでの非公式な管理では、「そろそろゆっくり注文する頃合い」と「これは緊急事態だ」の区別がつきにくいと分かったからだ。

3Dプリントのスケーリング

最後の不足は、まだ解決していないケースの問題だ。私たちは常にケースを3Dプリントしてきた。素早く改良を繰り返せる柔軟性があるからだ。使用している3Dプリント素材は高級感のある手触りで、顧客やレビュアーからもケースの品質について頻繁に好評を得ている。

問題は、3Dプリントは遅いということだ。特に私たちが使っている素材ではなおさらだ。Voyager 1のケース1つをプリントするのに8時間かかる。Voyager 2では12時間かかる。3Dプリントの外注先は私たちのためにプリンターを1台追加で購入してくれたが、Voyager 2に切り替えれば新しい生産能力でも足りなくなると予想している。残念ながら、売上が伸びるたびにベンダーがプリンターを買い増せるわけではない。

短期的には、TinyPilotのEU代理店が私たちからケースを購入する代わりに現地でプリントしてくれることになったため、プリンターの負荷が約30%軽減される。長期的には、3Dプリントのベンダーとともに、より速くプリントできつつ高級感を保てる別の素材を模索している。射出成形を再検討する時期かもしれない。初期費用は2万〜4万ドルかかるが、週に数千個を生産できる。

サイドプロジェクトのGoogle Cloud Platformからの移行

この振り返りでは主に本業に焦点を当てているが、先月はサイドプロジェクトをGoogle Cloud Platform(GCP)から移行する作業を楽しんだ。

使い始めたのは約8年前だ。当時、ほとんどのクラウドプロバイダーはウェブアプリのホスティングに月10〜20ドルを請求していた。App EngineやFirebaseといったGoogleのサービスは、小規模プロジェクトなら月0ドルまでスケールダウンできたため、実験がしやすかった。毎月20ドルを払い続けなければならないとなれば、新しいプロジェクトを公開する気も削がれるが、そうでなければ気軽に公開できる。

今日では、GCPは小規模プロジェクトにはたいてい不向きな選択肢だ。サービスが肥大化し複雑すぎて、基本的なウェブアプリを1つ作成してデプロイするだけでも、設定や権限をいじって約1時間かかってしまう。幸い、GCPに代わる優れた選択肢があり、コストが安く、開発体験も良く、カスタマーサポートも優れている(というか、そもそもサポートが存在するという意味で優れている)。

長年GCPを使ってきたため、多くのサイドプロジェクトが今もGoogle Cloud Platform上で動いており、サービス料金がどんどん積み上がっていた。先月は夜や週末を使って、最もコストのかかっているサービスをGCPから移行した。

大移行前のGCPコストは次のようになっていた。

8月から10月までの合計252.71ドルのGCPコストのグラフ

2021年8月から10月にかけてのサイドプロジェクトのGCPホスティング料金

そして移行が完了した後のコストがこちらだ。

ゼロに向かって推移するGCPサービス料金のグラフ

11月にGoogle Cloudの代替サービスへ移行した後のGoogle Cloud料金

HTTPロードバランシング - 月37ドル

HTTPロードバランシングは大きな落とし穴だった。

What Got DoneとWanderJestでは、ユーザーが画像をアップロードできるようにし、アップロードされたファイルはGoogle Cloud Storage(GCS)バケットに保存している。デフォルトでは、GCSのURLはhttps://storage.googleapis.com/whatgotdone-public/...のような長くて見栄えの悪いものになる。私はhttps://media.whatgotdone.comのようなすっきりしたURLにしたかった。

このシンプルな80ステップのプロセスが、GCSのファイルをサブドメインから配信するGoogle流のやり方だ。静的IPv4アドレスの確保、HTTPロードバランサーの設定、TLS証明書の生成などが含まれる。私はこれらのステップをすべて実行したが、ロードバランサーによってサイトごとに月約18ドルのコストが上乗せされるとは気づいていなかった。

BunnyCDNに切り替えたことで、このコストを大幅に削減できた。CDN全体を設定するのは面倒だろうと思っていたが、驚くほど簡単だった。BunnyCDNというサービスを見つけてから30分もしないうちに、media.whatgotdone.comドメイン経由でGoogle Cloud Storageバケットの配信が始まった。やったことは、BunnyにGCSバケットのURLと使いたいサブドメインを教え、DNSレコードを追加しただけだ。

BunnyCDNのプルゾーン設定ページのスクリーンショット

BunnyCDNでは、わずか3ステップでGCSバケットのドメイン名をカスタマイズできた。

BunnyCDNの最低料金は合計で月1ドルだが、Googleはサイトごとに月約18ドルだ。私は最低料金を大きく下回っている。これまでの帯域幅使用量は78.55MBなので、料金にすると約0.0008ドルだ。仮にBunnyCDNの最低料金を超えたとしても、帯域幅の単価はGoogleの10分の1以下だ。

帯域幅 - 月21ドル

送信帯域幅の料金は主にこのブログとIs It Ketoによるものだ。両サイトともGoogle Firebaseでホスティングしており、帯域幅料金は0.15ドル/GBだ。サイト全体で月に約150GBの帯域幅を提供しているが、ブログの読者が急増するとその3倍になることもある。

他の静的ファイルホストも探してみたが、なぜかほぼすべての静的ホスティングプロバイダーがCI(継続的インテグレーション)ワークフロー全体を乗っ取ろうとしてくる。私はそれを望んでいない。CIはCIベンダーに、ホスティングはホスティングプロバイダーに任せたいのだ。

以前Netlifyも検討したが、「CIはうちに任せろ」タイプのホストだと思って除外していた。ところが、Siddhant Goelが教えてくれたNetlifyの「手動ビルド」モードなら、CI関連の面倒をすべてスキップできる。月19ドルで帯域幅400GB、それ以降は0.20ドル/GBというプランなので、訪問者が急増する月がまれにあっても、支払いは月20ドル程度で済む。

App Engine - 月13ドル

最後に残った大きなコストは、What Got DoneのApp Engineホスティングだった。長年、コストは月2ドル程度だったが、7月に突然月10〜15ドルに跳ね上がった。理由はわからない。

幸い、What Got Doneは標準的なGoのウェブアプリなので、App Engineで動かす必要はない。より厄介な依存関係はデータ用のGoogle Firestoreだった。App EngineとFirestoreを別々に移行することもできたが、Googleのサービスアカウントや権限周りの対応があまりにも面倒なので、両方のサービスから一度にきっぱり離れることにした。

Firestoreの代替として、SQLiteLitestreamを使った。SQLiteはすべてを単一ファイルに保持するシンプルなSQLデータベースだ。LitestreamはSQLiteデータベースをクラウドに同期するツールだ。これらの技術はLogPasteの構築にも使ってうまくいったので、さらに投資したいと思った。

App Engineの代替としてはfly.ioを使った。この1年ほどfly.ioを試してきたが、常に良い体験ができている。ドキュメントは明確で、ツールは期待通りに動き、創業者やリードエンジニアがサポートフォーラムで積極的に対応してくれる。

fly.ioへの移行は主にコスト削減とベンダーロックインからの脱却が目的だったが、結果としてパフォーマンスも劇的に向上した。What Got DoneのほとんどのAPIリクエストは、SQLiteとfly.ioに移行した後、2〜20倍高速になった。

App Engineとfly.ioのパフォーマンス比較グラフ
リクエストApp Engineレイテンシ(ミリ秒)fly.ioレイテンシ(ミリ秒)レイテンシ削減率
最新エントリーの取得745.327.396.3%
ユーザープロフィールの取得300.029.390.2%
パーソナライズされたフィードの取得572.068.788.0%
ユーザーの全エントリー履歴の取得215.762.071.3%
インプレッション数の取得349.720.094.3%
エントリーの投稿183.372.760.4%

過去のプロジェクト

ここでは、現在もメンテナンスは続けているが開発の主軸ではないプロジェクトについて簡単にアップデートする。

Is It Keto

指標2021年10月2021年11月変化
ユニーク訪問者20,32117,790-2,531 (-12%)
総ページビュー47,48740,722-6,765 (-14%)
ドメインレーティング(Ahrefs)11.015.0+4.0 (+36%)
AdSense収益$230.64$235.36+$4.72 (+2%)
Amazonアフィリエイト収益$27.76$26.25-$1.51 (-5%)
総収益$258.40$261.61+$3.21 (+1%)

Is It Ketoは今もバックグラウンドで細々と収益を上げ続けている。今月の唯一の変更は、FirebaseからNetlifyへ移行したことで、これによりホスティングコストが削減された。

Hit the Front Page of Hacker News

指標2021年10月2021年11月変化
ユニーク訪問者100159+59 (+59%)
Gumroad収益$75.27$94.57+$19.30 (+26%)
Blogging for Devs収益$0.00$0.000
総収益$75.27$94.57+$19.30 (+26%)

私のブロギング講座は先月もいくつか売れた。ブラックフライデーセールをやろうかとも考えたが、ビジネスのことを考えずに過ごす連休を楽しんでいたのでやめることにした。やらなくてよかったと思っている。代わりにWhat Got Doneをいじるのを存分に楽しめたからだ。

Zestful

指標2021年10月2021年11月変化
ユニーク訪問者613576-37 (-6%)
総ページビュー1,4261,489+63 (+4%)
RapidAPI収益$99.74$727.17+$627.43 (+629%)
総収益$99.74$727.17+$627.43 (+629%)

Zestfulは今月、約700ドル分のリクエストをしてくれた新規顧客のおかげで大きく伸びた。顧客名に見覚えがあったのでメールを確認したところ、3年前に私から営業をかけ、丁寧に断られていた相手だった。考えるのに数年必要だったのだろう。

まとめ

何を成し遂げたか?

  • TinyPilot 2.3.1をリリースした
  • Voyager 2のローンチ準備をした
  • What Got DoneをGCPとFirestoreからfly.io、SQLite、Litestreamへ移行した
  • このブログ、Is It Keto、その他いくつかの静的サイトをGoogle FirebaseからNetlifyへ移行した

学んだこと

  • 売上が上向き始めたら、早めにスケーリングを考え始めること。
  • Google Cloud Platformは小規模プロジェクトにはたいてい不向きだ。

来月の目標

  • Voyager 2をローンチする。
  • TinyPilotのリブランディングをローンチする。
    • 今度こそ本当に。
  • 需要に慌てて対応しなくても済むよう、十分な在庫を積み上げる。

注記:この記事ではいくつかのサービスに触れたが、顧客としての関係を除き、いずれともビジネス上の関係はない。ブログで一見純粋な製品推薦を読んだ後に、実は筆者が紹介料で利益を得ていたと知るのが嫌いなので、紹介ボーナスやアフィリエイト報酬が発生するリンクは意図的に使っていない。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント