How DevImpact scoring works
This page explains the deterministic scoring pipeline used by DevImpact. The formulas below describe how repository impact, external pull request impact, and community contribution impact are combined into the final score.
Step 1
Collect public GitHub profile, repositories, pull requests, issues, and discussions.
Step 2
Calculate repository impact using stars, forks, watchers, activity, and rank weighting.
Step 3
Calculate merged external pull request impact with per-repository diminishing returns.
Step 4
Calculate community contribution impact from external issues and discussions.
Step 5
Apply penalties and caps (fork penalty, tiny/huge PR penalties, contribution cap).
Step 6
Combine weighted scores into final impact score (45% repo, 45% PR, 10% contribution).
Step 7
Normalize scores to 0-100 scale for clearer UI comparisons.
1. Collect public GitHub profile, repositories, pull requests, issues, and discussions. 2. Calculate repository impact using stars, forks, watchers, activity, and rank weighting. 3. Calculate merged external pull request impact with per-repository diminishing returns. 4. Calculate community contribution impact from external issues and discussions. 5. Apply penalties and caps (fork penalty, tiny/huge PR penalties, contribution cap). 6. Combine weighted scores into final impact score (45% repo, 45% PR, 10% contribution). 7. Normalize scores to 0-100 scale for clearer UI comparisons.
- Repository Score: public project impact through repository quality and visibility.
- PR Score: merged external pull request impact with anti-spam diminishing returns.
- Contribution Score: external issues/discussions impact only.
- Final Score: weighted combination of repo, PR, and contribution signals.
Raw weighted formula used to calculate overall final score.
- finalScore = repoScore * 0.45 + prScore * 0.45 + contributionScore * 0.10
- Repo Score weight = 45%
- PR Score weight = 45%
- Contribution Score weight = 10%
- Repository ranking weight: top 5 repositories have full weight, remaining repositories are reduced.
- Within each external repository, repeated PRs receive decreasing weight using 1/(index+1).
- Forked repositories are strongly penalized so copied work cannot dominate.
- Inactive repositories receive lower activity factors than recently updated repositories.
- Tiny PRs and extremely large PRs are penalized to reduce gaming and generated changes.
- Contribution score is capped at 30% of (repoScore + prScore).
- normalizeScore(score, k) = 100 * score / (score + k)
- Normalized scores improve readability while raw scores remain available for transparency.
- Signals report what was analyzed and what was ignored, such as own-repo PRs and unmerged PRs.
- Examples include merged external PR count, unique external repositories, and language match coverage.