Skip to content

Instantly share code, notes, and snippets.

@KengoTODA
Created May 12, 2020 08:04
Show Gist options
  • Select an option

  • Save KengoTODA/48cee982241f5089404649e24bbcc3a0 to your computer and use it in GitHub Desktop.

Select an option

Save KengoTODA/48cee982241f5089404649e24bbcc3a0 to your computer and use it in GitHub Desktop.
team and tech-practice
digraph "team and tech-practice" {
compound=true;
# Tech Practice (The Four Key Metrics)
"Deployment Frequency" [shape=diamond]
"Short Lead Time for Changes" [shape=diamond]
"Short Time to Restore Service" [shape=diamond]
"Low Change Failure Rate" [shape=diamond]
# Tech Practice
"デプロイブランチをデプロイ可能に保つ" [shape=box]
"小さい変更をこまめにデプロイブランチに入れる\n(デプロイブランチ以外のブランチを短命に保つ)" [shape=box]
"ビルドやテスト、デプロイなどを継続的に統合し実行する(CI)" [shape=box]
"デプロイとリリースの分離" [shape=box]
"開発環境と本番環境の差を最小化" [shape=box]
"高速な修正のデリバリ" [shape=box]
"Iterativeな開発プロセス" [shape=box]
"自信を持って変えられるコードベース" [shape=box]
"本番環境の安定化" [shape=box]
# tech solution
"こまめなピアレビュー" [shape=octagon]
"Pull Request (PR)" [shape=octagon]
"分散ビルド・分散テスト" [shape=octagon]
"単体テスト自動化" [shape=octagon]
"統合テスト自動化" [shape=octagon]
"API ドキュメント" [shape=octagon]
"品質指標の可視化" [shape=octagon]
"Feature Toggle" [shape=octagon]
"機械的な解析による潜在バグの発見" [shape=octagon]
"リファクタリング" [shape=octagon]
"Test-Driven Development (TDD)" [shape=octagon]
"Consumer-Driven Contract Test" [shape=octagon]
"実装とテストを同一リポジトリで管理" [shape=octagon]
"実装とドキュメントを同一リポジトリで管理" [shape=octagon] # あるいはコードからの自動生成
"Blue/Green Deployment" [shape=octagon]
subgraph cluster_testInProd {
color = black;
label = "本番環境におけるテスト";
"A/B Testing" [shape=octagon]
"Canary Release" [shape=octagon]
"Chaos Engineering" [shape=octagon]
}
"データマイグレーション自動化" [shape=octagon]
"永続層の前方互換性" [shape=octagon]
"永続層の後方互換性" [shape=octagon]
"非同期データマイグレーション" [shape=octagon]
"旧バージョンへの切り戻し" [shape=octagon]
"インフラストラクチャの自動化(IaC)" [shape=octagon]
"コンテナや仮想マシン" [shape=octagon]
"インタフェース定義(GraphQL, gRPG, OpenAPI, etc.)" [shape=octagon]
"GitOps" [shape=octagon]
"ChatOps" [shape=octagon]
"Immutable Infrastructure" [shape=octagon]
"デプロイの自動化" [shape=octagon]
"Circuit Breaker" [shape=octagon]
# バージョンコントロール は当然やるものとして除外
# 境界づけられたコンテキスト?
# team solution
"cross-functional team"
"心理的安全性"
"継続的な内省の機会"
"Blameless postmortem"
"保守しやすい単位でのチーム分割"
"開発効率(Velocity)の把握"
"Self-Organized Team"
"チームメイトの継続的な成長"
"Unlearningを伴う高速な学習サイクル"
subgraph cluster_example {
color = black;
label = "凡例";
"Technical Practice" [shape=box]
"Technical Solution" [shape=octagon]
"Team Solution"
"Key Metrics" [shape=diamond]
}
# relation
"単体テスト自動化" -> "Pull Request (PR)" [label="supports"]
# 間接的に依存しているので明示的な依存を除く
# "統合テスト自動化" -> "Pull Request (PR)" [label="supports"]
# "ビルドやテスト、デプロイなどを継続的に統合し実行する(CI)" -> "自信を持って変えられるコードベース" [label="supports"]
"統合テスト自動化" -> "リファクタリング" [label="supports"]
"統合テスト自動化" -> "Consumer-Driven Contract Test" -> "保守しやすい単位でのチーム分割" [label="supports"]
"単体テスト自動化" -> "Test-Driven Development (TDD)" [label="supports"]
"リファクタリング" -> "Test-Driven Development (TDD)" [label="supports"]
"Pull Request (PR)" -> "Test-Driven Development (TDD)" [label="supports"]
"実装とテストを同一リポジトリで管理" -> "Consumer-Driven Contract Test" [label="supports"]
"実装とテストを同一リポジトリで管理" -> "Pull Request (PR)" [label="supports"]
"実装とドキュメントを同一リポジトリで管理" -> "API ドキュメント" [label="supports"]
"Iterativeな開発プロセス" -> "開発効率(Velocity)の把握" [label="supports"]
"cross-functional team" -> "こまめなピアレビュー" [label="supports"]
"Pull Request (PR)" -> "こまめなピアレビュー" [label="supports"]
"心理的安全性" -> "こまめなピアレビュー" [label="supports"]
"品質指標の可視化" -> "こまめなピアレビュー" [label="supports"]
"こまめなピアレビュー" -> "小さい変更をこまめにデプロイブランチに入れる\n(デプロイブランチ以外のブランチを短命に保つ)" [label="supports"]
"機械的な解析による潜在バグの発見" -> "Pull Request (PR)" [label="supports"]
"分散ビルド・分散テスト" -> "Pull Request (PR)" [label="supports"]
"Feature Toggle" -> "デプロイとリリースの分離" -> "デプロイブランチをデプロイ可能に保つ" [label="supports"]
"ビルドやテスト、デプロイなどを継続的に統合し実行する(CI)" -> "デプロイブランチをデプロイ可能に保つ" [label="supports"]
"こまめなピアレビュー" -> "デプロイブランチをデプロイ可能に保つ" [label="supports"]
"Pull Request (PR)" -> "ビルドやテスト、デプロイなどを継続的に統合し実行する(CI)" -> "小さい変更をこまめにデプロイブランチに入れる\n(デプロイブランチ以外のブランチを短命に保つ)" [label="supports"]
"心理的安全性" -> "継続的な内省の機会" [label="supports"]
"Blameless postmortem" -> "継続的な内省の機会" [label="supports"]
"心理的安全性" -> "Blameless postmortem" [label="supports"]
"Iterativeな開発プロセス" -> "継続的な内省の機会" [label="supports"]
"API ドキュメント" -> "保守しやすい単位でのチーム分割" [label="supports"]
"Circuit Breaker" -> "保守しやすい単位でのチーム分割" [label="supports"]
"保守しやすい単位でのチーム分割" -> "Self-Organized Team" [label="supports"]
"インタフェース定義(GraphQL, gRPG, OpenAPI, etc.)" -> "Circuit Breaker" [label="supports"]
"インタフェース定義(GraphQL, gRPG, OpenAPI, etc.)" -> "保守しやすい単位でのチーム分割" [label="supports"]
"インタフェース定義(GraphQL, gRPG, OpenAPI, etc.)" -> "API ドキュメント" [label="supports"]
"旧バージョンへの切り戻し" -> "A/B Testing" [label="supports", lhead=cluster_testInProd]
"Feature Toggle" -> "旧バージョンへの切り戻し" [label="supports"]
"永続層の前方互換性" -> "旧バージョンへの切り戻し" [label="supports"]
"旧バージョンへの切り戻し" -> "本番環境の安定化" [label="supports"]
"高速な修正のデリバリ" -> "本番環境の安定化" [label="supports"]
"旧バージョンへの切り戻し" -> "Blameless postmortem" [label="supports"]
"コンテナや仮想マシン" -> "開発環境と本番環境の差を最小化" [label="supports"]
"インフラストラクチャの自動化(IaC)" -> "Immutable Infrastructure" [label="supports"]
"インフラストラクチャの自動化(IaC)" -> "デプロイの自動化" [label="supports"]
"コンテナや仮想マシン" -> "Immutable Infrastructure" [label="supports"]
"Immutable Infrastructure" -> "開発環境と本番環境の差を最小化" [label="supports"]
"Immutable Infrastructure" -> "高速な修正のデリバリ" [label="supports"]
"デプロイの自動化" -> "高速な修正のデリバリ" [label="supports"]
"永続層の後方互換性" -> "非同期データマイグレーション" [label="supports"]
"デプロイの自動化" -> "非同期データマイグレーション" [label="supports"]
"ChatOps" -> "デプロイの自動化" [label="supports"]
"GitOps" -> "デプロイの自動化" [label="supports"]
"統合テスト自動化" -> "自信を持って変えられるコードベース" [label="supports"]
"開発環境と本番環境の差を最小化" -> "自信を持って変えられるコードベース" [label="supports"]
"自信を持って変えられるコードベース" -> "小さい変更をこまめにデプロイブランチに入れる\n(デプロイブランチ以外のブランチを短命に保つ)" [label="supports"]
"継続的な内省の機会" -> "チームメイトの継続的な成長" [label="supports"]
"継続的な内省の機会" -> "Self-Organized Team" [label="supports"]
"開発効率(Velocity)の把握" -> "Self-Organized Team" [label="supports"]
"Immutable Infrastructure" -> "Blue/Green Deployment" [label="supports"]
"Blue/Green Deployment" -> "本番環境の安定化" [label="supports"]
"リファクタリング" -> "自信を持って変えられるコードベース" [label="supports"]
"非同期データマイグレーション" -> "本番環境の安定化" [label="supports"]
"本番環境の安定化" -> "Canary Release" [label="supports", lhead=cluster_testInProd]
"本番環境の安定化" -> "自信を持って変えられるコードベース" [label="supports"]
"データマイグレーション自動化" -> "非同期データマイグレーション" [label="supports"]
"データマイグレーション自動化" -> "永続層の前方互換性" [label="supports"]
"データマイグレーション自動化" -> "永続層の後方互換性" [label="supports"]
"Canary Release" -> "Unlearningを伴う高速な学習サイクル" [label="supports", ltail=cluster_testInProd]
"Unlearningを伴う高速な学習サイクル" -> "チームメイトの継続的な成長" [label="supports"]
# Observable Via...
"デプロイブランチをデプロイ可能に保つ" -> "Deployment Frequency" [label="observable via"]
"Unlearningを伴う高速な学習サイクル" -> "Short Lead Time for Changes" [label="observable via"]
"小さい変更をこまめにデプロイブランチに入れる\n(デプロイブランチ以外のブランチを短命に保つ)" -> "Low Change Failure Rate" [label="observable via"]
"本番環境の安定化" -> "Short Time to Restore Service" [label="observable via"]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment