天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

【 Gaudiy x Ubie xカウシェ】スタートアップにおけるArchitectureの変遷に参加してきた

kauche.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

本イベントは株式会社Gaudiy、Ubie株式会社と、株式会社カウシェによる合同イベントです。

Architectureの変遷というテーマのもと、各社で活躍しているエンジニアがLT形式で発表していきます。  またリアルタイムなQ&Aに加え、簡単な座談会を行います。

会の様子

LTその1(ユビーのアーキテクチャ改善に対する取り組み)

まずはUbieさんから、アーキテクチャ改善を行った背景や具体的な改善の取り組みを紹介してくれました。

背景としては、一般的な理由と同じで技術的負債が増加していったことによって開発速度が遅くなったことが挙げられるということで、改善方法としては、モノリスなサービスの分割を行ったということでした。*1

また、技術的な負債の計測をFour keysを用いて実施しており、この指標の変化をモニタリングしているということでした。

LTその2(Gaudiy Fanlinkを支える アーキテクチャ)

続いて、Gaudiyさんがアーキテクチャ設計のために意識しているポイントを教えてもらいました。以下、ポイントを記載していきます。

  • 開発生産性の向上のために、まずは開発組織の設計から行なっているそうです。Stream Aligned Teamが一気通貫でバックエンドエンジニア/フロントエンドエンジニアがペアプロしながら開発する体制を敷いている
  • 結合リスクを低減させるためにスキーマ駆動開発を実施している
  • Cloud RunのサービスアカウントのIDトークンをヘッダに含めて、サービス間通信を行なっている
  • Server-Driven UI*2による多種多様なIPのUIを実現している
  • On-chain Write, Off-chain Readでブロックチェーンの複雑性を閉じ込めている
  • 自律的な文化を醸成するために階層を極力無くしている(テックリードやEMを意図的に置いていない。当然横断的に出てくる課題はあるが、そういう時は自律的にチームができる)

LTその3(Evolution of Architecture)

最後に、カウシェさんからカウシェのアーキテクチャ構成と課題、対応策について話を聞いていきました。

カウシェさんは、Cloud Runのサービス上でAPI Serverを動かしているということで、

  • 全て(スケジューラやCronも含む)をCloud Runで動かせるようにする
  • 全てをAPIとして表現する*3

の2点を意識することができ、結果的に管理コストや立ち上げ時に学習することを少なくすることができているというお話が出ていました。

一方で課題としては、カスタマーチームとパートナーチーム両方のQAが必要だったり、チーム間のコミュニケーションコストが高めだというお話が出ていました。
この課題を解決するために、サーバー分割(マイクロサービス化)を実施しつつ、インターネットフェイシングするサーバは一つに統一している*4ということでした。

単にアーキテクチャ構成を紹介するのではなく、アーキテクチャの変遷にフォーカスしたお話をしてくれて、非常に面白かったです。

Q&A

アーキテクチャ改善が必要だと判断したのは生産性が定量的に低いと感じられたためか?(Ubieさん)

No。生産性を定量的に測り出す前から、目に見えて生産性が下がっている実感があった。

生産性を重視した結果諦めたものはあったか?(Gaudiyさん)

アウトプットの量。
クロスファンクショナルなチームにすることで、ユーザに与えるアウトカムは最大化しているが、アウトプットしている量は下がっている。

自律的に動けるための仕組みは?(Gaudiyさん)

採用段階で自律的に動ける人だけを集めている。
また、Gaudiyでは水曜日に業務をせず、視座を上げるための時間(色々なロールの人と議論したり、中長期的に投資が必要だと思うことを考える時間)を作っている。

Cloud Runを推してほしい(全員)
  • スケールアウト/スケールインをデフォルトでやってくれる
  • 柔軟性がほどよく低いので、考えることが少ない
  • カナリアリリースがしやすい
  • スタートアップに優しい
Cloud Runでアクセス制限はできるのか?カスケード障害が起きた時に全体障害に影響が出てしまいそうだが...?(Gaudiyさん)

正直ベースで言うと、まさに質問にあったような問題が起きて検討中というステータス。

事前に起きるのを防ぐ仕組みと事後に対応する仕組みの両輪で検討している。

Node.jsはバージョンアップが多い分検証の速度が下がるのではという懸念があるが実際のところどうか?(Ubieさん)

懸念になることは現状起きていない。一年に一回という頻度がそこまで多いと思わないし、破壊的変更も少ないと理解しているため。

会全体を通した感想

他のイベントと比較して、結構踏み込んだ話を各社さんがしてくれた分、かなり具体的な内容を聞けたのが面白かったです。

スタートアップならではの工夫やトレードオフが聞けたのは、特に楽しかったです。

*1:サービスを分割する際は、DBの分割が大変だったということです。

*2:ServerでどういうUIを表示するのか決めて、その決定事項に従ってClientがUIを組み立てる

*3:gRPCからコード生成している

*4:Envoyの活用