Issues & PRs
Handling Rejection

Handling Rejection

⚠️

This Will Happen to You

Every successful contributor has had PRs rejected. It's not about avoiding rejection—it's about handling it professionally.

The Rejection Reality

┌─────────────────────────────────────────────────────────────────────────────┐
│                        REJECTION STATISTICS                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Your first 10 PRs:        ~40% will be rejected or need major rework      │
│  Your next 20 PRs:         ~25% rejection rate                             │
│  Experienced contributors: ~10-15% rejection rate                           │
│                                                                             │
│  Even Linus Torvalds gets patches rejected sometimes.                       │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Why PRs Get Rejected

Common Reasons

Out of Scope

Your solution doesn't align with project goals or roadmap.

Quality Issues

Code doesn't meet project standards, lacks tests, or has bugs.

Duplicate Work

Someone else solved it first, or solution already exists.

Timing

Maintainers are busy, undergoing refactor, or feature freeze.


Types of Rejection

1. Soft Close (Most Common)

Maintainer: "Thanks for the PR! Unfortunately, we're not taking this direction 
right now. Appreciate your effort though."
 
What it means:
- Nothing personal
- Just doesn't fit
- Door might open later

How to respond:

✅ Good response:
"Thanks for considering it! I understand. Let me know if there's a different 
approach that would work better for the project."
 
❌ Bad response:
"Why not? This is clearly better than the current implementation."

2. Needs Major Rework

Maintainer: "This needs significant changes: different architecture, 
refactored tests, updated docs. Might be easier to start fresh."
 
What it means:
- Core approach needs changing
- Not worth iterating on current version

How to respond:

✅ Good response:
"Got it. Should I:
1. Close this and open new PR with revised approach?
2. Discuss the architecture first in an issue?
3. Step back and let someone else tackle it?
 
What would be most helpful?"
 
❌ Bad response:
"I already spent 20 hours on this!"

3. Hard No

Maintainer: "We won't add this feature. It goes against our design philosophy."
 
What it means:
- Project direction is different
- Feature won't be accepted (ever)

How to respond:

✅ Good response:
"Understood. Thanks for clarifying the project's direction."
 
[Then move on]
 
❌ Bad response:
"But look at all these stars on my fork!"

4. Radio Silence → Close

[Your PR sits for 2 months]
[Then gets auto-closed by bot or maintainer]
 
What it means:
- Low priority
- Maintainers overwhelmed
- Probably not interested

How to respond:

✅ Good response:
"Closing due to inactivity. Thanks for your time reviewing. 
Open to reopening if there's renewed interest."
 
❌ Bad response:
[Opening new PR with same code without discussion]

The Emotional Response Cycle

ℹ️

Take 24 Hours

If rejection stings, wait 24 hours before responding. Your first reaction is usually emotional, not professional.


Professional Responses to Rejection

Template 1: Gracious Exit

"Thank you for reviewing this and for the feedback. I understand this doesn't 
fit the project's direction right now. 
 
I learned a lot from attempting this, so it was valuable regardless. 
 
Looking forward to contributing in other ways!"

Template 2: Request for Learning

"Thanks for closing this. I understand the decision.
 
To help me improve for future PRs: was the core issue:
- The approach itself?
- Implementation quality?
- Project priorities?
 
No worries if you're too busy to elaborate—I'll study other PRs to learn."

Template 3: Alternative Proposal

"I understand this approach doesn't work. 
 
Would the project be interested in a scaled-down version that:
- Only does X (not X, Y, Z)
- Focuses on the core use case
- Requires less maintenance
 
If not, no problem—happy to look for other issues to tackle."

Template 4: Fork It

"Got it! This feature is important for my use case, so I'll maintain a fork. 
 
If there's ever interest in merging something similar, I'm happy to adapt it."

What NOT to Do

❌ Argue Endlessly

Bad:
"But you NEED this feature because [10 paragraphs]"
"I spent WEEKS on this"
"Your project will fail without this"
"Other projects have this feature"
⚠️

