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