目次を表示する

Platform Engineering 実践地図 ── 各社はどんな課題に、どう答えたか

第9話 Cognitive Load と Team Topologies ── 組織と技術の同型性

場面

「ツールを足したのに、なぜ開発者の負担は減らないのか」

開発者向けに新しいCLIを作った。Backstageを立てた。Terraformモジュールを整えた。CI/CDを刷新した。それぞれ使いやすいはずだ。

ところが、現場の声はこうだ。「Backstageでサービスを生成して、Terraformモジュールでインフラを書いて、CLIでデプロイして、Datadogで監視を確認する。でも、Backstageの YAML と Terraformの変数の関係が分からない。CLIのオプションがTerraformの何を上書きするのかも分からない。結局Slackで聞きに行く」。

ツールが増えた。学ぶべきものも増えた。

このパターンは、Platform Engineering で最も狡猾なアンチパターンのひとつだ。抽象を増やしているつもりが、実は認知負荷を増やしている。第10話で「Cognitive load を下げるはずが上げてしまう」というアンチパターン名がついている現象だ。

なぜこうなるのか。問題の根は、「認知負荷とは何か」を測らずに足し算しているからだ。Team Topologies が提供する道具は、この測定と削減を体系的に行うための設計言語だ。本章では、Cognitive Load 理論の3分類、Team Topologies の4チームと3 interaction mode、TVPと「3つの実例が出るまで抽象化を待つ」原則、そして Inverse Conway Maneuver の正しい使い方を整理していく。

この章を読み終えると、次の3つができるようになる。

  • 自社のチームが背負っている認知負荷を、Intrinsic / Extraneous / Germane の3分類で見分けられる
  • Team Topologies の4チームタイプと3 interaction mode で、自社の組織を地図化できる
  • TVP と「3つの実例が出るまで抽象化を待つ」原則を、自分のプラットフォーム化判断に適用できる

Cognitive Load の3分類

認知負荷理論は、もともと教育心理学者 John Sweller が1980〜90年代に体系化したものだ。Team Topologies はこれをソフトウェア組織に応用した。

3種類の認知負荷がある。

種類意味プラットフォーム的扱い
Intrinsic(内在的)課題本来の難しさ・必要なスキルアルゴリズムの選択、ドメインモデリング訓練で軽減可能。残しておきたい
Extraneous(外在的)仕組み・ツール・無駄な手続き由来Terraformの細かい構文、デプロイ手順プラットフォームで削減すべき主対象
Germane(関連的)専門性・ドメイン知識への深まり自社プロダクトのビジネスロジック理解残しておきたい・伸ばしたい

ポイントは、3つすべてを下げればよいわけではない ことだ。

❌ 認知負荷を一律に下げようとする発想
   → ドメイン知識(Germane)まで隠してしまうと、
     開発者は自分のプロダクトで何を作っているか分からなくなる

✅ Extraneous を選択的に削減する発想
   → 「Cloud Run の起動引数の正解」「IAM 設定の細部」のような
     プロダクトの本質と関係ない知識をプラットフォームの内側に封じ込める

第7話で見た 10X の Terraform モジュール化は、この Extraneous の選択的削減 の典型だ。GCP固有のIAM設定や Cloud Run の細かいパラメータ(Extraneous)をモジュールに封じ込め、開発者には「何を作りたいか」(Germane)に集中してもらう。

“The platform team provides internal services to reduce the cognitive load that would be required from stream-aligned teams.” — Team Topologies (Skelton & Pais, 2019)

Platform Engineering の存在意義を一言で言えば、これに尽きる。Stream-aligned team の Extraneous Cognitive Load を構造的に削減し、Germane な仕事に集中できる状態を作る

Cognitive Load Assessment

Team Topologies は Cognitive Load Assessment という測定ツールも提供している(GitHub: TeamTopologies/Team-Cognitive-Load-Assessment)。チームメンバーに「自分が今背負っている認知負荷を、Intrinsic / Extraneous / Germane に分けてスコアリングしてもらう」というシンプルなアセスメントだ。

