はじめに
ユニバーサルゲーム事業部でクライアントエンジニアをしています、佐々木です。
今回は私が配属されているプロダクトにて、チームで1つの機能を開発する際に行っている先行開発について紹介します。
先行開発とは
現在のプロダクトでは大きな機能を開発する際、クライアントエンジニアだけでも3人以上参加、更にそれに加えサーバーエンジニアとプランナー、デザイナーと多くのメンバーが1つの機能に参加することがあります。
以前の実装形態では、実装開始時点で全員が参加しソースコードがめちゃくちゃになってしまったり、ボトルネックの実装待ちが発生してしまうことが多々ありました。
また、仕様面でも最初はプランナーに任せっきりになってしまい実装中に不都合が発覚し仕様変更されることが何度かありました。
それらを解消するために、まずは少数のメンバーが参加し地盤を整える体制に変えたのが先行開発です。
実際に先行開発で何をやるのか
プランナー/サーバーエンジニアとのすり合わせ
先行開発メンバーがまず行うのがプランナーとの打ち合わせです。
これにより、仕様の再確認と実現可能性のすり合わせをします。
また工数の面でも現在引いている期間で本当に可能なのかを確認します。
先行開発の工程の中で最も重要なフェーズであり、ここを疎かにすると後々の作業で問題が出やすいため、時間はしっかりかける工程です。
プランナーとのすり合わせが完了したら、次はサーバーエンジニアとの打ち合わせになります。
主にデータベースとAPIインターフェースの設計について共有します。
画面の表示にのみ関わるデータなど、クライアント側のみで使用するデータの部分もあるため、データベースの設計はしっかりと共有します。
クライアント設計
プランナーとサーバーエンジニアとのすり合わせが完了したら、クライアントの設計に入っていきます。
新規クラス設計、既存クラスへの影響や追加項目の洗い出し、データの持ち方などを設計しクライアントのメンバーへレビューを依頼します。
基盤の実装
設計レビューが完了したら、最後に実装に入っていきます。
作業が衝突しやすい部分を重点的に実装していき、後発メンバーが合流後スムーズに自身の作業に入れるようにすることが目的です。
画面遷移の部分や、データの持ち方の部分など作業者ごとに衝突が発生しやすい部分から主に実装していきます。
どこまでやるのかという基準は明確にないのですが、できる限り基盤は整えるようにします。
先行開発のメリット・デメリット
先行開発のメリットは先述した問題点を解消することにあります。
特にソースコードの基盤が作れることで後発メンバー合流後の作業効率は大幅に上がりました。
しかし、これを始めたことで先行メンバーの負担が大きくなりやすいというデメリットも発生してしまいました。
先行メンバーで仕様を固めるため、連絡事項や質問の窓口は基本的に先行メンバーに集まってしまい、自身の作業時間が取りづらくなってしまうということが発生しました。
現在はそれを解消するため、まず合流タイミングで開発メンバーにしっかり仕様を共有したうえで、質問事項があるときはメンションを全員に付けてもらうなど負担が分散するよう工夫をしています。
新しい取り組みを始めるというのは上手くいくことばかりではありませんが、常に修正点を考え改良しています。
最後に
以上が、所属プロダクトで行っている先行開発の説明です。
チームで1つのものを作るというのは1人で作るよりも効率が上がる分、別の問題も発生します。
現在、チームで開発をしている方の参考に少しでもなったのであれば幸いです。