LESSON 40分

ストーリー

佐藤CTO
アーキテクチャは描いた。技術負債も管理できるようになった。次は組織

佐藤CTOが意味深に言いました。

佐藤CTO
コンウェイの法則を覚えているか?組織の構造がシステムの構造を決める。つまり良いアーキテクチャを実現するには、良い組織構造が必要なんだ
あなた
チーム分けの話ですか?
佐藤CTO
単なるチーム分けではない。チームトポロジーという体系化されたフレームワークがある。Matthew Skelton と Manuel Pais が提唱した、ソフトウェアチームの構成パターンだ

4つの基本チームタイプ

1. Stream-aligned Team(ストリームアラインドチーム)

ビジネスの価値ストリーム(顧客への価値の流れ)に沿ったチーム。組織の主力チームです。

項目内容
目的特定のビジネスドメインの価値を継続的にデリバリーする
特徴エンドツーエンドの責任、フルスタック
決済チーム、検索チーム、ユーザーオンボーディングチーム
理想サイズ5-9名
認知負荷チームが担当範囲を自律的に管理できるサイズに制限
stream_aligned_team_example:
  name: "決済チーム"
  domain: "決済処理全般"
  responsibilities:
    - "決済フロントエンド(チェックアウト画面)"
    - "決済API"
    - "決済ゲートウェイ連携"
    - "決済関連のデータベース"
    - "決済モニタリング"
  autonomy: "デプロイ、設計判断、技術選定をチーム内で完結"

2. Platform Team(プラットフォームチーム)

ストリームアラインドチームの認知負荷を減らすための、内部プラットフォームを提供するチーム。

項目内容
目的ストリームアラインドチームがインフラを意識せずに開発できるようにする
特徴セルフサービス、API・ツール・ドキュメントを提供
DevOpsプラットフォームチーム、データプラットフォームチーム
理想サイズ4-8名
成功指標利用チームの満足度、セルフサービス率
platform_team_example:
  name: "Developer Platform チーム"
  provides:
    - "CI/CDパイプラインテンプレート"
    - "Kubernetesクラスター管理"
    - "監視・ログ基盤"
    - "セキュリティスキャン"
    - "開発環境のプロビジョニング"
  principle: "ストリームチームを顧客として扱う"

3. Enabling Team(イネーブリングチーム)

他チームの技術力向上を支援する専門家チーム。

項目内容
目的ストリームアラインドチームが新しい技術やプラクティスを導入するのを支援
特徴コーチング、メンタリング、一時的な支援
SREチーム(組織横断支援)、アーキテクチャチーム
理想サイズ3-6名
期間数週間〜数ヶ月の一時的な関与
enabling_team_example:
  name: "SRE イネーブリングチーム"
  activities:
    - "SLO/SLI策定の支援(各チームに1-2週間常駐)"
    - "インシデント対応プラクティスの導入"
    - "パフォーマンスチューニングのコーチング"
  anti_pattern: "永続的に他チームの仕事を代行すること"

4. Complicated-subsystem Team(複雑サブシステムチーム)

高度な専門知識が必要なサブシステムを担当するチーム。

項目内容
目的特殊な専門知識が必要な領域を担当し、他チームの認知負荷を軽減
特徴深い専門知識、APIとして機能を提供
機械学習チーム、暗号化エンジンチーム、リアルタイム処理チーム
理想サイズ3-8名
存在理由その領域の複雑さがストリームチームの認知負荷を超える場合

3つのインタラクションモード

チーム間のやり取り方法を3つに限定し、明確にします。

graph LR
    subgraph Collab["Collaboration<br/>(協働)"]
        C1["2チームが密に協力して<br/>1つの目標に取り組む"]
        C2["期間限定(数週間)"]
    end
    subgraph XaaS["X-as-a-Service<br/>(サービス)"]
        X1["一方のチームが<br/>APIやツールを提供する"]
        X2["継続的"]
    end
    subgraph Facil["Facilitating<br/>(ファシリテーション)"]
        F1["一方のチームが<br/>他方の能力向上を支援する"]
        F2["期間限定(数週間)"]
    end

    classDef collab fill:#3498db,stroke:#2980b9,color:#fff
    classDef xaas fill:#27ae60,stroke:#1e8449,color:#fff
    classDef facil fill:#9b59b6,stroke:#8e44ad,color:#fff
    class C1,C2 collab
    class X1,X2 xaas
    class F1,F2 facil
モード使う場面
Collaboration新しいサービスの立ち上げ期決済チーム × プラットフォームチームが新決済基盤を構築
X-as-a-Service安定したインターフェースがある場合プラットフォームがCI/CDをサービスとして提供
Facilitating新しいプラクティスの導入SREチームがストリームチームにオブザーバビリティを指導

認知負荷の管理

チームトポロジーの核心は「チームの認知負荷を管理する」ことです。

認知負荷の3種類

種類説明
本質的認知負荷ドメインの本質的な複雑さ決済処理のビジネスロジック
外在的認知負荷環境に起因する不必要な複雑さインフラ設定、デプロイ手順
関連的認知負荷学習と応用に関する複雑さ新技術の習得
目標:
  - 本質的認知負荷: チームのドメインに集中
  - 外在的認知負荷: プラットフォームチームが吸収
  - 関連的認知負荷: イネーブリングチームが支援

「チームが”多すぎること”を抱えると、すべてが中途半端になる。チームが自律的に動ける範囲に責任を収める。それがチームトポロジーの本質だ」 — 佐藤CTO


まとめ

ポイント内容
4つのチームタイプStream-aligned、Platform、Enabling、Complicated-subsystem
3つのインタラクションCollaboration、X-as-a-Service、Facilitating
認知負荷チームが自律的に動ける範囲に責任を制限する
コンウェイの法則望むアーキテクチャに合わせて組織を設計する(逆コンウェイ)

チェックリスト

  • 4つの基本チームタイプの目的と特徴を理解した
  • 3つのインタラクションモードを理解した
  • 認知負荷の3種類と管理方法を把握した
  • チーム設計とアーキテクチャの関係を理解した

次のステップへ

次は「プラットフォームエンジニアリング」を学びます。チームトポロジーの中核であるプラットフォームチームが、どのように内部開発者プラットフォームを構築するかを見ていきましょう。


推定読了時間: 40分