数字を取ること自体に意味があるのではない。チームメンバーの「認知負荷についての言語」を揃えることに意味がある。「いま負荷が高い」と言ったとき、それが「ドメインを学ぶ負荷」なのか「Terraformの細部を覚える負荷」なのかが分かれば、対処法が変わる。


Team Topologies の4チームタイプ

組織を「認知負荷を最適化する単位」として再設計する道具が、Team Topologies の4チームタイプだ。

graph TD
    A[Stream-aligned team<br/>業務ドメインに沿った主役] --> X[認知負荷<br/>Intrinsic + Germane]
    B[Platform team<br/>共通能力を提供] --> A
    C[Enabling team<br/>一時的支援] --> A
    D[Complicated-subsystem team<br/>深い専門知識] --> A

    style A fill:#dfd
    style B fill:#ddf
    style C fill:#fdf
    style D fill:#ffd
チームタイプ役割
Stream-aligned team業務ドメインに沿った主役チーム。価値の流れ(stream)に沿って end-to-end を所有するプロダクトの「決済」「検索」「ユーザー認証」など、機能領域別チーム
Platform teamStream-aligned teamが使う共通能力を提供する10X SRE(Service Kit/Team Kit)、freee Platform Delivery、Sansan Platform Engineering Unit
Enabling team一時的に Stream-aligned team に張り付き、新しい技術や習慣の習得を支援するLayerX Enabling、SmartHR の社内開発者コミュニティ運営
Complicated-subsystem team深い専門知識が必要な、複雑なサブシステムを担当ML プラットフォーム(Uber Michelangelo)、検索エンジン、暗号系基盤

第7話で見た国内SaaSの組織を、この4分類で再解釈してみよう。

  • 10X:SREチームが Platform team として動き、Stream-aligned team(プロダクト開発チーム)に Service Kit / Team Kit を提供する
  • カケハシ:Embedded SRE は Stream-aligned team に近接する Enabling team 的な存在、Platform SRE が Platform team として横断基盤を担う
  • Sansan:Platform Engineering Unit が Platform team、Embedded SRE が Enabling team、Bill One SRE のような独立チームは半ば Stream-aligned team の一部
  • freee:SRE 4分割(Platform / Enabling / Cloud Governance / DBRE)は明示的に Team Topologies の語彙で組まれている

このマッピングを行うと、第7話で見た「ハイブリッド型」が、Team Topologies の語彙で Platform team + Enabling team の組み合わせ として整理できる。日本のSaaS各社が独自に到達した組織パターンが、Team Topologies のフレームに自然と収まることが分かる。


3つの interaction mode

チームタイプだけでは組織設計は完成しない。チーム間の 相互作用パターンを3つに限定するのが Team Topologies のもうひとつの核心だ。

Interaction mode意味期間
X-as-a-Service一方が他方にサービスを「提供」する関係。Selfサービスで使える永続的
Collaboration2チームが密に協働して新しい問題を解く関係一時的(数週間〜数ヶ月)
Facilitating一方が他方の学習を「促進」する関係一時的
graph LR
    A[Stream-aligned A] -->|Collaboration| B[Stream-aligned B]
    C[Platform team] -->|X-as-a-Service| A
    C -->|X-as-a-Service| B
    D[Enabling team] -->|Facilitating| A
    D -->|Facilitating| B

Platform team と Stream-aligned team の関係は X-as-a-Service が基本 だ。プラットフォームを使う側は、毎回プラットフォームチームと打ち合わせる必要はない。ドキュメントとセルフサービスインターフェイスがあれば動ける。これが第8話で見た「採用任意」「内部顧客」の運営思想を、相互作用のレベルで実装した形だ。

Enabling team は Facilitating だ。「やってあげる」のではなく「できるようになるよう促す」。一時的に張り付いて、習得が終わったら離れる。LayerX の Enabling、Sansan の Embedded SRE が「教える側として動く」とされているのは、まさにこのモードだ。

