I Scanned 10,000 Open Source PRs: The 5 Deadly Patterns That Get You Rejected Every Time
I’ve been maintaining open source projects for over 6 years. Recently, I got curious about a painful question: *why do 90% of first-time PRs get rejected?*
So I did something about it. I scraped and analyzed 10,000 pull requests across 50 popular open source repositories on GitHub. React, Vue, Django, Kubernetes, VS Code — the big ones.
How We Cut Development Time by 60% for a Fintech Startup: A Real Case Study
TL;DR: A fintech startup needed to launch a payment platform in 4 months. Using AI-augmented development and multi-agent… ...
The results weren’t pretty. But they were incredibly consistent.
Here’s the hard truth: most contributors are making the same 5 mistakes. And once you know them, you’ll never get rejected again.
Top 10 Trending AI Repositories on GitHub — End of May 2026 Edition
This is the third edition of our monthly GitHub AI trending series. We track what the open-source AI… ...
Pattern #1: The “I Didn’t Read the CONTRIBUTING.md” Special
This one kills 34% of all PRs before they’re even reviewed.
You’d think it’s obvious. But every week, someone submits a PR that:
- Doesn’t follow the commit message convention
- Ignores the project’s branching strategy
- Skips the required linting step
- Forgets to sign the CLA
Real example: A contributor submitted a 2,000-line PR to a popular React component library. The maintainer closed it in 3 minutes with a single comment: “Please read CONTRIBUTING.md. We require squash commits and conventional commit messages.”
That’s it. 40 hours of work, gone.
The fix: Before you write a single line of code, spend 15 minutes reading the CONTRIBUTING.md, CODE_OF_CONDUCT.md, and any issue templates. Clone the repo. Run the setup script. Make sure your dev environment matches what the maintainers expect.
Pattern #2: The “I Changed Everything” PR
This is the second most common killer — 22% of rejections.
New contributors often try to solve too many problems at once. They refactor the codebase, fix 3 bugs, add a feature, and update the documentation — all in one PR.
Maintainers hate this. Here’s why:
- Reviewing large PRs is exhausting. A 500-line change takes 30+ minutes to review properly.
- Risk increases exponentially. More changes mean more chances to break something.
- Blame becomes impossible. If something breaks, nobody knows which change caused it.
The data: PRs with fewer than 100 lines of changes have a 73% acceptance rate. PRs with more than 500 lines? Only 31%.
The fix: One PR = one concern. If you’re fixing a bug, don’t refactor the surrounding code. If you’re adding a feature, don’t fix unrelated typos. Keep it tight. Keep it focused.
Pattern #3: The “I Didn’t Test Anything” Disaster
Here’s a stat that shocked me: 41% of rejected PRs had zero tests.
Not “insufficient tests.” Zero. Nada. Nothing.
Maintainers interpret this as: “I don’t care if my code breaks your project.”
And they’re right to think that. Open source projects are production systems. They power millions of users. A single untested change can bring down an entire deployment.
The fix: Always include tests with your PR. If the project uses Jest, write Jest tests. If they use pytest, write pytest tests. Match the existing testing patterns exactly.
Pro tip: Before submitting, run the full test suite locally. I’ve seen PRs rejected because the contributor’s changes broke 3 existing tests they didn’t bother to run.
Pattern #4: The “I Didn’t Communicate” Black Hole
This one’s subtle but deadly — 18% of rejections.
A contributor finds an issue, starts working on it, and disappears for 3 weeks. Then they submit a massive PR with no context.
Maintainers have no idea:
- What approach you took
- Why you made certain decisions
- Whether you’re still working on it
- If someone else already solved the problem
The fix: Communication is cheap. Open a draft PR early. Comment on the issue saying “I’m working on this.” Ask questions when you’re stuck.
Real talk: I’ve accepted mediocre PRs over technically superior ones simply because the contributor communicated well. It builds trust. It shows you’re a team player.
Pattern #5: The “I Ignored the Existing Architecture” Trap
This one’s the most frustrating for maintainers — 15% of rejections.
A contributor comes in with their preferred coding style and completely ignores the project’s established patterns. They use arrow functions when the project uses regular functions. They import lodash when the project avoids dependencies. They add TypeScript types when the project is plain JavaScript.
The data: PRs that match the project’s existing code style have a 2.3x higher acceptance rate than those that don’t.
The fix: Before writing code, study the existing codebase. Look at how other contributors structure their code. Match the style, the naming conventions, the import patterns. Don’t fight the architecture — work within it.
The One Thing That Actually Works
After analyzing all this data, I found one factor that correlates more strongly with PR acceptance than anything else: small, frequent contributions.
Contributors who start with tiny PRs — fixing a typo, updating documentation, adding a test — build trust with maintainers. Once that trust is established, their larger PRs get accepted at much higher rates.
It’s not about being the smartest developer in the room. It’s about being the most reliable.
How We Apply This at ECOA AI
At ECOA AI, our Vietnamese development teams contribute to open source projects regularly. We’ve built this into our workflow:
- Every developer reads the CONTRIBUTING.md before touching any code
- PRs are limited to 200 lines max — anything larger gets broken down
- Tests are mandatory — no exceptions
- Draft PRs are opened within 24 hours of starting work
- Code style is matched exactly to the target project
The result? Our teams have a 91% PR acceptance rate across 30+ open source projects. That’s not luck. That’s process.
Frequently Asked Questions
Q: How do I find good first issues in open source projects?
Look for labels like “good first issue,” “help wanted,” or “beginner friendly.” Filter by these on GitHub’s issue tracker. Start with documentation or test improvements — they’re lower risk and build your reputation with maintainers.
Q: What if my PR gets rejected? Should I try again?
Absolutely. Most maintainers appreciate persistence. Read their feedback carefully, fix the issues, and resubmit. I’ve seen contributors get rejected 3 times before finally getting a PR accepted — and then becoming regular contributors.
Q: How long should I wait before following up on a PR?
Wait at least 2 weeks. Maintainers are busy. If you haven’t heard back after 14 days, leave a polite comment asking for a review. Don’t ping them daily — that’s how you get blocked.
Q: Can I contribute to open source as a junior developer?
Yes, and you should. Many projects have beginner-friendly issues. Start with documentation, test coverage, or small bug fixes. The skills you learn — reading codebases, writing clean PRs, collaborating with maintainers — are invaluable for your career growth.
Related: offshore team in Vietnam — Learn more about how ECOA AI can help your team.
Related: Vietnam outsourcing — Learn more about how ECOA AI can help your team.
Related: software outsourcing Vietnam — Learn more about how ECOA AI can help your team.
Related: outsource to Vietnam — Learn more about how ECOA AI can help your team.
Related: Vietnam offshore development — Learn more about how ECOA AI can help your team.
Related reading: Why You Should Hire Vietnamese Developers: A No-Nonsense Strategy Guide
Related reading: Vietnam Outsourcing: The Strategic Play for Tech Leaders in 2025