見出し画像

2年がかりのFlutter個人開発とその反省

ちょうど2年前に開発を始めたアプリが、やっとリリースできました🎉🎉🎉
デザインしてくださったたまごさん、開発初期にFlutterの技術指導してくださったはまあさん、Androidネイティブ周りの技術調査を担当してくださった渡部さんありがとうございました!🙏🙏🙏


テキサスホールデムポーカーの分析支援アプリになっていますので、興味があればぜひダウンロードしてください!🙏🙏🙏

iOSはこちら

Androidはこちら


リリースまでにどれくらい作業したのか?

toggl trackで開発時間を計測しているのですが、2020年は140時間、
2021年は637時間、2022年は362時間なので、合計で約1140時間、
人月換算で7.1人月ですね😇😇😇

2020年(この年は10-12月だけ)
2021年
2022年


なぜ、そんなに時間がかかったのか?

自分のFlutter x Firebase習熟のための側面が強かった

このプロジェクトを始めるまで、FlutterもFirebaseもチュートリアル程度はやったことがあったのですが、本腰を入れた開発をしたことがなかったので、そのキャッチアップに多くの時間を取られました。
また、新しい概念を学ぶたびにプロジェクトに適用(例:Constructor InjectionをRiverpodでのDIに書き換え)していったことも開発が長引くことになった要因の1つではあります😭


開発途中で要件定義の漏れが発覚した(エッジケースの対応)

開発着手時には気付かず、また、あまり発生しないエッジケースが開発途中で明らかになったため、その部分の実装し直しが必要になった、ということもありました。
(これが、自分がPOでないアプリで個人開発する場合特有の難しさですね🙄)

具体的には、以下のようなケースでした。

  • 2-10人でプレイできるが、2人の場合にのみ一部ロジックが変わる

    • SB / BB / BTNの取り扱い

  • テキサスホールデムでは2通りのルールがある。

    • フォワードムービングボタン制とデッドボタン制

    • このアプリユーザーのユースケースにおいて、一般的でないがシンプルなルールのほうで実装してしまっていた。


ユーザーインタビューによるコンセプトの練り直し

当初のアイディアでは、

  • ユーザーは1回のプレイにおける分析だけでなく

  • それをゲーム形式とともに記録しておくことができ、
    過去の分析や収支を見返すことができる。

  • マネタイズはサブスクリプション。

当初のアプリ案におけるトップページ

といったアプリになる予定でした。

しかし、開発中盤にアプリを使ってユーザーインタビューを行ったところ、

  • 必ず毎月ポーカーをプレイするとは限らないため、サブスクリプションは高く感じる

  • 分析機能は全員がほしいと言う一方、過去の振り返り機能を
    お金を払ってでもほしいというユーザーは多くなかった

という結果となり、また、開発サイドとしても

  • お金を払ってでも解決したい、というニーズが明確でない一方、データの
    永続化機構を実装してしまうと、これ以降の開発において、それが制約となってしまう

という点があるため、分析結果の保存機能は一旦保留、POもアプリのコンセプト・機能自体を再考することとなりました。

これによっても、1-2ヶ月ほど開発が遅れることとなりましたが、これはユーザーインタビューから学び、サービスのコンセプトをより洗練させる上では必要な遅れではあった、というのが感想です。


きれいに実装しようとしすぎた

このアプリでは、通常のテキサスホールデムのルールに従い、プレイヤーの最大人数を6人 / 9人 / 10人のいずれかから選ぶことができます。

ユースケースが3通りしかなく、またこのルールが変化することはない(=拡張性を考慮しなくて良い)ので、3通りの座席の配置を静的に考えて実装すれば良かったのですが、円の方程式や楕円の方程式を用いて、ロジックをきれいにしようとしすぎたために、時間が想定より多くかかってしまいました。
これは完全にオーバーエンジニアリングでした…🤦‍♂️

GoodNotes5で書いていた設計資料


途中、業務委託の仕事が忙しくなった

外部的な要因で言うと、2年間の開発のうち、6ヶ月ほどは業務委託の案件がかなり忙しくなってしまい、開発を進める時間が取れなかった、というのはあります。


この2年を振り返るとどうだったか?

個人開発としてはあまり良くなかった

個人開発としては、正しい優先度付けができなかったために、多くの人に
迷惑をかけてしまったので、あまり良くなかったですね。

iOSネイティブでアプリ開発をしていた頃より見込みユーザー数が2倍になる
(iOS → iOS / Android)というプラスの点はありつつも、

  • リリースまで時間をかけすぎ

    • プロダクトのリリースではなく、
      自分の技術上の学びに優先順位を置きすぎた

  • ずっとリリース前の状態なので

    • ユーザーからの学びがない

    • 焦りが蓄積していき、精神衛生上よろしくない

という点が良くなかったな、と。

体感、初期リリースまでの作業時間が320時間(2人月、開発期間で言うと6ヶ月程度がモチベーションが持続する限界かな、という印象です。


個人のキャリアとしては良かった

ただ、その一方、

  • この開発でFlutterの知見を深めることができ、業務委託において、自分をFlutter案件にねじ込み、業務経験を積むことができた

  • Flutter x Firebaseの学習の経験を積み、それをアウトプットしていたおかげで今回の転職が決まった側面もある

  • Android技術顧問の渡部さんにAndroidの権限周りに関する相談をしながら作業をすることができたので、安心感を持ってAndroidに関する知見を深めることができた

というところは良かったなと。


今後について

今後についてですが、Biz担当の岩田さんがアミューズメントカジノでユーザー数を増やしてくれるのを期待しつつ、

  • ユニットテストを追加して堅牢性を高めたり

  • ユーザーに対する解像度を以下の手段で高め、インサイトを増やしていく

    • ユーザーインタビューを行う

    • Firebase Analyticsで計測するイベントを増やす

あたりを行い、プロダクトの安定性向上、サービスの向上を目指しつつ、
様々なマネタイズ手段を検討していく、という感じかなと考えています。

最後に

個人開発において

  • エンジニアが

    • 新しい技術要素・学びの要素を取り入れすぎる

    • 過度に高品質なコードを追求する

ことの反面教師として読んでいただきつつ、企画サイドの方には

  • どんなにレアであってもそれが起こりうるのであれば、
    エンジニアに共有する必要がある

  • ユーザーインタビューによる学びの結果、コンセプトを練り直すのは
    必要なことではあり、それによるスケジュールの遅延は、ある程度は
    やむを得ない

ということのケーススタディとして読んでいただければ幸いです。


iOS / Androidアプリはそれぞれ以下のダウンロードリンクからダウンロードできるので、よければダウンロードお願いします!!!🙏🙏🙏


サポートする代わりに個人開発はじめましょ! iOS👇 https://developer.apple.com/jp/support/enrollment/ Android👇 https://play.google.com/apps/publish/signup/