Collaboration は意図的に時限的 にする。問題が解けて知識が共有されたら、X-as-a-Service か Facilitating に格上げ/降格する。Collaboration を永続化すると、両チームが共同責任を抱える時間が長引き、認知負荷が増える。

❌ 悪いパターン:
   全ての関係が Collaboration(毎回打ち合わせ)
   → チーム間の調整コストが認知負荷を圧迫する

✅ 良いパターン:
   日常は X-as-a-Service(セルフサービス)、
   新しい問題が出たときだけ Collaboration、
   学習機会には Enabling team が Facilitating

第6話で見た Tailscale のようなインフラ3名のスタートアップは、X-as-a-Service の薄いプラットフォームを「Wikiページ + Slackチャンネル」レベルで運営している。これは TVP(次節)の最小実装でもある。


TVP(Thinnest Viable Platform):最小限から始める

第8話で触れた TVP を、ここでは原則のレベルで深く扱う。

A TVP is a careful balance between keeping the platform small and ensuring that the platform is helping to accelerate and simplify software delivery for teams building on the platform. — Team Topologies

TVP の本質は、「最小限で価値が出る形を作って、需要があるところだけ厚くする」 だ。物理的な実装の薄さではなく、ユーザーから見たときの薄さが重要。

具体的に何が薄さを定義するか。

  • 意思決定が明確:「推奨ツールはこれです」「困ったらここに聞いてください」が一覧で分かる
  • 問い合わせ先が一意:Slackチャンネルがひとつ、担当者が明確
  • 情報が散らばっていない:READMEとWikiが何箇所にも分散していない
  • 手順が短い:5ステップ以内で初回デプロイができる

最初から Backstage と Terraform モジュールと CI/CD と監視と権限管理を全部用意する必要はない。Wiki ページ1枚と Slack チャンネル1つで TVP として成立する

なぜ TVP が重要か。理由は2つある。

第一に、早く始めれば早くフィードバックが得られる。Field of Dreams(“Build it and they will come”)アンチパターンを避ける唯一の方法は、小さく始めて使ってもらいながら学ぶことだ。

第二に、過剰抽象化を避けられる。ここで関係するのが次の原則「3つの実例が出るまで抽象化を待つ」だ。


「3つの実例が出るまで抽象化を待つ」

ソフトウェア界には Sandi Metz の有名な格言がある。

Prefer duplication over the wrong abstraction.(誤った抽象化より重複を選べ) — Sandi Metz, The Wrong Abstraction (2014)

Platform Engineering における共通化判断にも、この原則がそのまま使える。Rule of Three:「3つの実例が出るまで抽象化を待つ」。

具体的にはこうだ。

状況1:1チームが特定の問題(例:マルチリージョンデプロイ)を解いている
       → 共通化しない。そのチーム固有の解として残す

状況2:2チームが似たような問題を解いている
       → まだ共通化しない。違いを観察する

状況3:3チーム目が現れた
       → 共通点と相違点を比較し、共通化する範囲を決める
       → 抽象化の方向性が、3つの実例から逆算できる

なぜ早すぎる抽象化が危険か。1チーム目の解を「共通解」として固定すると、2チーム目・3チーム目の異なる要件を吸収できないからだ。結果として、後発チームは共通基盤に「無理に合わせる」か、「逸脱して独自実装する」かの2択を迫られる。前者は認知負荷を増やし、後者は共通基盤を形骸化させる。

3チームの実例が揃うと、**「どこが本当に共通で、どこが各チーム固有か」**が見える。共通の核と、各チームのカスタマイズポイントを切り分けて設計できる。

これは第8話の TVP(最小限から始める)と表裏一体だ。最小限から始めて、3つの実例が出てから厚くする。

国内事例で言えば、Sansan が Bill One → Contract One → Sansan Data Intelligence へ認証基盤を展開した過程は、最初から共通基盤を作ったのではなく、Bill One での実装が成熟してから他に展開したことが特徴的だ。1プロダクトでの実例を成熟させてから、横展開している。


