https://confengine.com/conferences/devopsdays-tokyo-2022/proposal/16421
© Chatwork開発チームにオーナーシップを委譲するという手法プロダクト基盤開発部 尾崎 耕多2022年04月22日DevOpsDays Tokyo 2022
View Slide
ProfileࣗݾհKouta OzakiSREDevOps EngineerRust Engineerk_kinzal k_kinzal
前提の話1DevOpsDaysTokyo 2022
4Chatworkとはޮతʹใڞ༗Ͱ͖Δάϧʔϓνϟοτࣄͷݟ͑ΔԽ͕Ͱ͖ΔλεΫཧݟམͱ͕͠ͳ͘ͳΔϑΝΠϧཧ͍ͭͰձ͕ٞͰ͖ΔϏσΦ/Ի௨
5Chatworkは利用者数No.1*のビジネスチャット3݄ϦϦʔε10ສࣾ ಥഁʂ20ສࣾ ಥഁʂ30ສࣾ ಥഁʂಋೖࣾ34ສ3000ࣾҎ্ʂ(202112݄࣌)
Chatworkと競合の機能リリース比較6Chatwork Aࣾ Bࣾ Cࣾ
ChatworkのPRのリリース数と開発チームの人数の相関7022.54567.5902014 2015 2016 2017 2018 2019 2020 2021 2022ϦϦʔε ਓ
2010Chatworkのチームの変遷2011201420172019First Team Web1Web2 MobilePMPHPScalaSRESecurFrontend8
Projectプロジェクト型の開発体制によるオーナーシップの欠如9PMPHPFrontendiOSAndroidDesign
コミュニケーションパスの複雑化によるオーナーシップの欠如10Scala1PHP1PMPHP2SRE SecurityDesignMobileCustomerSupportScala2CEOFrontend
チーム間のシステム共有によるオーナーシップの欠如11SREPHP Scala1 Scala2 Scala10PHP2PHP1 Scala1 Scala2
12前提のまとめ• 機能開発の速度はSaaSを提供している企業として重要• しかしChatworkの開発速度をあげきれてない• 要因として職能組織としてスケールしたというのがあるかもその結果として開発のオーナーシップを取りづらくなった
開発速度を取り戻すための次世代開発基盤2DevOpsDaysTokyo 2022
次世代開発基盤のゴール142025年の事業計画に合わせて生産性を維持・向上できるプロダクトと組織を構築する
次世代開発基盤15AccountAccountMessageMessageTaskTaskFileFileɹ PMɹ Backendɹ Frontendɹ Mobileɹ Designɹ SRE横断チーム
横断型のチームの必要性と構造3DevOpsDaysTokyo 2022
横断チームの必要性17セキュリティ 専門知識全体最適機能チームだけでは解決できない課題がある
横断チームの難しさ18Dev ユーザーに価値を届け続けること横断チーム目的 専門のミッションを達成すること目的
横断チームの形19DevGateKeeperSupporterPaaSGuild
横断チームの形20DevGateKeeper• 専門領域に対して全オーナーシップを持つチーム• 開発チームからの依頼をベースに作業を行う• 専門知識の集約を行うため質の高いアウトプットを出しやすい• 代わりにチームのスケーラビリティを確保できないとボトルネックになりやすい性質があるゲートキーパー型のチーム
21Dev PaaS• サービスを提供して専門領域のオーナーシップを持つチーム• ゲートキーパーと違い、APIをベースにしたコミュニケーションを行うためボトルネックが発生しづらい• エンジニア的に夢と希望に満ち溢れたチームの形横断チームの形社内PaaS型のチーム夢って叶わないよね
22SupporterDev• 開発チームを支援するチーム• このチームは機能開発には関わらず、開発チームが機能開発の全オーナーシップを持つ• 代わりに機能開発に必要なことを支援する• 知識• 仕組みサポーター型のチーム横断チームの形
23GuildDev• 開発チームの特定のロールの集まったバーチャルなチーム• このチームは機能開発には関わらず、開発チームが機能開発の全オーナーシップを持つ• 横断的な課題の解決や、寄合所としてチーム間の情報共有や相談を行う• 完全にバーチャルな組織にすると推進力に欠ける可能性がある横断チームの形ギルド型のチーム
次世代開発基盤チームとしての選択24Dev Supporter• 開発者にオーナーシップを集約するという意味ではサポーター型のチームが適している• あくまでも現時点での方向性としての選択になる• 必要があれば他の形のチームを選択する可能性はある
DevOpsとガードレール4DevOpsDaysTokyo 2022
DevOpsとガードレール26DevSystemSupporter機能開発を行うのはあくまでも開発チーム。サポーター型のチームは直接、機能開発をおこなってシステムを触ることはしない。
DevOpsとガードレール27DevSupporterSystemCreate CreateDevOps & GuardrailSupport & Feedback MonitorGuardrail
実際の取り組み5DevOpsDaysTokyo 2022
土台としてのAWSアカウントの整備AWSmasterAuditApp1App2App3ҕৡҕৡࠪઃఆͷ༗ޮԽࠪϩάͷऩूAWSΞΧϯτͷ࡞Dev1Dev2Dev3ԣஅνʔϜ1ԣஅνʔϜ229
AWSDevOpsとしてのIaCのCD構築GitHubAtlantisApp1App2App2横断チームCreateDevCommitApply30
DevOpsとガードレールとしてのSSOとIaC化GitHubmasterDevSSO ProviderApp横断チームCommit PolicyLogin with SSOSyncApplyCreate31
KubernetesDevOpsとしてArgoCDを使ったGitOpsの構築ԣஅνʔϜ32GitHubDevSystemCommitSyncCreateArgoCD
KubernetesガードレールとしてOPAでのマニフェスト制限横断チームDevSystemCommitCreateGitHubConftestGitHubPull PolicyCommit PolicyApply33Gatekeeper
DevOpsとしてRDBの一時ユーザー発行34VaultProxyDevCreate Temporary UserGet User横断チームCreateRDB
KubernetesDevOpsとしてのRDBのスキーマ変更35Self HosterRunnerChange SchemaGitHubDevRun CIԣஅνʔϜCreateRDB
取り組んだ結果どうなったか36• まずは開発者が”できる”ようになることを重視• ガードレールはまだすべてを作りきれてない• 結果として今は開発チームがオーナーシップを発揮してる• もうちょっとフェーズが進むとガードレールがないことによる失敗によって開発速度の低下が起きそうなのでガードレール作りちまちまやってく
時間があれば雑談371. この道は正しいのかどうか• 開発チームに求められるスキルセットがえぐい• チームトポロジー• DevOpsパターン2. 理想の組織として変化し続けるために必要な方法3. Dev vs Ops4. DevOpsはDev主導の方がうまくいく?
まとめ6DevOpsDaysTokyo 2022
まとめ39• 問題→要因→解決方法の選択→問題解決• 問題解決の方法自体は何もすごいことはない• 泥臭くコツコツやってるだけ• 銀の弾丸はない• ベストプラクティスと呼ばれるものは優秀
まとめ4040