Before You Start
How Contributions Are Evaluated

How Contributions Are Evaluated

ℹ️

The Maintainer's Perspective

Understanding how maintainers evaluate contributions helps you craft PRs that get mergedβ€”not ignored.

The Evaluation Framework

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     CONTRIBUTION EVALUATION MATRIX                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                             β”‚
β”‚                              RELEVANCE                                      β”‚
β”‚                    Does this belong in the project?                         β”‚
β”‚                                                                             β”‚
β”‚                                 β–²                                           β”‚
β”‚                                 β”‚                                           β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚              β”‚                  β”‚                  β”‚                       β”‚
β”‚              β”‚    REJECTED      β”‚     IDEAL        β”‚                       β”‚
β”‚   QUALITY ◄──┼──────────────────┼──────────────────┼──► HIGH               β”‚
β”‚              β”‚                  β”‚                  β”‚                       β”‚
β”‚              β”‚    IGNORED       β”‚   MAYBE LATER    β”‚                       β”‚
β”‚              β”‚                  β”‚                  β”‚                       β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                                 β”‚                                           β”‚
β”‚                                 β–Ό                                           β”‚
β”‚                               LOW                                           β”‚
β”‚                                                                             β”‚
β”‚   Additional factors: MAINTENANCE BURDEN + CONTRIBUTOR TRUST               β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dimension 1: Relevance

Questions Maintainers Ask

  • Is there an issue tracking this?
  • Does this align with project roadmap?
  • Is this something users actually need?
  • Does this fit the project's scope?

Instant Rejection Triggers

❌ Unsolicited feature additions

❌ Scope creep / kitchen sink PRs

❌ Features maintainers rejected before

❌ Duplicates of existing PRs/issues

How to Score High

βœ… Link to an existing issue

βœ… Pick up "help wanted" issues

βœ… Discuss approach before coding

βœ… Keep PRs focused and small


Dimension 2: Quality

Quality Checklist

  • Tests pass locally and in CI
  • New code is tested
  • Follows existing code style
  • Clear, descriptive commit messages
  • PR description explains the "why"
  • No unrelated changes included
  • Documentation updated if needed

The Ideal PR Description

## Summary
[One paragraph: WHAT this PR does]
 
## Motivation
[One paragraph: WHY this change is needed]
Fixes #123
 
## Changes
- [Bullet point 1]
- [Bullet point 2]
- [Bullet point 3]
 
## Testing
- [How you tested this]
- [Steps to verify]
 
## Screenshots (if UI changes)
[Before/after screenshots]

Dimension 3: Maintenance Burden

⚠️

The Hidden Factor

This is what most new contributors don't consider. Maintainers think long-term: "Will this cause problems for the next 5 years?"

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    MAINTENANCE BURDEN SCALE                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  LOW BURDEN (Welcome!)                                          β”‚
β”‚  ══════════════════════                                         β”‚
β”‚  βœ“ Bug fixes                                                    β”‚
β”‚  βœ“ Documentation improvements                                   β”‚
β”‚  βœ“ Test additions                                               β”‚
β”‚  βœ“ Performance improvements (no API changes)                    β”‚
β”‚  βœ“ Small refactors                                              β”‚
β”‚                                                                 β”‚
β”‚  MEDIUM BURDEN (Discuss First)                                  β”‚
β”‚  ══════════════════════════════                                 β”‚
β”‚  β—‹ New configuration options                                    β”‚
β”‚  β—‹ Small features                                               β”‚
β”‚  β—‹ Dependency updates                                           β”‚
β”‚  β—‹ Larger refactors                                             β”‚
β”‚                                                                 β”‚
β”‚  HIGH BURDEN (Rarely Accepted)                                  β”‚
β”‚  ══════════════════════════════                                 β”‚
β”‚  βœ— New dependencies                                             β”‚
β”‚  βœ— Breaking changes                                             β”‚
β”‚  βœ— New public APIs                                              β”‚
β”‚  βœ— Major new features                                           β”‚
β”‚  βœ— Architecture changes                                         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
πŸ’‘

The Boring Solution Wins

When in doubt, choose the boring solution. Maintainers will thank you.


Dimension 4: Contributor Trust

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    TRUST SIGNALS                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HIGH TRUST                      LOW TRUST                      β”‚
β”‚  ──────────                      ─────────                      β”‚
β”‚                                                                 β”‚
β”‚  Previous merged PRs             Brand new account              β”‚
β”‚  Quick response to reviews       Slow or no responses           β”‚
β”‚  Follows contribution guidelines Ignores guidelines             β”‚
β”‚  Polite, professional           Demanding or rude               β”‚
β”‚  Accepts feedback gracefully    Argues every point              β”‚
β”‚  Complete, thorough PR          Sloppy, incomplete work         β”‚
β”‚  Engaged in discussions         Only submits PRs                β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Start Small

Your first contributions should be small and obviously correct. Build credibility.

Be Responsive

When maintainers review your PR, respond within 24-48 hours. Every time.

Accept Feedback

Even if you disagree, thank them for the review. Discuss respectfully.

Be Consistent

One-time contributors are forgettable. Regular contributors build relationships.


The Review Process Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          PR REVIEW PIPELINE                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                             β”‚
β”‚   [PR Submitted]                                                            β”‚
β”‚         β”‚                                                                   β”‚
β”‚         β–Ό                                                                   β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                       β”‚
β”‚   β”‚ Automated Checks β”‚ ──── FAIL ────► [Fix and re-push]                   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                       β”‚
β”‚            β”‚ PASS                                                           β”‚
β”‚            β–Ό                                                                β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                       β”‚
β”‚   β”‚ Quick Screening  β”‚ ──── REJECT ──► [Closed with explanation]           β”‚
β”‚   β”‚ (Is it relevant?)β”‚                                                      β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                       β”‚
β”‚            β”‚ PASS                                                           β”‚
β”‚            β–Ό                                                                β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                       β”‚
β”‚   β”‚ Enters Queue     β”‚                                                       β”‚
β”‚   β”‚ (Days to weeks)  β”‚                                                       β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                       β”‚
β”‚            β–Ό                                                                β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                       β”‚
β”‚   β”‚ Deep Review      β”‚ ──── Changes Requested ──► [You respond]            β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β–²                        β”‚
β”‚            β”‚                                       β”‚                        β”‚
β”‚            β”‚ APPROVED                              β”‚                        β”‚
β”‚            β–Ό                                       β”‚                        β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚                        β”‚
β”‚   β”‚ Secondary Review β”‚ β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β”‚
β”‚   β”‚ (Maybe)          β”‚                                                       β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                       β”‚
β”‚            β”‚                                                                β”‚
β”‚            β–Ό                                                                β”‚
β”‚   [MERGED! πŸŽ‰]                                                              β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Common Rejection Reasons

No Issue Linked

"Please open an issue first to discuss this change."

Scope Too Large

"This PR does too many things. Please break it into smaller PRs."

Doesn't Fit Roadmap

"We don't plan to add this feature. See issue #X for context."

CI Failing

"Please fix the failing tests before we review."

Missing Tests

"Please add tests for this new functionality."

Stale / Abandoned

"Closing due to inactivity. Feel free to reopen if you're still working on this."


The Ideal Contribution

✨ Gold Standard Contribution

  • Fixes an existing issue (linked in PR)
  • Discussed approach in issue before coding
  • Small, focused PR (under 200 lines)
  • Tests included and passing
  • Follows all contribution guidelines
  • Clear PR description with context
  • Clean commit history
  • Documentation updated
  • Responds to reviews within 48 hours
  • Accepts feedback gracefully