Cognitive Leakage:抽象が漏れる

抽象化のもうひとつの落とし穴を、Thoughtworks は Cognitive Leakage と呼んだ。

Cognitive Leakage:抽象に隠した複雑性が、いつか問題として噴き出す現象 — Thoughtworks: Cognitive leakage

Terraformモジュールが「いい感じに動く」状態を作っても、いざ障害が発生したときには、モジュールの内側で何が起きているかを開発者が理解する必要がある。普段は隠せていた認知負荷が、トラブル時に一気に漏れ出す。

これは Joel Spolsky の “All non-trivial abstractions, to some degree, are leaky”(すべての自明でない抽象は、ある程度漏れる)という古典的観察と同じ系譜にある。

Cognitive Leakage を見越した設計とは何か。

  • Sensible defaults + Escape hatches:デフォルトは賢く、しかし「逃げ道」を残す。プラットフォームから外れた使い方ができる
  • Observable internals:内部状態が観測可能。ブラックボックスにしない
  • Documentation that explains “why”:手順だけでなく「なぜこの設計か」を文書化する
  • On-call ownership clarity:トラブル時に誰が一次対応するかが明確

第10話で扱う「Bottleneck化」アンチパターンは、Cognitive Leakage 対策が抜けたときに発生する。すべての異常がプラットフォームチームに飛び込んでくる構造を作ると、彼らがボトルネックになる。Self-Service と Escape Hatch を併設することが、これを防ぐ唯一の方法だ。


Conway’s Law と Inverse Conway Maneuver

組織と技術の同型性を語る上で外せないのが、1968年に Mel Conway が観察した法則だ。

Any organization that designs a system… will produce a design whose structure is a copy of the organization’s communication structure. — Mel Conway, 1968

組織の構造は、その組織が作るシステムの構造と同型になる。チーム間の境界が、サービス間の境界として現れる。コミュニケーションパスが API 境界として現れる。

Inverse Conway Maneuver は、この観察を逆向きに使う発想だ。望むアーキテクチャを先に決めて、それに合わせて組織構造を変える。Team Topologies は事実上「Inverse Conway Maneuver の実装ガイド」と位置づけられている。

ところがここに、よくある誤解がある。

❌ 「Inverse Conway Maneuver は組織変更ありき」
   → 「マイクロサービス化したいから、まず組織を機能別チームに分割しよう」
   → 組織を変えただけでは、システムは変わらない

✅ 「アーキテクチャと組織は反復的に共進化させる」
   → 望ましいアーキテクチャの方向性を決める
   → 既存組織のうち、その方向と矛盾するチーム境界だけを修正する
   → アーキテクチャの一部を変える
   → さらに矛盾するチーム境界を修正する
   → ...の繰り返し

Team Topologies の著者たちが繰り返し強調するのは、**Conway’s Law を「使い倒す」**ということだ。組織を一度に大改造するのではなく、Stream-aligned team / Platform team / Enabling team / Complicated-subsystem team という4チームタイプに 段階的にマッピングしていく。3 interaction mode を 段階的に整理していく。

第7話で見た カケハシの民主的アプローチ は、まさにこの段階的進化の典型だ。隔週30分のSRE横断定例で「共通言語化」してから、AWS命名規則の統一を合意し、RACI を整備していく。組織図の一斉変更ではなく、会話の積み重ねで組織と技術を共進化させている。


ハイブリッド型を Team Topologies で再解釈する

第7話で観察した「Platform SRE × Embedded SRE のハイブリッド型」を、Team Topologies の語彙で精密に書き直してみよう。

国内SaaSPlatform teamEnabling teamStream-aligned teamInteraction modes
10XSRE(Terraformモジュール、SLO)(明示的なEnablingは少ない)プロダクト開発チームX-as-a-Service中心
カケハシPlatform SREEmbedded SREプロダクトチームX-as-a-Service + Facilitating
SansanPlatform Engineering UnitEmbedded SREプロダクトチーム + Bill One SREX-as-a-Service + Facilitating + Collaboration(横断チーム)
freeePlatform / Cloud Governance / DBREEnablingプロダクト開発チームX-as-a-Service + Facilitating
Visionalプラットフォーム基盤推進室(ORE)(事業内SRE Group)各事業のプロダクトチームX-as-a-Service中心

