個人開発には"締め切り"と"モチベ維持"
概要
3ヵ月で、iOSアプリを個人開発し、初めてリリースした体験をまとめる。
個人開発をリリースまでもっていくためには、"締め切りを設定する" ことと "モチベーションの維持するためのテーマ選び" が大切に感じた。
背景
whoami
- 企業で働くiOSエンジニア(新卒3年目)
作ったもの
セパタクローの得点板アプリ(Wiki: セタパタクロー)
iPhone/iPad/AppleWatch対応
機能はシンプルに以下の3つ
- 試合の得点の動きを表示する得点版機能
- 試合の記録を保存して、あとから見返せる記録機能
- AppleWatchで記録したデータを、ペアリングしているデバイスに送信するデータ連携機能
Watchの画面 | Watchからデバイスにデータを送る |
開発期間
- 3ヵ月(仕事の後や、休日に少しずつ)
本題: 個人開発で大事だと思うこと
個人開発あるあるとして、始めてみたけど完成せずに終わってしまうがあると思う。
その対策として、以下の二点を特に意識した。
- 締め切りを設定する
- モチベーションの維持するためのテーマ選び
締め切りを設定する
開始からリリースまで、3ヵ月という期間を決めてからスタートした。
たぶん、それ以上長いと続かないし、それ以上短かいと時間が足りないだろうということで設定した。
締め切りを設定すると、逆算してプランを立てやすく、また短期間で集中して取り組むことができる。
また、平日は仕事があり、多くの時間は割けない。
3ヵ月で終わらせるために、意識的に やること と やらないこと を決めた。
やること
- MVP(価値を提供できる最小限のプロダクト)を決め、MVPの機能のみを実装する。
- アプリのユーザーストーリーを設定し、どの機能が最小限のプロダクトにとって必要かを判断する軸にする。
-
今回の例
- 背景:
- セタタクローは
"1セット21点マッチ"で行われる競技(バレーやバドミントンと近い)。試合形式の練習では、よく、プレーヤー自身が審判と得点のコールを行う。 - 得点のコールを行うプレーヤーは得点を記憶しておく必要があり、激しいラリー中に得点を忘れてしまうorプレーに集中できないという悩みがある。
- セタタクローは
- Who: セパタクローの練習試合中のプレーヤー
- What: 得点の記憶をデバイスが記憶してくれる。
- Why: デバイスが得点を覚えてくれるので、プレーに集中できるand自分で覚えなくてよい。
- 背景:
-
- GitHubのIssueでタスクの管理と、Milestone機能でv1.0のスコープを管理
- MVPの機能は
v1.0
tagを、そのほかはv1.1
などとしておくことで、MVPの機能に集中する。
- MVPの機能は
- アプリのユーザーストーリーを設定し、どの機能が最小限のプロダクトにとって必要かを判断する軸にする。
やらないこと
- ユニットテストを書かない。
- 仕事のコードと違い、今回のコードは、コードベースが小さくシンプル、運用保守する期間がそこまで長くなさそう、バグがでたときの影響が小さい。
- CI/CDの環境を構築しない。
- 運用保守する期間や、CI/CDが必要になる頻度が高くない
どちらもユーザーに価値を届け続けるためにあったほうが良いことには間違いない。
しかし、リリースまで早くもっていき最初の価値を届けることとのトレードオフを考えたときに、重要ではないと判断し、やらないことにした。
最低限必要な機能を選択し、それ以外のことはやらないことで、短期間で集中して、開発ができた。
モチベーションを維持するためのテーマ選び
最後までやりきるためには、モチベーションの維持が大切になってくる。
リリースしても、多くの場合はお金がたくさん儲けられるわけでも、誰かが褒めてくれるわけでもない。そのため、モチベーションを維持するのが難しい。
"自分の悩みを解決するテーマ選び" と "仕事でも役立つことを学ぶ" という2つの観点でモチベーションを保った。
自分の悩みを解決するテーマ選び
自分が好きなスポーツをプレーしているときに実際に感じる悩みをテーマにしたことで、少なくとも自分にとって価値のあるプロダクトとなる。
自分が感じる悩みであり、惱みが解決されたときのうれしさを想像しやすかった。
仕事でも役立つことを学ぶ
仕事に関係する/役に立つ技術を使用することで、開発によって知識や経験を得ることがモチベーションのひとつになる。
たとえば今回は
- PrivacyManifestの対応を個人開発で行うことで、仕事のプロダクトのPrivacyManifest対応にも役立った。
- SwiftUIを使用することで、仕事の開発でSwiftUIを使用するときに、表現の幅が広がった。
- SwiftDataやWatchConnectivityを使用することで、すぐには役立てられないが、将来新しい機能の開発に役立つ可能性がある。
- デザインや仕様の決定など、普段の仕事では別の役割の人がやってくれていることを経験できる。
- 証明書回りの設定など、仕事中は、自分ではあまりやらずにあいまいになっていた知識が身に付く。
まとめ
個人開発をリリースまでもっていくためには、"締め切りを設定する" ことと "モチベーションの維持" が大切に感じた。
初めてリリースまで行った個人開発であったが、学びがとても多かったので、またやりたい。
Refs:
Discussion