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
580
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
450
バッチ処理のSLOをどう設計するか
rynsuke
11
2.2k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
2.5k
Notionではじめるライフハックのススメ
rynsuke
24
2.2k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
12k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.8k
Other Decks in Technology
See All in Technology
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
140
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
210
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
160
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
130
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
300
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
4
930
KanaAI
shreyas1009
0
150
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
500
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
The agentic SEO stack - context over prompts
schlessera
0
960
Believing is Seeing
oripsolob
1
240
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Building Adaptive Systems
keathley
44
3.2k
Technical Leadership for Architectural Decision Making
baasie
3
590
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
Skip the Path - Find Your Career Trail
mkilby
1
240
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
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:チーム分割において気をつけるべきポイント • チームとシステムの境界のずれに、技術的負債が発⽣することがある 所有権の曖昧なロジックが詰め込まれ、メンテ性が低下しやすい • ソフトウェアの⾃然な境界 = 節理⾯でチーム‧システムを分割する ⼀度決めたら終わりではなく、常により良い節理⾯を模索していく
• 「システムの切り込み」から始める 変化に対応しつつ、少しずつインターフェースを固めていく
ク ラ ウ ド 運 ⽤ を 安 全 に