You Can't Force a Merge

Maintainers have final say. Arguing rarely changes outcomes—it only damages relationships.

❌ Get Personal

Bad:
"You obviously don't understand good code"
"This project is badly managed"
"Other maintainers would appreciate this"
"I'm never contributing here again"

❌ Passive Aggressive

Bad:
"Fine, I'll just fork it since you don't want good contributions"
"Guess you don't actually want help"
"Thanks for wasting my time"

❌ Resubmit Without Changes

Bad:
[PR closed]
[Open new PR with exact same code]
[Repeat]

Learning from Rejection

The Post-Mortem Process

Wait 24 Hours

Let emotions settle before analysis.

Review Feedback Objectively

What specifically was the issue? Not the tone, the CONTENT.

Compare to Successful PRs

Look at recently merged PRs. What did they do differently?

Identify Patterns

Is this your first rejection or fifth with similar feedback?

Plan Improvements

What will you do differently next time?

Rejection Analysis Template

## What Happened
PR #123 rejected for [reason]
 
## Their Feedback
- Point 1
- Point 2
- Point 3
 
## My Mistakes
- Should have discussed approach first
- Didn't check roadmap
- Scope too large
 
## What I Learned
- Always open issue for discussion before big changes
- Read CONTRIBUTING guide more carefully
- Start smaller
 
## Next Time
- Smaller, focused PRs
- Get buy-in before coding
- Test the waters with maintainers first

Bouncing Back

Rejection → Success Timeline

The Comeback Checklist

  • Processed rejection emotionally (allowed yourself to feel bad)
  • Analyzed feedback objectively
  • Identified concrete improvements
  • Found simpler next contribution
  • Ready to try again

When Rejection is Unfair

Sometimes maintainers are wrong, rude, or unreasonable.

Signs of Toxic Project

  • Personal attacks in review
  • Dismissive without explanation
  • Moving goalposts repeatedly
  • Favoritism toward certain contributors
  • No response to polite follow-ups

What to Do

⚠️

Know When to Walk Away

If a project consistently treats contributors poorly, your time is better spent elsewhere. There are thousands of projects that will appreciate you.


Famous Rejection Stories

Linus Torvalds

Gets kernel patches rejected regularly. His response? Improve the patch or move on.

Guido van Rossum

Had PEPs (Python Enhancement Proposals) rejected as BDFL. Still contributed.

The Point

Everyone gets rejected. What separates successful contributors is how they respond.


Rejection as a Filter

┌─────────────────────────────────────────────────────────────────────────────┐
│                      REJECTION FILTERS MINDSET                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Bad mindset:  "I got rejected → I'm not good enough"                       │
│                                                                             │
│  Good mindset: "I got rejected → This approach/project wasn't right"        │
│                                                                             │
│  Better:       "I got rejected → Here's what I'll do differently"           │
│                                                                             │
│  Best:         "I got rejected → Great feedback for improvement"            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

The Growth Metric

Track your rejection-to-merge ratio over time:

PeriodPRs SubmittedMergedRejectedMerge Rate
Month 152340%
Month 3106460%
Month 61512380%
Year 15043786%

Goal: Increasing merge rate over time, not zero rejections.


Quick Reference: Response Guide

┌─────────────────────────────────────────────────────────────────────────────┐
│                     REJECTION → RESPONSE MAP                                │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Rejection Type         How to Respond                                      │
│  ═══════════════        ═══════════════                                     │
│                                                                             │
│  Out of scope          → Thank them, ask about alternatives                 │
│  Needs rework          → Ask for guidance, offer to revise                  │
│  Hard no               → Thank them, move on gracefully                     │
│  Radio silence         → Wait 2 weeks, then close yourself                  │
│  Rude rejection        → Stay professional, consider leaving                │
│  Duplicate work        → Congratulate other contributor                     │
│  Timing issues         → Ask if you should revisit later                    │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Next Steps