スピードを捨てる: 成長期の個人開発アプリを頓挫させないための戦略

Share
スピードを捨てる: 成長期の個人開発アプリを頓挫させないための戦略

スピードを捨てる: 成長期の個人開発アプリを頓挫させないための戦略

MarkdownノートアプリのInkdropを一人で作っています。去年の頑張りのお陰で幸いにも月間20万を超える収益化に成功しました。アイデア出しから収益化までの道のりはこちらに書いた通りです。

さて、今後このサービスを継続して成長させていくためには、立ち上げ期とは少し異なる戦略が必要です。それは、課金してくださっている顧客を守る事です。なぜなら、ノートアプリの本質は知見の管理だからです。長く使うほどその価値が発揮されます。なので、当初から事業の継続性は最重要視していますが、運用・保守面においてもより一層気を配らせていく必要があります。

本稿では、個人開発における事業立ち上げ後の成熟化に向けた心構えや戦略について考えたことを書きたいと思います。

立ち上げ当初はとにかく勢いを大事にしました。頻繁に新バージョンをリリースして、ブログを書いて、盛り上がりを演出しました。開発では、テストを書かずにスモークテストのみでユーザさんと一緒にデバッグしていく攻めの手法を採りました(詳しくはこちらの記事を参照)。マーク・ザッカーバーグが言った “Done is better than perfect.” の理念の実践です。幸いにもそのアプローチが功を奏して、一定数の課金ユーザを獲得できました。

一方、この戦略はスピード至上主義なのでとにかく体力と気力を使います。たとえ適度に休みを取っていても長続きしない戦略です。カーブを無視してずっとアクセルをベタ踏みしているようなものだからです。いずれ体を壊して燃え尽きてしまうでしょう。あるいは成長を焦るあまりスキが生じて、先般のコインチェックに起きた仮想通貨盗難のような事態に陥りかねません。大事なデータを預かる身として、あれは他人事とは思えない事件です。

今使ってくださっているユーザさんは、立ち上げを支えてくださったこのプロジェクトのパトロンと言っても差し支えないと思います。みなさんのお陰で、腰を据えてじっくりと取り組む余裕ができました。アプリを更に成熟させていくために、ここでスタートダッシュからロングランニングのペースにギアチェンジしたいと思います。

成長期の戦略について語る前に、まずメンタル面で自分の身に何が起こっているのかをシェアしたいと思います。

ユーザ数の増加に伴って、機能要望も増えました。ありがたい反面、はやく期待に応えなければ、というプレッシャーになっているのも事実です。また、個人開発では「納期」が明確に無いというのも実は落とし穴になり得ます。納期がないということは、リリースは早ければ早いほうが良いという事になります。ですが1つのリリースが終わってもやることは無限にあるので、焦りと相まってペース配分が狂いがちになります。さらにライバルアプリとの競争もあります。気づけば、ずっと何かに追われるように毎日を過ごしています。

好きで始めたプロジェクトが自身を苦しめるのは本末転倒です。コンソール画面を開いて、「ああ、しんどい。やりたくない」と思ったら一度立ち止まる必要があります。好きなことを追い立てられてやるのは奇妙です。何か大事なことを疎かにしまっていることに気づく必要があります。

僕はもともとせっかちなので何事も「早く、早く」と考える癖があります。そのせいかストレスを溜めやすい体質で、それが体調にもしばしば影響を及ぼします。このままでは潰れてしまいかねないので、今降り掛かっているこの焦燥感やプレッシャーと上手く付き合っていかなければなりません。

こういった悩みは職種を問わずよくある話なのではないでしょうか。どうやら僕も例に漏れず、「フリーランスで個人開発だから気楽でいいね」とは行かないようです。

限界に達したイヌさん

前述の通り、サービスの成長に伴ってプレッシャーや焦燥感が自分に見舞われていることが分かりました。その原因を整理すると以下の通りです。

  • 期待に応えたいという気持ち
  • 納期の無い開発計画
  • ライバルとの競争
  • せっかちな自分の性格

このストレスから、楽しいはずの開発が苦痛になりつつあります。このままでは燃え尽き症候群になりかねません。最初に述べたとおり、このサービスは継続的に提供することが本質的価値で、続けることに大事な意味があります。そのためには心身のストレスを軽減する事が第一です。そこで考えたのが「ゆっくり・じっくり戦略」です。

この「ゆっくり・じっくり戦略」は、その名の通りペースを今までより少し落として、焦らずじっくり課題に取り組むという戦略です。スピード戦略の派手な活動は負担が大きいのでやめます。その代わり、サービスとしての深みを目指して、結果を焦らず、今喜んでくださっているユーザさんを更に満足させることにじっくりと取り組みます。具体的には:

  • リリースの頻度を落として中長期的目線で開発する
  • ゆるく計画を立てる
  • ライバルを相手にしない
  • ゆっくり動作を普段から心がける

以降より詳しく説明します。

