hacomono TECH BLOG

フィットネスクラブ・スクールなど施設・店舗のための会員管理・予約・決済システム「hacomono」 開発チームの技術ブログ

プラットフォームチームの紹介

こんにちは。まこたすです。

本記事では、私が所属するプラットフォームチームについて、チームの組成から現在何をしているかという話についてご紹介させていただけたらと思います。
※ポエム要素強めです。あらかじめご了承ください。

チーム組成の背景

まずチームが組成されるまでの経緯についてご紹介させてください。

プラットフォームチームが誕生したのは2023年7月になります。
それまでは開発基盤組織という一つのチームで稼働していました。

開発基盤組織では、イネーブリングな動きをするシニアなフロントエンジニア /バックエンドエンジニアや、SREの取り組みをするエンジニア、共通基盤を開発するエンジニアなど様々な基盤っぽい人たちが集まったチームでした。
最初は小規模なチームだったのですが、気づいたら10人以上のメンバー数になっていました。

そうなってくるとチーム内の相談事も多岐に渡る傾向にあったのですが、必ずしも全員に関係がある話でない場合もでてきており、コミュニケーションコストの問題や、それぞれが追うべきものの最適化という背景で明確にチームとして分割され、そのタイミングでプラットフォームチームが組成されました。

  • before

    • QAを除き、開発基盤 + SREが実質同じチームとして動いていた
  • after

    • その後、開発基盤チームがプラットフォーム・イネーブリングに分かれ、それぞれがチームとして独立して稼働するようになった


チームミッションが決まるまで

チーム組成後、プラットフォームチームは何をするチームなのかをしばらく考えていました。
とりあえずGoogleで「プラットフォームチーム」を検索すると プロダクト開発チームが価値を提供する上で、必要なモノ(共通機能、知識等)を整えるチーム という内容が書かれた記事がヒットしました。

私のチームでもそのような取り組みには挑んでおりましたが、チームが当時扱っていた仕事内容的には、それ以外の単純なインフラタスクや基盤っぽい開発を担当する状況で、そのままチームに落とすには実態とずれるなと感じていました。

そこでチーム組成後の社内LTでチーム紹介をした時に話した内容が以下でした。

プラットフォームチームは、領域問わず何でもやるチームです。

今思うと、かなりの状況ですね😅 とはいえ急ぎチーム紹介をしてほしいという状況の中、当時のやってたことを抽象化した結果が上記でした。

チーム組成から半年は何を行っていくべきかをチーム内で話し合う時間が取れておらず、チームにアサインされた基盤っぽいプロダクトの運用・理解・改善だけで精一杯な状況でした。

このような状況になっていたのは反省もあって、私が社内LTで先述の紹介をしてしまったために、基盤っぽい開発をするチームとしてプラットフォームに何でも仕事が集まる状況になってしまっていたからと感じています。

当時のプラットフォームメンバーは、およそ4名でした。その人数でくる案件をすべてこなして開発・運用していくにはどこかで限界がくると感じており、改めてチームのミッションを再定義してやることを明確にしようと考え、チームオンサイトを1日かけて実施しました。

ここで話した内容の詳細は端折りますが、2年後までの会社の計画を元に、プラットフォームチームで何を行うべきかを議論し、ミッションを再定義することを行いました。

結果ミッションは以下に決まりました。

プラットフォームチームの役割は、各サービスやプロダクトで共通して使われる機能を提供し、hacomonoがグロースするhaco(箱)を提供する

ここでやっと何でも屋というラベルから目的を持ったチームとして生まれ変われた状態になりました。


扱っているプロダクト

まだ組成されて日が浅いプラットフォームチームですが、扱ってるプロダクト / プロジェクトについていくつかご紹介させていただきます。

1つ目: マルチテナント環境の開発

hacomonoアプリケーションが稼働するマルチテナント環境というインフラがあります。どういったものかはhacomonoプラットフォームチームのEM矢嶋が執筆した以下の記事をご参照ください。

techblog.hacomono.jp

この環境も作られてから日が浅く、運用の自動化という観点でまだまだ改善 / リアーキテクチャの余地があります。
改善は例えば、この環境で動く非同期バッチの仕組みが最適化できていないため、それを改善するべくjob-managerという開発に取り組んだりなどが挙げられます。
チームでは大小さまざまなこういった問題に日々取り組んでいます。

2つ目: 開発生産性改善プロジェクト

扱っているプロジェクトの中には、開発者の生産性改善を目的としたプロジェクトとして以下のようなものにも取り組んでいます。

  • モノリスなアプリケーションのモジュラーモノリス化

  • feature flagシステムの開発

    • いわゆる機能ON/OFFのtoggleを横断的に管理できるようにするための仕組み


3つ目: この先

現在進行形だったりこれから着手するプロジェクトになりますが、以下のようなものがあります。

  • マルチテナント
    • CloudFrontを通した画像返却の仕組みの構築
    • 各運用の自動化
  • 認証認可基盤の構築
  • 各基盤モジュール運用チームの組成あるいは引き継ぎ
  • 開発レビュー文化の改善
  • 各プロダクトのCI/CD改善
  • 社内システムの改善
  • etc…

抽象度が高い書き方になって恐縮ですが、このように必要に応じて様々なプロジェクトの対応を進めております。
特定の技術/プロジェクトにこだわらず幅広い経験をつけたいと考えている方には、面白いチームと感じていただけるのかなと想像しています。


主に利用している技術

プロジェクト内容に応じて扱ってる技術は異なりますが、主には以下のような技術を触っています。

  • アプリケーション開発が伴う場合
    • Ruby On Rails, Ruby, Vue.js, TypeScript
  • 上記以外の場合
    • AWS, Terraform, Go

最近は、Terraform HCLを書いてることが多いような気もしています。


開発スタイル

最後にチームの開発スタイルと、とあるメンバーの働き方についてご紹介させていただきます。

チームでは、2週間を1スプリントとして開発の計画→実施→振り返りを行っています。
タスクの着手については、直近は1メンバー1プロジェクトアサインのような方式を取っています。
また、ツールとしてはJIRAを用いています。

とあるメンバーの業務時間内の働き方

※hacomonoはフルリモートになりますので、MTG等はSlackのhuddleで行っております。

週のほとんどは上記のような過ごし方をしておりますが、毎週木曜日の半日で振り返りなどの大きめのMTGをこなすようにしています。


まとめ

いかがでしたでしょうか。この記事を通して、hacomonoプラットフォームチームへの皆さんの解像度があがり、ご興味をもっていただけるきっかけになれていれば幸いです。

会社のイベントでプラットフォームチーム一同が集合した際の写真です。



株式会社hacomonoでは一緒に働く仲間を募集しています。
採用情報や採用ウィッシュリストもぜひご覧ください!