Helping Teams Get Better Without Becoming Their Crutch
ストリームアラインドチームが新機能を開発している。コードは動く。ローカルではテストも通る。しかしパイプラインを見たとき、セキュリティスキャンを追加する必要があることに気づく。誰もやったことがない。ゼロから学ぶのに何週間もかけるか、プラットフォームチームに頼んで全チーム向けに作ってもらうか。どちらにせよ、デリバリーは遅れる。
この状況はエンジニアリング組織で日常的に起こる。チームにはまだ備わっていない能力が必要になる。その知識は会社のどこかに存在するが、チームが素早く前進するのに役立つ形ではアクセスできない。
ツールがあることと使いこなせることのギャップ
プラットフォームチームは重要な仕事をしている。共有インフラ、再利用可能なパイプライン、標準化されたサービスを構築する。しかしプラットフォームがあることと、それをうまく使いこなせることは別だ。チームはモニタリングスタックにアクセスできても、自サービスにとって重要なメトリクスが何かわからないかもしれない。CIパイプラインテンプレートはあっても、実際にリグレッションを検出するテストの書き方を理解していないかもしれない。セキュリティスキャンツールは利用可能でも、結果の解釈方法や何を最初に修正すべきかわからないかもしれない。
このツールの可用性と実践的な能力のギャップこそ、イネーブリングチームが介入する場面である。
イネーブリングチームが実際に行うこと
イネーブリングチームは、他のチームが特定のスキルを習得するのを支援する。焦点領域はセキュリティ、テスト、可観測性、CI/CDプラクティス、あるいはストリームアラインドチームが必要としているがまだ習得していないあらゆる能力である。
重要な違い:イネーブリングチームは他のチームの代わりに作業をしない。知識とスキルを移転し、ストリームアラインドチームがその後自立して運用できるようにする。
先ほどのセキュリティスキャンの例で考えてみよう。イネーブリングチームは次のことを行う:
- 数スプリントの間、ストリームアラインドチームと並行して作業する
- スキャンツールをパイプラインに統合する方法を示す
- スキャン結果の読み方と優先順位の付け方を説明する
- アラートと対応手順の設定を支援する
- チームが自分で実行できるようになったら手を引く
イネーブリングチームはセキュリティスキャンの設定を維持しない。すべての検出結果をトリアージしない。恒久的なエスカレーション窓口にもならない。その特定の能力について、自分たちを不要にすることが仕事である。
他のチームとの違い
この区別は重要である。なぜなら組織はしばしばイネーブリングチームをプラットフォームチームや通常のストリームアラインド業務と混同するからだ。
イネーブリングチーム vs プラットフォームチーム: プラットフォームチームは再利用可能なツール、サービス、インフラを生み出す。イネーブリングチームは知識、プラクティス、習慣を生み出す。プラットフォームチームはハンマーを渡す。イネーブリングチームは親指を叩かずにハンマーを振るう方法を示す。
イネーブリングチーム vs ストリームアラインドチーム: ストリームアラインドチームはユーザーに提供する機能と価値で評価される。イネーブリングチームは、他のチームが特定の領域でどれだけ早く自立するかで評価される。数ヶ月後に同じチームが同じ問題で助けを求めてきたら、イネーブリングチームは失敗している。
イネーブリングチームの一時的な性質
イネーブリングチームは特定のストリームアラインドチームにとって恒久的な存在ではない。チームAと2スプリントだけテストプラクティスに取り組み、その後チームBに移ってデプロイ戦略のような別の問題に取り組むかもしれない。後日、チームAが新しいスキルを必要とする新しいテクノロジーを採用したときに戻ってくるかもしれない。
この一時的な構造が極めて重要である。イネーブリングチームが長く留まりすぎると、依存関係になる。ストリームアラインドチームは学ぶのをやめ、問題を解決するためにイネーブリングチームに頼り始める。それでは目的が完全に損なわれる。
ストリームアラインドチームがその能力を自分で扱えるようになったら、イネーブリングチームは手を引かなければならない。必要なくなったからではなく、成功したからである。
CI/CDコンテキストでの実践例
イネーブリングチームはデリバリープラクティスにおいて特に価値が高い。なぜならCI/CDは多くの分野にまたがるからだ。イネーブリングチームが介入する状況の例を挙げる:
テスト戦略: チームはユニットテストを書いているが、実装の詳細が変わるたびに壊れる。イネーブリングチームは、内部構造に結合せずに意味のある結果を証明する振る舞いベースのテストに移行するのを支援する。
環境管理: チームのステージング環境が本番と一致しないため、バグがすり抜ける。イネーブリングチームは、環境がなぜ異なるのか、ギャップをどう埋めるのかを理解するのを支援する。
フィーチャーフラグ: チームは機能トグルを使いたいが、結局デッドコードと管理されていないフラグの混乱に陥る。イネーブリングチームは、トグルの実装、命名、クリーンアップを体系的に行う方法を示す。
パイプラインメトリクス: チームはグリーンパイプラインを持っているが、それでも壊れた機能を出荷する。イネーブリングチームは、本番の健全性と実際に相関するメトリクスを特定し、意味のあるゲートを追加する方法を支援する。
パイプラインシグナルからのインシデント対応: チームはビルド失敗を見るが、何を最初に調査すべきかわからない。イネーブリングチームは、パイプラインの出力を運用上の判断に結びつけるランブックとダッシュボードの構築を支援する。
イネーブリングチームがやってはいけないこと
イネーブリングチームの概念を誤用するのは簡単である。一部の組織はイネーブリングチームを、誰もやりたがらない作業の捨て場として扱う。他の組織は難しい問題を恒久的に引き継がせるために使い、それが新たなボトルネックを生み出す。
イネーブリングチームは次のようなものではない:
- 他のチームが避ける退屈な作業を行うチーム
- 複雑なタスクを理解している唯一の存在だからといって引き継ぐチーム
- 特定ドメインの恒久的なサポートチャネル
- 他のチームのミスを修正するシニアエンジニアの集団
イネーブリングチームがストリームアラインドチームに属する作業をやり始めた瞬間、イネーブリングをやめて置き換えを始めている。
イネーブリングチームのためのセルフチェック
イネーブリングチームを運営または参加する場合、以下の質問で軌道を確認できる:
- 私たちが去った後、ストリームアラインドチームはこの能力を私たちなしで扱えるか?
- 私たちはチームと並行して作業しているか、それとも彼らの作業を引き継いでいるか?
- 各エンゲージメントに明確な終了条件があるか?
- 成功をチームの自立で測っているか、自分たちのアウトプットで測っているか?
- 最後に支援したチームが同じ問題で再び私たちを必要としたのはいつか?
答えが恒久的な依存関係になっていることを示しているなら、アプローチを調整する時である。
成功の本当の尺度
仕事をうまくやったイネーブリングチームは見えなくなる。支援したストリームアラインドチームはもはや彼らのことを考えない。より良いテスト、より安全なパイプライン、より信頼性の高いデプロイで機能を出荷するだけだ。知識移転が徹底的に機能したため、その知識の元の出所は忘れられる。
それがポイントである。イネーブリングチームは、教える各特定の能力について自分たちを不要にするために存在する。成功すれば、組織は人員を増やさずにキャパシティを得る。チームはより自律的になる。デリバリーが改善されるのは、誰かがより良いツールを構築したからではなく、より多くの人々が既に持っているツールの使い方を知っているからである。
そして、単一のチームだけでは習得できない新しい課題が現れたとき、次のパターンである「複雑サブシステムチーム」の出番となる。