ミツモアという「カメラマンから税理士まで、かんたんにぴったりなプロに出会えるプラットフォーム」のプロダクトを担当しております。
「確定申告めんどくさい・・・」「子供の卒業式の記念に写真を撮りたいな」といった生活のあらゆるシーンであなたにぴったりの専門家を無料で探せるサービスですので、ぜひ気軽に使ってみてください。
このたび、ミツモアのエンジニアリングブログを開設しました。初回といたしましてミツモアの開発チームがどのようにサービス開発をしているか、チームとしてのパフォーマンスを上げるためにどのようなことをしているか、かいつんで話していきたいと思います。
技術スタックの変遷
ミツモア創業時、JavaScriptでクライアントサイドのReactとサーバサイドのNodeを全て書いていくという方針でサービス開発が始まりました。創業時メンバーがJavaScript特にNodeが得意だったからという理由と、とにかくスピード感を持って開発をしたいという理由でクライアントサイド・サーバサイド共にJavaScriptとなっています。ReactはReduxを用いたre-ducksパターンでNodeはExpressでシンプルな実装を行っておりました。
それから3年半以上の時間を経て少しずつマイナーチェンジを行ったり、新しいソフトウェアなどの導入をしてます。
- データ分析基盤としてBigQueryの利用開始
- SSRの実装とmonorepoスタイルへの移行
- ElasticSearchの導入
- JavaScriptからTypeScriptに移行
- テストフレームワークをavaからjestに移行
- class componentsから、hooksを用いたfunctional componentsへの移行
- イベントQueuingシステムの導入
- Nest.jsの導入
各項目の細かな話は長くなってしまうので別の記事に譲ることにします。
メンバーが新たな技術を導入したい場合、その長所・短所、既存との比較、競合技術との比較を当人にまとめてもらい、チームMTGで議論します。そこである程度の合意形成を経て導入をしていくというプロセスをとっております。
TypeScriptとなった今も「1つの言語でスピード感を持って開発」というのは継続されており、共通の設定項目などが記載されたprivate module @meetsmore/config は、サーバサイド、クライアントサイド両側でimportされています。
開発優先度とスプリント
まず「何を開発するか」についてですが、主に4つに分類されます。
- 経営ミーティングで議論されるような長期目線の開発方針
- プロジェクトごとで議論される短中期的な開発
- カスタマーサクセスチームから提議されるバグ修正や改善要望
- 開発チームで議論される保守開発や技術的負債の解消
それぞれで多くのタスクが積み重なっていくので全てを完璧にこなしていくのはほぼ不可能です。適切な優先度と緊急度とコストの見積もりを行い、取捨選択と開発順序の決定をしていかなければなりません。また現在の開発チームのパフォーマンス、つまりスプリントごとのアウトプット量を把握する必要もあります。
ミツモアでは開発チーム全体で1週間のスプリントを行っております。1週間は短いと思われるかもしれませんが、スタートアップのスピード感を持ち続けるために、ある程度変化に柔軟である必要があるため1週間となっています。
スプリントを始めてから徐々に、現在のチームベロシティを把握し自分たちを客観視できるようになってきて、各プロジェクトのスケジューリングの精度が向上していると感じています。一方チームベロシティの向上に関しては、課題感は把握できてきていますが、ボトルネックの改善や効率化の向上は進みが良くない状況となっており、今後の課題となっています。
開発の進め方、スプリントの手法は随時アップデートしており、現在はこの形式になっておりますが今後も変化していくと思われます。
開発の流れ
ミツモア最初の1,2年はとにかくPDCAでいうとPlan→Do!→Plan→Do!→...というイメージでひたすら高速にぶん回していました。ベストかは分かりませんがスタートアップ初期のタイミングでの意思決定としてはそう間違っていないと思っています。朝出たアイディアが夕方にリリースされることもしょっちゅうでした。
しかし次第に人が増えプロダクトの複雑性も増すにつれて、この開発スタイルでは破綻が見えていたので徐々に各ステップを踏むようなスタイルに移行しております。
具体的にいうと、以下のような流れとなります。
- プロジェクトキックオフ、インセプションデッキ作成
- ビジネスコンセプトやアイディアを議論し仕様に落とし込む
- デザイナーが全体や各ページのデザインを作成、レビュー
- エンジニアが開発設計、レビュー
- 開発、コードレビュー
- 受け入れテスト(QA)
- リリース
- 効果検証、追加開発など
もちろんプロジェクトの粒度や性質によって変化しますが、ベースとなる手順はこのようになっております。特段特殊なことはしてないかなと感じています。
インセプションデッキに関しては、開発メンバーとビジネスメンバーの期待値のすれ違いや、狭間でボールが落ちるのを防ぐのに非常に有用な手段だと感じております。
組織
ミツモアの開発チームは、フルタイムのエンジニアが8人、インターンや業務委託なども含めるとエンジニアは15人、デザイナーは2名となっており、まだまだ小さな組織となっています。専門性の高いメンバーはいるものの、まだ少人数ということもありドメイン単位や職種単位でのチーム分けはしていません。フロントエンドのReact、サーバサイドのNode、DevOpsのterraformコード、データ基盤整備のコードそれぞれに対して、メンバーごとの重み付けはあるものの皆が取り組めるような体制となっております。
メインとなる開発は、1-3ヶ月ごとのプロジェクトに1人ないし2人アサインされる形式で役割分担を行なっております。またサブとなる開発は、ミツモアに必要でかつ、各メンバーが取り組みたいものを決定し、各々取り組んでおります。例えばあるメンバーはTypeScriptの移行を主導していたり、別のメンバーはfat controllerとなっている処理のリファクタリングをしたりしております。
徐々にメンバーも増えていっているので、チームの体制も見直しの時期がきたのかなと感じているところです。
これから
ここまで読んでいただきありがとうございます。
以上を読んでも分かるとおり、ミツモアの開発チームは日々プロダクトを改善していくと共に、チーム自体のアップデートも進めていっております。尊敬する起業家の言葉の中で "Don't Sattle" というフレーズがありますが、常により良い理想のために、もがき続けるチームでありたいと思っており、またそれがスタートアップとして必須だとも思っております。
現在、事業拡大を進めておりエンジニア・デザイナー・PdMを積極採用中です。ぜひWantedlyのリンクからカジュアル面談をしましょう。TwitterのDMでもお待ちしております。