フォーラムで機能要望やバグ報告があると、早いときは数時間以内に対応していました。このように機能追加や修正の速さをウリにしてきましたが、これをやめます。すべての対応を緊急レベルでするのはこの段階では過剰対応です。一部では、バージョンアップが頻繁すぎて鬱陶しいという声も上がっていました。

表面的な機能追加ばかりを急ぐことにも副作用があります。それは、コードベースが徐々に汚くなりメンテ性が失われることです。目先の対応ばかりにとらわれると、古いコードの変更が難しくなります。まるで高く積み上げられたブロックの塔のように。この問題はニコニコ動画の開発難航など、身近なサービスにも見られます。

リリースを急がない代わりに、中長期的目線で開発します。例えば、JavaScriptのプログラムに静的型付けのFlowを段階的に導入します。そして軽めのテストも書きます。カバレッジはこだわりません。既にプロダクションでの動作実績があるからです。レグレッションをある程度防ぐことがFlowとテスト導入の目的です。完璧は目指しません。また、モバイル版とデスクトップ版のコードを丁寧に共通化して、コードの分散を回避します。一部をGitHubに公開しています。セキュリティの更なる強化も検討しています。具体的には、End-to-end encryptionの導入です。

このように、機能的には一見変化がありませんが、堅実な成長を助ける取り組みを行います。リリースのペースを落とすことで、ユーザさんから「対応まだですか?」と言われることが増えるかもしれません。その時は正直に今取り組んでいることを伝えて、理解してもらえるように尽くします。 “I appreciate the feedback but I did it this way because …” という感じで。期待にすぐ応えられないからといって、罪悪感にかられる必要は全くありません。ひいてはユーザさんのためになるからです。

受託開発では契約に対して納期という明確なデッドラインがあります。それに向けてペース配分をすればいいので、よっぽど逼迫したスケジュールでないかぎりストレスで潰れることはありません。

個人開発でもスケジュールをざっくり引くことにします。Inkdropではロードマップを公開していますが、その各項目の納期をそれぞれ設けます。問題は、その納期をタイトにしてしまう事です。僕は先述の通りせっかちなので、余裕を持ったスケジュールを引くよう意識する必要があります。

また、早く終わったからといって空いた時間を別のタスクで埋め尽くすのを出来るだけやめます。余剰時間は余暇や勉強の時間にあてたり、視野を広げることに使います。

プログラマー向けのノートアプリというのは、個人の好みが強く出るタイプのアプリです。新しいアプリが日々続々と登場しています。中には、Inkdropのユーザを奪おうとする好戦的なプロジェクトも見られます。サービスを運営する中で、彼らは嫌でも自分の目に飛び込んできます。

しかし次のBasecampのDHH氏の言葉のように、ライバルを気にしすぎることは視野狭窄を生みます。

Overanalyze other products and you’ll start to limit the way you think. — “Getting Real” by DHH

もともと自分のこだわりを実現するために作ったアプリです。今のユーザさんはそこに共感してくださった方々です。競合アプリと張り合うと、無駄な機能が増え、互いに似通っていきます。こだわりは薄れて、良さが失われるでしょう。

自分のアプリが世界で一番などとは思っていません。どのアプリを使うかは好みの問題です。ニッチのマーケットでお互いを潰し合うのはナンセンスです。ユーザを奪い合うより、マーケットを大きくするほうが建設的ではないでしょうか。だからInkdropはライバルと戦わないことに決めました。

春まだー?

焦り癖を直すには、普段から落ち着いた言動を心がける事が有効でしょう。この自分のせっかちな性格は後天的なものです。大人になってから感情の癖はすぐに直すのが難しいかもしれませんが、出来ないことではないでしょう。

「浅い川はせわしなく流れて、深い川はゆっくりと流れる」という言葉があります。結果を出すことに執着するのは、負担が大きく長続きしません。深みのあるクオリテイを求めるには、時間をかけてゆっくり取り組む過程が必要不可欠だということです。

ゆっくり動作は、素早い動作よりも高度な芸当です。僕は10代〜20代の頃バンドでドラムをやっていました。初心者の頃、本番のライブになると緊張してついテンポが走ってしまうことがよくありました。テンポの遅い曲ほどタイミングを合わせて叩くのが難しい。歌や他の楽器でもそれは同じだと聞きます。

山登りでは小休止が重要と言われています。1時間歩いて、10分休む。その方が、休みを取らずにがんばる登り方よりもずっと早く山頂に立てます。

ビジネスの世界では、速いことが正義です。とにかく取引を効率化・高速化することで今日の経済にまで発展させてきました。ファストフードやファストファッションなど、高速で大量に消費されるものが僕らの周りには溢れています。なのでとにかく速ければ良いのかとつい思ってしまいがちです。しかし一方で、ワインや梅干しのように時間をかけたほうが良いとされるものもあります。革製品の経年変化もまた然り。時間をかけて作られたものには、深みがあり、一朝一夕では真似出来ない魅力があります。

僕はこれまで仕事に速さを追求してきましたが、30代は深みを追求するフェーズかもしれません。まだまだ成長できそうです。まずは言動から直していきます。

本稿では、好きなことを長く続けるために考えた戦略をまとめました。最後に、 DHH のこの言葉を紹介したいと思います:

Optimize for HappinessA happy programmer is a productive programmer. We optimize for happiness and you should too. — DHH幸福に焦点を当てる幸せなプログラマーは生産的なプログラマーだ。僕らは幸福に最適化しているし、君もそうすべきだ。 — DHH

よりよいものを継続して作るためには、より楽しめる環境づくりが大切です。「これがリリースできたら・・」「ここさえ乗り越えられたら・・」という考え方は心身を摩耗させるやり方です。結果に執着せず、今を楽しみましょう。

みなさんの個人開発の参考になれば幸いです。

ぜひお試しを — https://www.inkdrop.app/

Read more

個人開発で日本から海外へ、10年間の歴史 — ひろしさんとの対談(前編)

個人開発で日本から海外へ、10年間の歴史 — ひろしさんとの対談(前編)

数週間前、ひろしさんのポッドキャストにゲストで出演しました。お互いの長い個人開発の経験について語り合いました。英語版を作成する過程で、日本語でも綺麗に整形した書き起こしが出来たので、こちらに掲載します。お楽しみください。 ※ギアアイコンをクリックして、音声と字幕を日本語に変更できます。 00:00 イントロ:TAKUYAさんようこそ 01:32 TAKUYAさんの自己紹介:WalknoteからInkdropまで 04:54 独立への踏み切り方:慎重派と勢い派 06:51 個人開発がフリーランス案件につながった 09:17 Inkdropで食えるようになるまで 12:15 なぜ最初から海外市場を狙ったのか 14:54 AI登場前、英語コピーに苦戦した話 16:18 AIバイブコーディング時代をどう見ているか 17:24 全てのコードを一行ずつレビューする使い方 21:06 AIは新幹線:速さの先にあるもの 25:53 AI時代に「感性」が大事になる 27:

By Takuya Matsuyama
「一汁一菜」にAI時代の生き方が詰まっている

「一汁一菜」にAI時代の生き方が詰まっている

どうも個人アプリ作家のTAKUYAです。 今回は、AI時代を開発者・クリエイター・表現者としてどう健やかに生きるか、について考えていることをシェアしたいと思います。ここでの「健やかに生きる」とは、心身の健康を保ちながら、ものづくりを楽しみ続けるという意味です。 読者の中にも、最近のAIの急速な進化の中でどう生き残り、さらに活躍していくかを悩んでいる方は多いのではないでしょうか。正直、すべてに対する正解はわかりません。未来を正確に予測できる人はいないからです。 でも自分は、ソフトウェア寄りのアーティストとして生きる上で大事なのは、「戦略」や「堀(moat)」を築くことよりも、「生きる方向性」 だと思っています。 人生とは速度ではなく方向である – ゲーテ 自分はどこに行きたいのか?何を見たいのか?それが大事です。戦略は状況に合わせて柔軟に変えればいいからです。 今回は、日本の文化からいくつかの生き方の原則を探ってみたいと思います。 最近、料理研究家の 土井善晴 さんの 「一汁一菜でよいという提案」 を読んで、日々のリズムを健やかに保つためのヒントがたくさん詰まっていると感じまし

By Takuya Matsuyama
Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

💡本記事は英語ブログの日本語訳です。 どうも、TAKUYAです。 AIコーディングでは専らClaude Codeを使っています。最初はtmuxでターミナルの右側にペインを分割して使っていたのですが、幅が狭すぎてメッセージやdiffがまともに表示できず、使いづらかったです。 <Prefix>+zでペインを最大化すればいいのですが、毎回やるのは面倒でした。 そこで、ポップアップウィンドウでClaude Codeを起動するようにしました。キーバインドを押せばセッションが開き、閉じてもバックグラウンドで動き続けるので、すぐに再開できます。 この記事では、それを実現するためのtmuxの設定方法を紹介します。 動画で見る(英語): ポップアップウィンドウはサブプロセスを維持できない tmuxのdisplay-popupコマンドを使うとポップアップウィンドウを表示でき、ちょっとしたツールにすぐアクセスするのに便利です。 僕はlazygitでgitの状態をサッと確認するのに使っています: bind -r g display-popup -d '#{pane_current_path}'

By Takuya Matsuyama
Keychron K2 HEを無刻印化する手順

Keychron K2 HEを無刻印化する手順

どうもTAKUYAです。KeychronさんにK2 HEをお願いしたら音速で送ってくれたので、無刻印化してみました。どうやったのか過程をシェアします。 Unboxing 上はKeychron Q1です。これは3年間ぐらい使ってきました。キーキャップが若干くたびれていますね。でも問題なく今まで使えていました。そろそろ飽きてきたので新しいキーボードを試したいと思い、前から気になっていたK2 HEを試すことにしました(写真下)。 Amazon | 【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、2.4GHz・Bluetooth無線対応、QMKプログラム可能、アルミ+ウッドフレーム、USレイアウト、RGBライト、Mac Windows Linux対応 (ブラック) | Keychron | パソコン用キーボード 通販【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、

By Takuya Matsuyama