バス係数
チームの何人が離脱したらプロジェクトが停止するかを示す指標
チーム運用
バス係数とは
バス係数 (Bus Factor) は、「チームの何人がバスに轢かれたら (= 突然離脱したら) プロジェクトが停止するか」を示す指標である。バス係数が 1 なら、1 人の離脱でプロジェクトが止まる危険な状態だ。
バス係数の目安
| バス係数 | リスク | 状態 |
|---|---|---|
| 1 | 致命的 | 1 人に知識が集中 (属人化) |
| 2 | 高い | 最低限のバックアップ |
| 3+ | 中程度 | 知識が分散されている |
| チーム全体 | 低い | 全員が全体を理解 |
属人化の兆候
「○○さんに聞かないと分からない」(特定の人だけがデプロイ手順を知っている)、コードレビューが 1 人に集中 (特定のモジュールは 1 人しかレビューできない)、ドキュメントがない (手順が個人の頭の中にしかない)、休暇中に問題が解決できない (担当者不在で障害対応が遅延) といった兆候がある。
バス係数を上げる方法
ペアプログラミング / モブプログラミング
❌ 1 人が実装 → 1 人だけが理解
✅ 2 人で実装 → 2 人が理解 (バス係数 +1)
✅ チームで実装 → 全員が理解
コードレビュー
PR レビューで知識を共有する。レビュアーをローテーションし、特定の人に偏らないようにする。
ドキュメント化
アーキテクチャは ADR (Architecture Decision Records)、デプロイ手順は README や runbook、障害対応はインシデント対応手順書、ビジネスロジックは設計ドキュメントで記録する。
コードの可読性
書いた本人しか理解できないコードは、その人が離脱した瞬間にメンテナンス不能になる。変数名や関数名を明確にし、トリッキーなワンライナーを避けるだけで、チーム全員がコードを読める状態を維持できる。
Git で属人化を検出
# ファイルごとのコミット者数を確認
git log --format='%an' -- src/critical-module.ts | sort -u | wc -l
# 1 → バス係数 1 (危険)
# 特定ディレクトリの貢献者
git shortlog -sn -- src/payments/
# 45 Alice ← Alice に集中
# 2 Bob
AWS での属人化リスク
1 人だけが IAM を管理している場合は複数人に管理権限を付与する。デプロイ手順が口伝なら CI/CD で自動化する。インフラが手動構築なら IaC (SAM/CloudFormation) で管理する。
バス係数の理解を深めるには関連書籍が参考になる。