ここから読み取れることは2つある。

第一に、4チームタイプはほぼすべての国内事例に当てはまる。Team Topologies が提供する語彙は、現実の組織を観察するための強力なレンズだ。

第二に、国内事例では Enabling team の存在が際立つ。海外事例(Spotify、Netflix、Uber、Mercari)では Platform team 中心の語り口が多いが、国内では「Embedded SRE が教える側として動く」「横断会で合意する」といった Facilitating の文化が強い。第5話・第7話で観察した「形式的な権限委譲より会で合意する」日本的進化は、Team Topologies の Enabling + Facilitating の組み合わせとして再解釈できる。

これは Conway’s Law が逆向きに作用している例だ。日本の組織文化(合意形成・段階的変革・対話重視)が、Enabling 中心のチーム構造として現れていると言える。


✅ 良い設計 / ❌ 悪い設計

組織と技術を共進化させるときの典型的な誤解と、それを避ける選択を整理しておく。

❌ 悪い設計:
   - 「マイクロサービス化したいから組織を機能別に分割する」
     → Inverse Conway Maneuver の誤用。組織変更だけでシステムは変わらない

   - 「Cognitive load を一律に下げる」
     → Germane(ドメイン知識)まで隠してしまう。
       開発者は自分のプロダクトで何を作っているか分からなくなる

   - 「1チームの実例から共通基盤を作る」
     → 早すぎる抽象化。Wrong Abstraction の罠

   - 「すべての関係を Collaboration(毎回打ち合わせ)にする」
     → 調整コストが認知負荷を圧迫する

   - 「抽象を増やせば認知負荷は下がる」
     → ツールが増えるほど学ぶべきものも増える矛盾

✅ 良い設計:
   - 「Extraneous Cognitive Load を選択的に削減する」
     → Intrinsic と Germane は残す。Terraformの細部のような外在的負荷だけ封じる

   - 「3つの実例が出るまで抽象化を待つ」
     → Rule of Three。共通点と相違点を3例で見極める

   - 「日常は X-as-a-Service、新規問題は Collaboration、学習は Facilitating」
     → 3 interaction mode を意図的に使い分ける

   - 「TVPから始める。Wikiページ1枚も立派なプラットフォーム」
     → 最小限で価値が出る形を作って、需要があるところだけ厚くする

   - 「Sensible defaults + Escape hatches」
     → Cognitive Leakage を見越して、逃げ道を残す設計

次章へ

ここまで、Cognitive Load の3分類、Team Topologies の4チームと3 interaction mode、TVP、「3つの実例が出るまで抽象化を待つ」原則、Conway’s Law と Inverse Conway Maneuver を見てきた。

これらの設計原則を 失敗するとどうなるか を体系的に扱うのが、次の第10話だ。13個のアンチパターンを「症状・根本原因・脱出法」の3点セットで整理する。

  • Field of Dreams:誰も使わないプラットフォーム
  • Backstage導入で満足する:Portal-only Mindset
  • Bottleneck化:プラットフォームチームが詰まる
  • Cognitive load を下げるはずが上げてしまう:本章の延長線
  • 他社模倣:Spotifyの解を20人のスタートアップに移植する罠
  • Day 2を考えない:ローンチ後の劣化

これらは、本章で見た原則を守らなかったときに発生する具体的な失敗パターンだ。読者が自分の組織で「これが起きていないか」を観察するための診断道具として使ってほしい。


問い:あなたのチームが今背負っている認知負荷を、Intrinsic / Extraneous / Germane に分けるとしたら、どの割合になるか。Extraneous が3割を超えていたら、それはプラットフォームで構造的に削減できる対象だ。


参考文献