Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
Search
Ryunosuke Iwai
November 21, 2023
Technology
4.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
@技術的負債に向き合うOnline Conference
https://findy.connpass.com/event/297813/
Ryunosuke Iwai
November 21, 2023
More Decks by Ryunosuke Iwai
See All by Ryunosuke Iwai
A2Aのクライアントを自作する
rynsuke
1
520
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
410
バッチ処理のSLOをどう設計するか
rynsuke
11
2.1k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
2.4k
Notionではじめるライフハックのススメ
rynsuke
24
2.1k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
12k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.7k
Other Decks in Technology
See All in Technology
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
640
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
2
270
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5k
cccccc
moznion
0
1.9k
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
550
Making sense of Google’s agentic dev tools
glaforge
1
180
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
230
SRE Next 2026 何でも屋からの脱却
bto
0
620
AICoEでAIネイティブ組織への進化
yukiogawa
0
160
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
120
誤解だらけの開発生産性 / Myths and Misconceptions about Developer Productivity
i35_267
1
230
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
120
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Deep Space Network (abreviated)
tonyrice
0
220
A better future with KSS
kneath
240
18k
Un-Boring Meetings
codingconduct
0
340
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Rails Girls Zürich Keynote
gr2m
96
14k
Test your architecture with Archunit
thirion
1
2.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Transcript
スタートアップにおける、チーム拡⼤を⾒ 据えたコンポーネント分割の取り組み @技術的負債に向き合うOnline Conference Cloudbase 株式会社 岩井⿓之介 / @ryuke
株式会社メルカリ Microservices Platform CI/CD @ryuke 岩井 ⿓之介 Cloudbase株式会社 Scanner &
Platform チーム Go / terraform / Datadog 前職 現在 SNS https://twitter.com/i_ryuke
None
https://cloudbase.ink/
システム構成
組織‧プロダクトの成⻑に伴って⽣じてきた課題 • チーム(エンジニア+デザイナー+PdM)が9⼈になり、1チームでコミュニ ケーションを取るのが徐々に難しくなってきた • 要求されるドメイン知識や関⼼事が、コンポーネントごとに⼤きく異な り、メンバーの認知負荷が⾼い
組織‧プロダクトの成⻑に伴って⽣じてきた課題 • チーム(エンジニア+デザイナー+PdM)が9⼈になり、1チームでコミュニ ケーションを取るのが徐々に難しくなってきた • 要求されるドメイン知識や関⼼事が、コンポーネントごとに⼤きく異な り、メンバーの認知負荷が⾼い → チーム分割へ
Team Topologies • コンウェイの法則 = ソフトウェアアーキテク チャと組織構造の間には「同型⼒」が働く • ソフトウェアの⾃然な境界 =
節理⾯ でチームを分割する マシュー・スケルトン (著), マニュエル・パイス (著), 原田 騎郎 (翻訳), 永 瀬 美穂 (翻訳), 吉羽 龍太郎 (翻訳)『チームトポロジー 価値あるソフト ウェアをすばやく届ける適応型組織設計』日本能率協会マネジメントセン ター, 2021
システムの要素を整理する お客様のクラウド環境から取得 した構成情報を元にセキュリ ティリスクを分析し、データ ベースに保存した結果をSaaS上 で表⽰する
システムの要素を整理する お客様のクラウド環境から取得 した構成情報を元にセキュリ ティリスクを分析し、データ ベースに保存した結果をSaaS上 で表⽰する
システムの要素を整理する 取得 分析 保存 表示 インフラ Step Functions Step Functions
Step Functions ECS Service + Vercel 言語 Go Go NodeJS NodeJS ドメイン クラウド セキュリティ SaaS SaaS 関心事 データの正確性 データの正確性 データの正確性 顧客体験 変更のケイデン ス 低速 (機能開発的) 低速 (機能開発的) 低速 (機能開発的) 高速 (仮説検証的)
システムの要素を整理する 取得 分析 保存 表示 インフラ Step Functions Step Functions
Step Functions ECS Service + Vercel 言語 Go Go NodeJS NodeJS ドメイン クラウド セキュリティ SaaS SaaS 関心事 データの正確性 データの正確性 データの正確性 顧客体験 変更のケイデン ス 低速 (機能開発的) 低速 (機能開発的) 低速 (機能開発的) 高速 (仮説検証的)
システムの要素を整理する 取得 分析 保存 表示 インフラ Step Functions Step Functions
Step Functions ECS Service + Vercel 言語 Go Go NodeJS NodeJS ドメイン クラウド セキュリティ SaaS SaaS 関心事 データの正確性 データの正確性 データの正確性 顧客体験 変更のケイデン ス 低速 (機能開発的) 低速 (機能開発的) 低速 (機能開発的) 高速 (仮説検証的) Scanner Application
得られた結果 • 結果として、お客様との接点でプロダクトを磨き込むStream-Aligned的なチー ム(Application)と、⼟台となるデータ基盤を提供し前線のチームの認知負荷 を取り除くPlatform的なチーム(Scanner)に分離 😄 チームサイズが下がったことでチーム内のコミュニケーションも密に 😄 ドメインが分割されたことで各チームの認知負荷も下がった 😄
前線のチームがより⾼速に仮説検証を回せるようになった
Fin.
本当にこれでよかったのか...?
よく⾒ると...? 取得 分析 保存 表示 インフラ Step Functions Step Functions
Step Functions ECS Service + Vercel 言語 Go Go NodeJS NodeJS ドメイン クラウド セキュリティ SaaS SaaS 関心事 データの正確性 データの正確性 データの正確性 顧客体験 変更のケイデン ス 低速 (機能開発的) 低速 (機能開発的) 低速 (機能開発的) 高速 (仮説検証的) Scanner Application
よく⾒ると...? 取得 分析 保存 表示 インフラ Step Functions Step Functions
Step Functions ECS Service + Vercel 言語 Go Go NodeJS NodeJS ドメイン クラウド セキュリティ SaaS SaaS 関心事 データの正確性 データの正確性 データの正確性 / 顧客体験 顧客体験 変更のケイデン ス 低速 (機能開発的) 低速 (機能開発的) 低速 (機能開発的) 高速 (仮説検証的) Scanner Application
境界の曖昧なコンポーネントが発⽣していた
境界の曖昧なコンポーネントが発⽣していた Application Scanner
曖昧なチーム境界が引き起こす課題 • Loaderに両チームの様々なロジックが混在 ◦ S3からのデータの取得、前回スキャン結果との差分の計算、DBへの永続化、差 分の通知、... ◦ 徐々に「誰も怖くて触れない」コンポーネントに • Scannerの最終成果物が、RDSに保存されている
◦ DBの共通所有によるチーム間コミュニケーションコスト、所有権の曖昧さ ◦ Scannerのテストスコープが肥⼤化
曖昧なチーム境界が引き起こす課題 • Loaderに両チームの様々なロジックが混在 ◦ S3からのデータの取得、前回スキャン結果との差分の計算、DBへの永続化、差 分の通知、... ◦ 徐々に「誰も怖くて触れない」コンポーネントに • Scannerの最終成果物が、RDSに保存されている
◦ DBの共通所有によるチーム間コミュニケーションコスト、所有権の曖昧さ ◦ Scannerのテストスコープが肥⼤化 → Loaderを分割することで、RDSよりも良い境界を⾒つけられないか?
モノリスからマイクロサービスへ • データとロジックのオーナーシップを揃える ことで、何を共有して何を隠すかを決められ るようにする • サービスの分割は段階的に⾏う (モジュラーモノリス) Sam Newman
(著), 島田 浩二 (翻訳)『モノリスからマイクロサービスへ ―モノリ スを進化させる実践移行ガイド』オライリージャパン , 2020
Loaderを分割していく
1. コンポーネントの構造は維持したまま、中の実装だけを分割 interface = 契約
2. データとロジックの境界を揃える interface = 契約
3. 将来的には、コンポーネントとして分割していく interface = 契約
得られた結果 • 現在はまだ「1. 中の実装だけを分割」の状態 😄 ロジックのオーナーシップが整理された 😄 DBより⼿前の段階でデータを検証できるようになった 😄 インターフェースを切ったことで、期待される出⼒が明確になった
• 「切り込み」に留めておくことで、変化に柔軟に対応できる形に ◦ インターフェースを調整しながら固めていける、⼿戻りしやすい ◦ データの不整合といった難しい問題に対処せずに済む
Key Messages:チーム分割において気をつけるべきポイント • チームとシステムの境界のずれに、技術的負債が発⽣することがある 所有権の曖昧なロジックが詰め込まれ、メンテ性が低下しやすい • ソフトウェアの⾃然な境界 = 節理⾯でチーム‧システムを分割する ⼀度決めたら終わりではなく、常により良い節理⾯を模索していく
• 「システムの切り込み」から始める 変化に対応しつつ、少しずつインターフェースを固めていく
ク ラ ウ ド 運 ⽤ を 安 全 に