Team Topologies メモ

Team Topologies メモ

  • コンウェイの法則(1968)
    • システムはそれを作る組織と同じ構造の設計になる
    • コンパイラを4つのチームで作ったら4つのパスを持つコンパイラになる
    • 共通DBAチームがいると、全サブシステムが一つの共通DBを使う構造になる
  • 一方で、そのような設計のシステムに携わる開発者の認知負荷は高くなる
  • Software that fits your head. = そのソフトウェアについて頭の中で全部わかっている状態が一番、開発のパフォーマンスが出る 
  • 開発者の認知的負荷は以下の三種類に大別される
    • Intrinsic = 要素技術的内容 
    • Extraneous = 環境的内容 (デプロイ方法など)
    • Germane = ドメインにフォーカスした内容 
  • Extraneous を大きく減らし、Intrinsic を抑制し、Germane に注力することで開発のパフォーマンスが上がる
  • →チームを分割してデザインすることで Intrinsic/Extraneous な認知負荷を増やさないようにする。
  • チーム内のコミュニケーションは広帯域に、チーム外のコミュニケーションは低帯域コミュニケーションにする
    • チーム間のパスを最小化
    • それでいて必要な場合に必要なコミュニケーションを誘発できる仕組み
  • → Team API
  • Team API には コード、バージョン管理、ドキュメント、チームの原則、コミュニケーションスタイル、中期計画などが含まれる
    • ジェフ・ベゾスも「チームはDos攻撃に備えて、SLA/クォータ/スロットリングを定義しておくべき」と言っていたとのこと
  • これまで小さなチーム体制として出てきた以下のチームにはそれぞれ弱点がある
    • feature チーム:フィーチャーを追加し、引き継ぎはするが、あとの面倒はみない。(悪い場合には、来たときよりも美しくというボーイスカウトルールに反してしまうこともある)。
    • プロダクトチーム:時折、専門的な知識の助けが必要になる
    • ツールチーム:ツールがサイロ化する
  • ここで提案するチームの定義は4つ
    • Stream-aligned Team:中心となるチーム。このチームが価値を生み出す。フィーチャーをデリバリーする安定したフローを築く
    • Enabling Team: 先んじて学習し、Stream-aligned Team が自律するのを助けるチーム
    • Complicated-subsystem Team: 専門的な知識を必要とするサブシステムを提供するチーム
    • Platform Team: Stream-aligned Teamが利用するプラットフォームを提供するチーム
  • それぞれのチーム間のインタラクションモードは3つ、それぞれの強み弱みは
    • コラボレーション:2つのチームが混ざり合ってインタラクションを多く働く
      • 強み:素早いイノベーションを提案できる。引き継ぎが少なくてすむ。
      • 弱み:コンテキスト共有のための認知負荷が非常に高い。チーム間の責任が曖昧になる。
    • X as a Servise: 片方のチームがもう一方へサービスを提供し、サービス利用側チームのユーザーエクスペリエンスを重視したモード。
      • 強み:クリーンなAPIを持ったサービスにより、利用側の認知負荷が抑えられる。
      • 弱み:高度なサービスマネジメントが必要になる、また、一度決めたAPIのイノベーションは遅くなる。
    • ファシリテーション:片方がもう一方を支援する
      • 強み:支援される側の障害が取り除かれる
      • 弱み:ファシリテーションを提供する側は経験豊富であることが求められる。また相互の文化の違いで戸惑うことも多い。

  • 参考