mnagaaのメモ

技術的なことはこのブログで書きます

チームトポロジー、SRE、Platform Engineering

チームトポロジーとは?

  • ソフトウェア開発およびIT組織におけるチーム構成と運用モデルのガイドライン
  • ソフトウェア開発と運用において、効果的なチーム構成が成功に不可欠なものであるということが前提となっている
  • チームの種類、責任、相互作用のパターンを定義して、組織が迅速かつ効果的にソフトウェアを提供するのをサポートする

4つの主要なチーム

https://martinfowler.com/bliki/TeamTopologies.html

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

エンドユーザーに直接価値提供をする機能やサービスを開発する。具体的には次のようなことを実践するチームを指す。

  • 特定の製品ライン:例えば、ある一つの製品の開発に集中するチーム
  • 顧客セグメント:例えば、特定の顧客グループに向けたサービスを開発するチーム
  • 機能セット:例えば、特定の機能やサービスの開発に専念するチーム

エンジニアリングプラットフォームチーム(Enabling Team)

他のチームが新しい技術や手法を取り入れるのをサポートすることを目的とするチームである。 このチームは、他のチームが効果的に働けるようにコーチやガイドの役割を果たす。

具体的には、次のような活動を行う:

  • 新しい技術の導入支援:例えば、新しいプログラミング言語やツールの使い方を教える。
  • 効率化のためのサポート:例えば、開発プロセスの改善や自動化ツールの導入を手助けする。
  • 問題解決のアドバイス:他のチームが技術的な問題に直面したときに、解決方法を提案する。

コンプリケイテッドサブシステムチーム(Complicated Subsystem Team):

高度な専門知識が必要な特定のコンポーネントやサブシステムを扱うチームこのチームは他のチームが対処するのが難しい技術的な課題に取り組む。 例として、機械学習アルゴリズムや複雑なデータ処理エンジンを開発するチームが挙げられる。

具体的な活動目標:

  1. 高度な専門知識の提供: このチームは、非常に専門的な知識やスキルを持っているため、特定の技術的な領域における深い理解が求められます。 例えば、分散システムの設計や高度な暗号化技術の実装など、他のチームが扱うのが難しい技術的な課題に対処します。
  2. 特定のコンポーネントやサブシステムの開発: このチームは、特定のコンポーネントやサブシステムの設計と開発を担当します。これらのコンポーネントやサブシステムは、システム全体のパフォーマンスや機能にとって非常に重要です。 例えば、リアルタイムデータ処理エンジンや高性能データベースエンジンの開発を担当します。
  3. 技術的な課題の解決: 他のチームが直面する技術的な問題に対して、専門的な知識を提供し、解決方法を提案します。 例えば、スケーラビリティの問題やパフォーマンスのボトルネックに対する解決策を提供します。

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

プラットフォームチームとは、他のチームが効率的に作業できるように、共通のインフラストラクチャやサービスを提供する専門チーム。 このチームは、ストリームアラインドチームや他の開発チームが迅速かつ効果的に仕事を進めるための基盤を整備し管理する。

具体的な活動

  1. 共通インフラストラクチャの提供と管理: プラットフォームチームは、開発環境、テスト環境、本番環境など、さまざまな環境を構築し、管理する。 これには、サーバーのセットアップ、ネットワークの設定、データベースの管理などが含まれる。

  2. CI/CDパイプラインの構築と運用: 継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインを設計し、実装する。 これにより、コードのビルド、テスト、自動デプロイが効率的に行われる。 例えば、JenkinsやGitLab CI/CDなどのツールを使用して、開発チームがコードをリリースするプロセスを自動化する。

  3. クラウドインフラの管理: クラウドサービス(AWS、Azure、Google Cloudなど)の管理を行う。これには、リソースのプロビジョニング、監視、スケーリングが含まれる。 例えば、インフラストラクチャをコードとして管理し、TerraformやCloudFormationなどのツールを使用して、インフラの自動化を実現する。

  4. デベロッパーツールの提供: 開発者が効率的に作業できるように、各種ツールを提供します。これには、IDEの設定、デバッグツール、コードリポジトリの管理などが含まれる。 例えば、GitHubやGitLabを使用して、ソースコード管理を統一し、コラボレーションを促進する。

  5. セキュリティとコンプライアンスの維持: システム全体のセキュリティを確保し、コンプライアンスに準拠するためのポリシーとプロセスを設定する。 例えば、アクセス制御の設定、脆弱性スキャン、ログ管理などを行う。

3つの総合作用モード

Team Topologiesでは、チーム間の効果的な相互作用を促進するために、3つの主要な相互作用モードを定義している。

1. X-as-a-Serviceモード (XaaS)

このモードでは、一つのチームが他のチームに対してサービスを提供する。 サービスの提供者と利用者の関係が明確で、定義されたインターフェースを通じてサービスが提供される。 例として、プラットフォームチームがCI/CDサービスを他のチームに提供する場合が挙げられる。

2. コラボレーションモード (Collaboration)

コラボレーションモードでは、チーム間での短期間の強い協力関係を築く必要がある。 共通の特定の目標の達成のために、一時的に密接に協力していく。 例えば、新しい機能の共同開発や技術的課題の共同解決をするようなケースがこのモードに該当する。 このモードは、創造的な問題解決や新しいアイデアの実現に適していますが、長期的には依存関係が増える可能性があるため、慎重な管理が必要となる。

3. ファシリテーションモード (Facilitating)

このモードでは、エンジニアリングプラットフォームチームが他のチームのスキル向上や新技術の導入を支援する。 継続的な支援を通じて、他のチームの能力を向上させる。 例えば、新しい開発手法やツールの導入支援が挙げられる。

これらの相互作用モードを適切に利用することで、組織内のチームが効率的に連携し、迅速かつ効果的に価値を提供することができる。

何が大事なのか?

  • 強いリーダーシップ:新しい組織構成への変更を行うには、強いリーダーシップが必要である。そもそもある程度機能していた(効率的かどうかは別として)組織を分解して、新しい構成に移行するのは組織のメンバーには大きな負担になり得る。そのようなリスクを軽減し、管理するために段階的に導入したり、パイロットプロジェクトを選定し、影響範囲が限定的で、結果を測定しやすいプロジェクトを選定する必要もある。
  • フィードバックループの構築:効果の測定とフィードバックループの構築は、継続的な改善を可能にし、トポロジーの効果を最大化するために不可欠である。

Spotifyの例

Spotifyモデルは機能しなかった。

medium.com

agile.quora.com

References

web.devopstopologies.com

www.ryuzee.com

learn.microsoft.com