bus-factor
Skill1 starsChanged 6 months agoMITView on GitHub
Identify single points of failure and coverage gaps across team codebases using realistic time windows (3+ months). Distinguishes healthy concentration from true risk. Calculates meaningful contributor threshold and provides actionable recommendations for building backup coverage.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- dataGriff/skillstheir own version, first seen Nov 1, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- dataGriff/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository30 other files it gives its agents.
- setupSkill
- enrich-prsSkill
- epic-cleanupSkill
- epic-overviewSkill
- oncall-reviewSkill
- sprint-managementSkill
- sprint-statusSkill
- team-activitySkill
- team-data-syncSkill
- direct-report-prepSkill
- interview-analysisSkill
- interview-prepSkill
- peer-prepSkill
- project-statusSkill
- team-analysisSkill
- today-prioritiesSkill
- weekly-snippetSkill
- contribution-velocitySkill
- nine-boxSkill
- project-people-mapSkill
- review-cardsSkill
- review-cyclesSkill
- review-networkSkill
- team-health-reportSkill
- task-rolloverSkill
- context-checkSkill
- prep-my-daySkill
- initiative-breakdownSkill
- product-briefSkill
- technical-deep-diveSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 9 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 54
When calculating "primary contributor" or engagement intensity:
- Distinctive: line 73
Default to 3 months if user doesn't specify
- Distinctive: line 74
If user says "last month" or "this month", confirm: "Bus factor analysis needs at least a quarter of data for accuracy.
- Distinctive: line 75
NEVER silently analyze 1 month and present it as definitive
- Distinctive: line 226
If running analysis on multiple periods for comparison:
- Distinctive: line 248
Always include these disclaimers in your analysis:
- Distinctive: line 258
"PTO/leave affects windows.": If someone took 3 weeks off during the analysis period, their metrics will look lower.
- Distinctive: line 279
Run as part of team-health-report for quarterly review
- Distinctive: line 280
Use data fetched by team-data-sync (no separate fetch needed)
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Bus Factor Analysis
Identify single points of failure and coverage gaps across your team's codebases. Focuses on realistic risk assessment using meaningful time windows (not single-month snapshots).
When to Trigger
- "bus factor", "bus test", "single point of failure"
- "coverage gaps", "who knows what", "backup coverage"
- "risk assessment", "knowledge silos"
- As part of quarterly team health review
Critical Methodology Rules
Time Window (MOST IMPORTANT)
Minimum analysis period: 3 months (1 quarter)
Why:
- Single months are skewed by PTO, sprint focus, incident response
- People naturally concentrate on specific projects for 2-4 week sprints
- One month makes healthy concentration look like dangerous silos
- Quarterly view shows realistic backup patterns
When to use different windows:
- Standard analysis: 3 months (1 quarter)
- Annual review: 6-12 months for long-term patterns
- Emergency assessment: 1 month ONLY if explicitly requested AND with heavy disclaimers about data quality
NEVER present single-month data as authoritative without explicit user request.
Meaningful Engagement Threshold
A person counts as a "meaningful contributor" if they meet EITHER:
- Authored 2+ PRs in the period, OR
- Gave 5+ reviews in the period
Rationale:
- Pure reviewers provide backup knowledge but can't ship fixes alone
- 1 PR could be a one-off drive-by, 2+ shows familiarity
- 5 reviews = engaged with the codebase enough to understand it
Weighted Activity Scoring
When calculating "primary contributor" or engagement intensity:
- PRs authored: 3x weight (shipping code = deeper knowledge)
- Reviews given: 1x weight (reviewing = understanding, but not hands-on)
- Issues touched: 1x weight (triage/planning engagement)
Data Sources
Required:
data/YYYY-MM/{login}-prs.json— authored PRs per member per monthdata/YYYY-MM/{login}-reviews.json— reviews given per member per monthdata/team.json— team roster
Optional:
data/YYYY-MM/{login}-issues.json— issue activity (adds context but not critical)
Process
Step 1: Validate Time Window
- Default to 3 months if user doesn't specify
- If user says "last month" or "this month", confirm: "Bus factor analysis needs at least a quarter of data for accuracy. Should I analyze the last 3 months instead?"
- NEVER silently analyze 1 month and present it as definitive
Step 2: Load Activity Data
For each team member across the time period:
For each repo:
PRs_authored = count of PRs in that repo
Reviews_given = count of reviews in that repo
Engagement_score = (PRs_authored * 3) + (Reviews_given * 1)
Is_meaningful_contributor = (PRs_authored >= 2) OR (Reviews_given >= 5)Step 3: Calculate Bus Factor Per Repo
Bus_factor = count of team members where Is_meaningful_contributor = true
Risk_level:
🔴 Bus factor 0-1: Single point of failure (or abandoned repo)
🟡 Bus factor 2: Fragile (one person out = risk)
🟢 Bus factor 3+: Healthy coverageStep 4: Identify Concentration vs Single Point of Failure
Key distinction:
- Concentration = One person does most work BUT others can back them up
- Single Point of Failure = One person does work AND nobody else touched it
Calculate for each repo:
- Primary contributor = person with highest engagement score
- Primary's share = their score / total team score for that repo
- Backup count = number of other meaningful contributors
Risk assessment:
- Primary share > 70% AND backup count = 0 → 🔴 True single point of failure
- Primary share > 70% AND backup count >= 1 → 🟡 Heavy concentration but covered
- Primary share 40-70% → 🟢 Good distributed ownership
- Primary share < 40% → 🟢 Very distributed (or no clear owner)
Step 5: Team Member Breadth Analysis
For each person:
- Repo count = number of repos where they're a meaningful contributor
- Primary repos = repos where they have >50% of activity
- Breadth score = repo count / team average
Signals:
- Breadth < 0.5 team average AND primary share > 80% in top repo → 🔴 Siloed specialist
- Breadth < team average → 🟡 Focused contributor
- Breadth >= team average → 🟢 Cross-functional
- Breadth > 1.5x team average → 🟢 Polyglot/reviewer
Output Format
# Bus Factor Analysis: {period}
**Analysis Period:** {start_date} to {end_date} ({N} months)
**Team Size:** {N} members
**Active Repos:** {N} repositories with activity
---
## Executive Summary
| Risk Level | Count | Repos |
|------------|-------|-------|
| 🔴 Single Point of Failure (0-1) | {N} | {list} |
| 🟡 Fragile Coverage (2) | {N} | {list} |
| 🟢 Healthy Coverage (3+) | {N} | {list} |
**Overall Health:** {Green/Yellow/Red} — {brief assessment}
---
## Coverage by Repository
| Repository | Bus Factor | Primary | Primary % | Backups | Risk |
|------------|-----------|---------|-----------|---------|------|
| auth-service | 4 | alice | 45% | bob, carol, dave | 🟢 Healthy |
| data-pipeline | 1 | dave | 94% | — | 🔴 No backup |
| api-gateway | 3 | bob | 52% | alice, carol | 🟢 Covered |
---
## 🔴 Critical Risks (if any)
### {repo-name}
- **Bus factor:** 1
- **Primary:** @username (94% of activity)
- **Backup coverage:** None
- **Activity:** 12 PRs, 3 reviews (all from primary)
- **Risk:** If @username is unavailable, no one else can maintain this service
- **Recommendation:** {specific action}
---
## 🟡 Areas of Concentration (if any)
### {repo-name}
- **Bus factor:** 2-3
- **Primary:** @username (68% of activity)
- **Backups:** @user2 (4 PRs), @user3 (8 reviews)
- **Assessment:** Heavy concentration but adequate backup exists
- **Recommendation:** {if needed, or "Monitor" if acceptable}
---
## Team Breadth Analysis
| Member | Repos Touched | Primary Repos | Breadth | Signal |
|--------|---------------|---------------|---------|--------|
| alice | 6 | 1 (auth) | 1.2x | 🟢 Distributed |
| bob | 5 | 2 (api, infra) | 1.0x | 🟢 Balanced |
| dave | 2 | 1 (pipeline) | 0.4x | 🔴 Siloed |
**Team Average Breadth:** {N} repos per person
---
## Recommendations
### Immediate Actions (if any 🔴 risks exist)
1. {Specific action for specific repo/person}
2. {Cross-training recommendation}
### Medium-Term Health (for 🟡 areas)
1. {Spread review load}
2. {Pair programming opportunities}
### Positive Patterns to Maintain
- {Callout good coverage examples}
- {Recognize cross-functional contributors}
---
## Methodology Notes
- **Analysis period:** {N} months (quarterly view for realistic patterns)
- **Meaningful contributor threshold:** 2+ PRs authored OR 5+ reviews given
- **Engagement weighting:** PRs (3x), Reviews (1x)
- **Risk levels:** Bus factor 0-1 (🔴), 2 (🟡), 3+ (🟢)Comparison Formats (when analyzing trends)
If running analysis on multiple periods for comparison:
## Trend Analysis: {period1} vs {period2}
### Risk Changes
| Repo | Previous | Current | Change |
|------|----------|---------|--------|
| data-pipeline | 🔴 1 | 🟡 2 | ✅ carol added backup |
| deploy-infra | 🟡 2 | 🔴 1 | ⚠️ alice stopped contributing |
### Team Breadth Evolution
| Member | Previous | Current | Change |
|--------|----------|---------|--------|
| dave | 2 repos | 4 repos | ✅ Expanded scope |
| alice | 7 repos | 4 repos | ℹ️ Focused (may be intentional) |Important Caveats to Include
Always include these disclaimers in your analysis:
- "Bus factor measures contribution activity, not knowledge." Someone who reviewed 5 PRs may understand the code but can't ship fixes without repo access or ramp-up time.
- "Concentration isn't always bad." Having a clear owner who knows a system deeply is valuable IF they have backup.
- "Low activity ≠ abandoned." Stable, mature services naturally have less activity. Distinguish between "no one touched it because it's stable" vs "no one CAN touch it except Dave."
- "New team members skew the data." Someone who joined 2 months ago will naturally have narrow scope. Note tenure when flagging "siloed" individuals.
- "PTO/leave affects windows." If someone took 3 weeks off during the analysis period, their metrics will look lower. Adjust interpretation accordingly.
Example Triggers & Responses
User: "Run a bus factor analysis" → Analyze last 3 months, full format
User: "Bus factor for May" → Respond: "Bus factor needs at least a quarter of data for accuracy. Should I analyze Mar-May (3 months) instead?"
User: "Who can work on {repo-name}?" → Show contributors for that specific repo with activity breakdown
User: "Is dave siloed?" → Show dave's breadth analysis across repos with context
User: "Quick bus check" → Show just the executive summary table with risk counts
Integration with Other Skills
- Run as part of team-health-report for quarterly review
- Use data fetched by team-data-sync (no separate fetch needed)
- Complements review-network (who reviews whom) and nine-box (performance assessment)
- Informs review-cards by highlighting areas where people should expand
Key Takeaway
The goal is realistic risk assessment, not shaming people for focus areas.
Frame findings as:
- "Where do we need to build backup coverage?"
- "Who should we pair up for knowledge transfer?"
- "Which stable systems are actually fine with one expert?"
Not:
- "Dave is a silo" (accusatory)
- "This repo is abandoned" (without checking if it's just stable)
- "Everyone should touch everything" (unrealistic)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

