こんにちは丸山@h13i32maruです。
私は20年前の高専3年ごろに、当時ハマっていたオンラインゲームのツールをHSP(Hot Soup Processorって今も開発続いててすごい!)で作って、自分のホームページに公開していました。ユーザは自分以外だと2〜3人しかいませんでしたが、すごく楽しかった記憶があります。これが私の個人開発の原体験です。それから現在に至るまで個人開発を続けています。
ここ数年で特に気に入っているのは、Jasper(GitHub用のIssue/PRリーダー)やTrickle(自分のアクティビティを書き留めるサービス)です。今は開発していませんがOSSとしてESDoc(JSのドキュメンテーションツール)というものも作っていました。最近だとMTG Playbookというマジック・ザ・ギャザリング用のオールインワンアプリを積極的に開発しています。この20年で大小合わせて20個ぐらい作ってきたと思います。
そんな感じで個人開発は私にとってライフワークになっています。ですが、数年前に子どもが生まれ(現在4歳、大変かわいい!!!)、個人開発を含めて自由に使える可処分時間が20代のころと比べるとすごく少なくなっています。それと年々体力も落ちてきており、平日は育児家事と仕事(Ubieというヘルステックベンチャーに勤務)をするだけで体力0になります。土日も無限の体力を持つ子どもと過ごすので精一杯です。
今回はそんな状況でも個人開発を続けるにあたって、考えてることをまとめました。あくまでも自分向けのメモという感じなので、読みにくかったりそもそも前提が違うなどあると思いますが、ご了承ください。
可処分時間は共有資産
我が家では「可処分時間をお互いの共有資産として考えて、夫婦で協力してそれを作り出す」という共通ゴールをもった協力関係になるように意識してる。
よくある(?)自分の可処分時間を作るために、「奥さんのポイントを貯める」というマインドは個人的にはあまりしないように意識している。このマインドでは「ポイントをあげる人、受け取る人」という対立構造や上下関係になってしまうし、「ポイントをあげる人 = 育児家事のメイン担当」のようになると感じるからだ。もちろん作り出せた可処分時間をお互いがどう使うかは相談し、一方的に使わないようにしている。
それと、個人開発は平日の日中にやるようにしており、早朝深夜の個人開発は極力さけている。早朝深夜にやってしまうと、自分の場合は日中のパフォーマンスが凄く落ちるので、結局育児家事に悪影響がでるためである。
という点を意識はしているが、可処分時間の確保については各家庭の事情が一番影響する。そういう意味で我が家は非常に恵まれた状況であり、大変助かっている。「奥さんが週3〜4日勤務」「お互いが、相手の可処分時間の使い道に寛容」「夫婦ともに家事スキルが同程度であり不満が無い」「夫婦ともに育児は好きで楽しいと思っている」など。
目的外のことはしない
個人開発をする理由は人それぞれだろうけど、自分の場合は「ものを作るのが楽しいから」というのに尽きる。技術学習や収益というのは目的としていない。まあ結果として得られると嬉しいというのは当然あるけど。
この楽しさの具体は年々変化しており、最近は「自分の課題を解決するのが楽しい」「全部自分で意思決定して開発できるのが楽しい」が特に強い。その次に「使ってくれる人の声を聞くのが楽しい」という感じ。
この「個人開発の目的」をはっきり意識して、そこを軸に続けていくようにしている。なので自分の場合は「自身には無い他人の課題を解決することはしない」「意思決定は必ず自分の考えを判断軸にして、他人の考えを判断軸にしない」というのはかなり意識してる。
継続すために薪をくべる
ほそぼそでもいいから、とにかく継続することを意識している。「楽しければ勝手に継続する」と昔は思っていたが、それは「時間を使える」という前提ありきだと年々思うようになった。自分の中にある興味や熱量というのは、自分で薪をくべる必要があり、それは意識しないと途絶えてしまう。
具体的には何をしてるかというと、
- 先述した「目的を意識する」は継続性にかなり聞いてくるので大事
- ファンの声を聞く(後述)
- 要望やクレームなどに過度に対応しない
- 「面倒だな」「自分はいらないな」と思ったらスルーしたっていい
- 特にGitHubで公開してる場合、issueやPRへの対応で燃え尽きないようにする(過去にこれで少し疲れてしまったことがある)
- お金で楽にできるものは可能な範囲で取り入れる
- 最近はインフラ・サーバ・DB周りはすべてGCPでやっている
- もっと色々なものを組み合わせて安くする選択肢もあると思うけど、トータルで楽できるのを優先
- できるだけ息の長そうなツールやライブラリを採用する
- それができれば苦労しないんだけど、意識はしておく
- 個人的に成功したなーと思うのは、2016年からElectronを使い始めて、2017年からReactNativeを使っており、どちらも今も活発に開発されている
ウォーターフォールでやる
課題やソリューションの不確実性が高いプロダクトの開発はアジャイル(仮説・実装・検証を細かく繰り返す)でやることが多いと思うし、仕事では実際にそうしている。けど、個人開発ではウォーターフォール(工程一個ずつに時間を使い、前工程になるべく戻らない)でやっている。
自分の場合は前提として「自分の課題を解決するプロダクト」なので、課題やソリューションの不確実性は低めである。むしろ最近は「そもそも完成までもっていけるか?」という不確実性のほうが大きい。これは「完成までに必要な総開発時間を使えるか?」という話とほぼイコールである。
しかし、前述した「可処分時間」を作っても、基本的には時間は足りない。なので、育児家事をしてる時や合間の細切れ時間をうまく使う必要がある。この細切れ時間に脳内で「ソリューション検討 → 仕様設計 → UI設計 → システム設計」という工程をウォーターフォールで進めている。自分はこの一連の工程を「煮詰める」と呼んでいる。ちなみに、前工程に戻るというのはよくあるので、完全なウォーターフォールではないけども。
そうすることで、まとまった時間では手を動かすこと(FigmaでUI作ったり、テーブル定義作ったり、コード書いたり)に集中できる。また、細切れ時間で煮詰めることのメリットとして、昨日困っていた問題が寝て起きたらいいアイデアが浮かぶというのがよくある。これは煮詰めるという行為によって、脳のバックグラウンド処理が活性化されてるのかなと思ってる。
とはいえ、煮詰めることもかなり気力が必要になる。なので、「今月は開発を進めよう!」となってるときにしかしていない。
収益化しない
過去に有料アプリを販売したことがあるけど、すごく難しかった。シンプルに利用開始までのハードルがあがるし、そこを乗り越えるために無料バージョンやマーケティングなどに時間を使うことになってしまう。購入してもらった後は、品質担保やサポートも特に意識しなければならない。
それと広告もつけないポリシーでやっている。これは自分が使うなら広告が無い方がいいし、広告導入や運用に時間を使いたくないから。
というわけで、現在は収益化は一切考えないことにした。収益化に関して時間を使うなら、その時間を純粋にプロダクト開発に使いたい。とはいえサーバ代などの運用費は辛いので、GitHubスポンサーなどの投げ銭スタイルをやっている。幸運にも投げ銭をしてくれるユーザがいて大変ありがたい。
ファンの声を探す
プロダクトのファン(であろう人)の声を意識的に探すようにしている。プロダクトを改善するための有益なフィードバックが含まれるし、何よりやる気につながる。主にXのエゴサとアプリストアのレビュー。あとはプロダクト内にGoogleフォームを置くのもお手軽でおすすめ。ちなみにエゴサしやすいような名前付けは重要(個人的にはエゴサしづらい名前をつけがち・・・)。
特に嬉しいのはプロダクトの感想や自分の使い方などをブログに書いてくれること。これを見かけたときはめちゃくちゃ嬉しい。そういうブログを読みた過ぎて「ブログ書いてほしい!」ってXで書いたこともあるくらい。でもこれくらい積極的にファンの声を探す/聞くのは重要だと思ってる。
逆に、ネガティブ発言や、自分が目指すプロダクトとは方向性がかなり異なる要望などは薄目で見る程度にしている。エコーチェンバーやバイアスの懸念があるけど、趣味なので気持ちよくやりたいのを優先。
というわけで、自分の考えてることを改めて言語化してみました。書いてるうちに自分自身でも発見があってよかったです。他にも「撤退しやすくする」「非公開データは極力持たない」「仕事で使っている技術を取り入れる」など意識してることはあるのでまたいずれ書こうと思います。
あと、本編とは全然関係ないのですが、弊社Ubie(ユビー)はプロダクト開発エンジニアを積極採用中です。興味のある方はぜひ!