Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
Search
Ryunosuke Iwai
November 21, 2023
Technology
4.4k
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
560
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
430
バッチ処理のSLOをどう設計するか
rynsuke
11
2.2k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
2.5k
Notionではじめるライフハックのススメ
rynsuke
24
2.1k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
12k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.8k
Other Decks in Technology
See All in Technology
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
730
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
710
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
11
5.1k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
26
17k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.9k
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
110
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
270
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.4k
Genieを崇めよ
kameitomohiro
0
170
絵ではじめるKubernetesセキュリティ
aoi1
5
700
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
280
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
250
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Thoughts on Productivity
jonyablonski
76
5.4k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Music & Morning Musume
bryan
48
7.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Rails Girls Zürich Keynote
gr2m
96
14k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
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:チーム分割において気をつけるべきポイント • チームとシステムの境界のずれに、技術的負債が発⽣することがある 所有権の曖昧なロジックが詰め込まれ、メンテ性が低下しやすい • ソフトウェアの⾃然な境界 = 節理⾯でチーム‧システムを分割する ⼀度決めたら終わりではなく、常により良い節理⾯を模索していく
• 「システムの切り込み」から始める 変化に対応しつつ、少しずつインターフェースを固めていく
ク ラ ウ ド 運 ⽤ を 安 全 に