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
3
3.5k
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
@技術的負債に向き合うOnline Conference
https://findy.connpass.com/event/297813/
Ryunosuke Iwai
November 21, 2023
Tweet
Share
More Decks by Ryunosuke Iwai
See All by Ryunosuke Iwai
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
220
バッチ処理のSLOをどう設計するか
rynsuke
10
1.5k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
2
1.5k
Notionではじめるライフハックのススメ
rynsuke
24
1.4k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
11k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.1k
Other Decks in Technology
See All in Technology
モノリスの認知負荷に立ち向かう、コードの所有者という思想と現実
kzkmaeda
0
110
数百台のオンプレミスのサーバーをEKSに移行した話
yukiteraoka
0
680
「家族アルバム みてね」を支えるS3ライフサイクル戦略
fanglang
1
270
大規模プロジェクトにおける 品質管理の要点と実践 / 20250327 Suguru Ishii
shift_evolve
0
290
モンテカルロ木探索のパフォーマンスを予測する Kaggleコンペ解説 〜生成AIによる未知のゲーム生成〜
rist
4
1.1k
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
990
[CATS]Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
150
Amazon Q Developer 他⽣成AIと⽐較してみた
takano0131
1
120
React Server Componentは 何を解決し何を解決しないのか / What do React Server Components solve, and what do they not solve?
kaminashi
6
1.2k
年末調整プロダクトの内部品質改善活動について
kaomi_wombat
0
210
3/26 クラウド食堂LT #2 GenU案件を通して学んだ教訓 登壇資料
ymae
1
210
非エンジニアにも伝えるメールセキュリティ / Email security for non-engineers
ykanoh
13
4k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
4
450
Automating Front-end Workflow
addyosmani
1369
200k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
470
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Thoughts on Productivity
jonyablonski
69
4.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Unsuck your backbone
ammeep
670
57k
Statistics for Hackers
jakevdp
798
220k
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:チーム分割において気をつけるべきポイント • チームとシステムの境界のずれに、技術的負債が発⽣することがある 所有権の曖昧なロジックが詰め込まれ、メンテ性が低下しやすい • ソフトウェアの⾃然な境界 = 節理⾯でチーム‧システムを分割する ⼀度決めたら終わりではなく、常により良い節理⾯を模索していく
• 「システムの切り込み」から始める 変化に対応しつつ、少しずつインターフェースを固めていく
ク ラ ウ ド 運 ⽤ を 安 全 に