フルスタックエンジニアからマルチプロダクトエンジニアへ -コンパウンド開発を支える技術組織-
※写真は先日(2024/11/29)の HQ 全社オフサイトでのプロダクトチーム集合写真です
フルスタックエンジニアからマルチプロダクトエンジニアへ
-コンパウンド開発を支える技術組織-
この記事では、HQ が目指すプロダクトビジョンを実現するための新しいエンジニアリングチームの構想についてお話しようと思います。
従来型の開発チーム構成を取った場合のコンパウンド開発における課題
個人的な経験則と観測から、複数のプロダクト・サービスを有しかつ一定の規模に成長した多くの企業では、プロダクトや事業ごとに専用のチームを編成し、一定の共通資産や開発スタイルをもちつつも、それぞれのチームが基本的に独立して開発・運用を行うスタイルが主流となっていると思います。
このアプローチは、プロダクト毎に専門性を持ちフォーカスを定め、エンジニアの認知負荷を一定に抑えるという点では非常に有効ですが、複数のプロダクトを同時多発的に開発するコンパウンドスタートアップにおいては、以下の課題を内包しています。
-
重複作業の増加: 各プロダクトで似たような機能やインフラが再構築される。
-
連携におけるオーバーヘッド: 異なるチーム間での情報共有や、チーム間でのダイナミックな開発リソースのアロケーションが難しい。
これに対し、HQ では異なるチーム編成のアプローチを採用しようと考えています。
HQ の「コンパウンド開発」アプローチ
HQ ではプロダクト戦略としてリモート HQ からスタートし、福利厚生=Employee Experience を提供する新しいプラットフォームとして進化するべく構想を進めています。
この構想において重要となるのが多くのプロダクト群を支える共通の資産=アセットになります。
「共通資産(アセット)」を基盤に複数のプロダクトを展開する HQ のコンパウンド開発において、共通資産を継続的に生み出すことと、それをプロダクト開発において活用することが重要です。
HQ における共通資産の例:
- ポイントシステム: HQ シリーズのプロダクトにおいて組織(テナント)の設定によりポイントを付与、ユーザー毎の任意アイテムに対するポイントの利用に際してポイント引き出しを行う
- カタログシステム: HQ シリーズのプロダクトにおいて組織(テナント)の設定によりアイテムのカタログを作成し、ユーザー毎のカタログの閲覧、購入、利用を行う
- 認証・認可・ユーザーデータ管理
- etc...
このため、HQ ではチームトポロジーという書籍で紹介されているチーム設計思想を参考に、コンパウンド開発を支えるチームを組成しようとしています。
チームトポロジーにおいてはチームは以下の 4 つのカテゴリに分類されます。
- ストリームアラインドチーム(Stream-aligned team): エンドツーエンドでユーザーに価値を提供するチーム
- プラットフォームチーム(Platform team): 共通基盤を提供するチーム
- イネイブリングチーム(Enabling team): 開発チームを支援するチーム
- コンプリケイティッドサブシステムチーム(Complicated subsystem team): 複雑なサブシステムを担当するチーム
※チームトポロジーの詳細については書籍もしくは Web 記事などを参照してください。
このチームタイプを参考に、HQ では以下のようなチームを構想しています。
- HQ プラットフォームチーム
共通基盤を提供するチーム。チームトポロジーでのプラットフォームチームに該当。HQ のプロダクト戦略において複数プロダクト間で共有される機能やインフラを設計・実装する
- HQ プロダクトストリームチーム
プロダクト/アプリケーションのシナリオを実現するためのフルスタックの設計・実装を行う。チームトポロジーでのストリームアラインドチームに該当。シナリオ実現のために共通資産の追加や変更が必要となる場合についてはプラットフォームの協力をもらう
- イネイブリングチーム
プラットフォーム・プロダクトの開発に必要な環境やツールを提供したり、開発プロセスの改善を行う。常設チームではなく取り組むべき技術的課題・負債が顕在化した際にプロジェクトチームとして編成される
大きな特徴として、プラットフォームチームは HQ 全体のアセットを、プロダクトストリームチームは複数プロダクトを 1 チームで担当する点が挙げられます。冒頭で述べた従来型の開発チーム構成と大きく異なる点です。この構成によって、以下のようなメリットが期待されます。
柔軟なリソース配分による効率的な開発と運用
マルチプロダクトを開発・運用・保守して行くには新規プロダクト開発という「0 から 1 を生み出すフェーズ」と既存プロダクトのグロースを行う「1 を 10, 10 を 100 にするフェーズ」が互いに混在し合う事になります。スタートアップという特にリソース制約が厳しい環境下でこれを行うには、戦略上の重要性が高いプロダクトにリソースを集中させる必要があります。プロダクトストリームチーム 1 つですべてのプロダクトを担当することで例えば
- 新規プロダクトの開発は企画・設計フェーズであり数名のエンジニアが関われば良い状態であるから、残りエンジニアで既存プロダクトの追加開発要件を進める
- 新規プロダクトの開発が佳境であるから既存プロダクトの開発を必要最小限に抑えてリリースに集中し、最速で新規プロダクトの開発を行う
などといったリソースの最適化を行うことが可能です。共通アセットを新規開発・改善して行くにあたっても複数アセットを担当できるようにすることで、同じ効果が狙えます。
実際にリモート HQ のリリース後に、リモート HQ の追加機能開発を行いつつ当時の新規プロダクトであるカフェテリア HQ の開発を行った際には、1 チームで両方の開発を行うことで動的にリソースの最適化を行い、両プロダクトの開発を進めることができました。
プロダクト間を横断した視点を持つエンジニアの育成
コンパウンド開発においては、共通のアセットを追加・改善し続けていくことが重要です。1 人のエンジニアが複数のプロダクトを担当して行くことによって、「A というプロダクト向けに必要なこの機能は、実はプロダクト戦略にあり半年後に予定している B というプロダクトにも必要だ」「プロダクト C とプロダクト D は、ビジネスロジックとして共通のアセットを利用しているが、ユーザー視点では UI の見た目や体験が全く異なるので共通の UI/体験とすべき」などといった横断的な視点を自然と(あるいは必然的に)持つようになります。 これによって中長期で複利を生み出す共通アセットの強化が自然と行われ、全体の生産性が向上することが期待されます。
新チーム構想における課題と今後の展望
新チーム構想においては、現状認識しているものも含め以下のような課題が予想されます。
- エンジニアの認知負荷の増大
複数プロダクトを1人で担当するために、プロダクト固有のドメイン知識(ユーザーの特性理解、請求ロジックやスタッフオペレーションの詳細含め)をプロダクトにまたがって持つ必要があり、負荷が増大する。またコードレビューなどにおいても自分が担当していないプロダクトのコードを理解する必要があるため負荷が大きい
- スケジュール管理の複雑性の増大
複数プロダクトが1チーム内で同時進行になるため、各プロダクトの開発スケジュール・リリーススケジュールを把握した上でのリソース配分を適切に行う必要があり、スケジュール管理の複雑性が増大する
スケジュール管理・計画性の担保については現在も模索中ではありますが、認知負荷の増大に対する対策としてすでに、Remix を利用したフロントエンドアプリケーションの Modular Monolith 化を進めています。(バックエンドについてはすでに Modular Monolith となっています。詳しくはシステムアーキテクチャ 2023 年 6 月版をご覧ください)。
今までは「リモート HQ」と「カフェテリア HQ」のそれぞれの Next.js のフロントエンドアプリケーションを別々に開発していましたが、Remix を利用することで複数アプリケーションを 1 つのパッケージにまとめ、環境構築や開発時の学習コストを引き下げるのが一つの狙いです。またアプリケーション間でのコンポーネント共通化を加速させることにより、エンジニアの開発体験を「複数のプロダクトを 1 人で見ている」から「1 アプリケーションの複数の機能を 1 人でみている」というような状態に仮想的に引き下げて、認知負荷を軽減していこうと考えています。
また、GitHub Copilot などの AI ツールを活用することで、1 人のエンジニアの作業負荷を軽減することも検証中です(こちらについては今後の記事で詳しく紹介する予定です)。
まとめ
HQ では、プロダクトビジョンを実現するための新しいエンジニアリングチーム組成を進めています。この中でも鍵となるのが、コンパウンド開発の複雑性・難易度に立ち向かう「マルチプロダクトエンジニア」の存在です。
これまでの「フルスタックエンジニア」から、1 人で複数のプロダクトを高速かつ高品質で開発していく「マルチプロダクトエンジニア」へ HQ のエンジニア全員が進化していけるかが、今回説明した新チーム構想の成否を左右するポイントとなります。
この記事を通じて、HQ の新しい挑戦に興味を持っていただけたり、「マルチプロダクトエンジニア」に一緒になってみたいと思って頂ける方は是非ご応募をお待ちしております!