Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み

Ryunosuke Iwai
November 21, 2023

 スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み

@技術的負債に向き合うOnline Conference
https://findy.connpass.com/event/297813/

Ryunosuke Iwai

November 21, 2023
Tweet

More Decks by Ryunosuke Iwai

Other Decks in Technology

Transcript

  1. スタートアップにおける、チーム拡⼤を⾒
    据えたコンポーネント分割の取り組み
    @技術的負債に向き合うOnline Conference
    Cloudbase 株式会社
    岩井⿓之介 / @ryuke

    View full-size slide

  2. 株式会社メルカリ
    Microservices Platform CI/CD
    @ryuke
    岩井 ⿓之介
    Cloudbase株式会社
    Scanner & Platform チーム
    Go / terraform / Datadog
    前職
    現在
    SNS https://twitter.com/i_ryuke

    View full-size slide

  3. https://cloudbase.ink/

    View full-size slide

  4. システム構成

    View full-size slide

  5. 組織‧プロダクトの成⻑に伴って⽣じてきた課題
    ● チーム(エンジニア+デザイナー+PdM)が9⼈になり、1チームでコミュニ
    ケーションを取るのが徐々に難しくなってきた
    ● 要求されるドメイン知識や関⼼事が、コンポーネントごとに⼤きく異な
    り、メンバーの認知負荷が⾼い

    View full-size slide

  6. 組織‧プロダクトの成⻑に伴って⽣じてきた課題
    ● チーム(エンジニア+デザイナー+PdM)が9⼈になり、1チームでコミュニ
    ケーションを取るのが徐々に難しくなってきた
    ● 要求されるドメイン知識や関⼼事が、コンポーネントごとに⼤きく異な
    り、メンバーの認知負荷が⾼い
      → チーム分割へ

    View full-size slide

  7. Team Topologies
    ● コンウェイの法則 = ソフトウェアアーキテク
    チャと組織構造の間には「同型⼒」が働く
    ● ソフトウェアの⾃然な境界 = 節理⾯
    でチームを分割する
    マシュー・スケルトン (著), マニュエル・パイス (著), 原田 騎郎 (翻訳), 永
    瀬 美穂 (翻訳), 吉羽 龍太郎 (翻訳)『チームトポロジー 価値あるソフト
    ウェアをすばやく届ける適応型組織設計』日本能率協会マネジメントセン
    ター, 2021

    View full-size slide

  8. システムの要素を整理する
    お客様のクラウド環境から取得
    した構成情報を元にセキュリ
    ティリスクを分析し、データ
    ベースに保存した結果をSaaS上
    で表⽰する

    View full-size slide

  9. システムの要素を整理する
    お客様のクラウド環境から取得
    した構成情報を元にセキュリ
    ティリスクを分析し、データ
    ベースに保存した結果をSaaS上
    で表⽰する

    View full-size slide

  10. システムの要素を整理する
    取得 分析 保存 表示
    インフラ Step Functions Step Functions Step Functions ECS Service +
    Vercel
    言語 Go Go NodeJS NodeJS
    ドメイン クラウド セキュリティ SaaS SaaS
    関心事 データの正確性 データの正確性 データの正確性 顧客体験
    変更のケイデン

    低速
    (機能開発的)
    低速
    (機能開発的)
    低速
    (機能開発的)
    高速
    (仮説検証的)

    View full-size slide

  11. システムの要素を整理する
    取得 分析 保存 表示
    インフラ Step Functions Step Functions Step Functions ECS Service +
    Vercel
    言語 Go Go NodeJS NodeJS
    ドメイン クラウド セキュリティ SaaS SaaS
    関心事 データの正確性 データの正確性 データの正確性 顧客体験
    変更のケイデン

    低速
    (機能開発的)
    低速
    (機能開発的)
    低速
    (機能開発的)
    高速
    (仮説検証的)

    View full-size slide

  12. システムの要素を整理する
    取得 分析 保存 表示
    インフラ Step Functions Step Functions Step Functions ECS Service +
    Vercel
    言語 Go Go NodeJS NodeJS
    ドメイン クラウド セキュリティ SaaS SaaS
    関心事 データの正確性 データの正確性 データの正確性 顧客体験
    変更のケイデン

    低速
    (機能開発的)
    低速
    (機能開発的)
    低速
    (機能開発的)
    高速
    (仮説検証的)
    Scanner Application

    View full-size slide

  13. 得られた結果
    ● 結果として、お客様との接点でプロダクトを磨き込むStream-Aligned的なチー
    ム(Application)と、⼟台となるデータ基盤を提供し前線のチームの認知負荷
    を取り除くPlatform的なチーム(Scanner)に分離
    😄 チームサイズが下がったことでチーム内のコミュニケーションも密に
    😄 ドメインが分割されたことで各チームの認知負荷も下がった
    😄 前線のチームがより⾼速に仮説検証を回せるようになった

    View full-size slide

  14. 本当にこれでよかったのか...?

    View full-size slide

  15. よく⾒ると...?
    取得 分析 保存 表示
    インフラ Step Functions Step Functions Step Functions ECS Service +
    Vercel
    言語 Go Go NodeJS NodeJS
    ドメイン クラウド セキュリティ SaaS SaaS
    関心事 データの正確性 データの正確性 データの正確性 顧客体験
    変更のケイデン

    低速
    (機能開発的)
    低速
    (機能開発的)
    低速
    (機能開発的)
    高速
    (仮説検証的)
    Scanner Application

    View full-size slide

  16. よく⾒ると...?
    取得 分析 保存 表示
    インフラ Step Functions Step Functions Step Functions ECS Service +
    Vercel
    言語 Go Go NodeJS NodeJS
    ドメイン クラウド セキュリティ SaaS SaaS
    関心事 データの正確性 データの正確性 データの正確性
    / 顧客体験
    顧客体験
    変更のケイデン

    低速
    (機能開発的)
    低速
    (機能開発的)
    低速
    (機能開発的)
    高速
    (仮説検証的)
    Scanner Application

    View full-size slide

  17. 境界の曖昧なコンポーネントが発⽣していた

    View full-size slide

  18. 境界の曖昧なコンポーネントが発⽣していた
    Application
    Scanner

    View full-size slide

  19. 曖昧なチーム境界が引き起こす課題
    ● Loaderに両チームの様々なロジックが混在
    ○ S3からのデータの取得、前回スキャン結果との差分の計算、DBへの永続化、差
    分の通知、...
    ○ 徐々に「誰も怖くて触れない」コンポーネントに
    ● Scannerの最終成果物が、RDSに保存されている
    ○ DBの共通所有によるチーム間コミュニケーションコスト、所有権の曖昧さ
    ○ Scannerのテストスコープが肥⼤化

    View full-size slide

  20. 曖昧なチーム境界が引き起こす課題
    ● Loaderに両チームの様々なロジックが混在
    ○ S3からのデータの取得、前回スキャン結果との差分の計算、DBへの永続化、差
    分の通知、...
    ○ 徐々に「誰も怖くて触れない」コンポーネントに
    ● Scannerの最終成果物が、RDSに保存されている
    ○ DBの共通所有によるチーム間コミュニケーションコスト、所有権の曖昧さ
    ○ Scannerのテストスコープが肥⼤化
    → Loaderを分割することで、RDSよりも良い境界を⾒つけられないか?

    View full-size slide

  21. モノリスからマイクロサービスへ
    ● データとロジックのオーナーシップを揃える
    ことで、何を共有して何を隠すかを決められ
    るようにする
    ● サービスの分割は段階的に⾏う
    (モジュラーモノリス)
    Sam Newman (著), 島田 浩二 (翻訳)『モノリスからマイクロサービスへ
    ―モノリ
    スを進化させる実践移行ガイド』オライリージャパン
    , 2020

    View full-size slide

  22. Loaderを分割していく

    View full-size slide

  23. 1. コンポーネントの構造は維持したまま、中の実装だけを分割
    interface
    = 契約

    View full-size slide

  24. 2. データとロジックの境界を揃える
    interface
    = 契約

    View full-size slide

  25. 3. 将来的には、コンポーネントとして分割していく
    interface
    = 契約

    View full-size slide

  26. 得られた結果
    ● 現在はまだ「1. 中の実装だけを分割」の状態
    😄 ロジックのオーナーシップが整理された
    😄 DBより⼿前の段階でデータを検証できるようになった
    😄 インターフェースを切ったことで、期待される出⼒が明確になった
    ● 「切り込み」に留めておくことで、変化に柔軟に対応できる形に
    ○ インターフェースを調整しながら固めていける、⼿戻りしやすい
    ○ データの不整合といった難しい問題に対処せずに済む

    View full-size slide

  27. Key Messages:チーム分割において気をつけるべきポイント
    ● チームとシステムの境界のずれに、技術的負債が発⽣することがある
      所有権の曖昧なロジックが詰め込まれ、メンテ性が低下しやすい
    ● ソフトウェアの⾃然な境界 = 節理⾯でチーム‧システムを分割する
    ⼀度決めたら終わりではなく、常により良い節理⾯を模索していく
    ● 「システムの切り込み」から始める
    変化に対応しつつ、少しずつインターフェースを固めていく

    View full-size slide

  28. ク ラ ウ ド 運 ⽤ を 安 全 に

    View full-size slide