How Open Source Maintainers Decide What Features To Reject
Every popular open source project accumulates a long tail of feature requests that never get merged, and the people who maintain those projects spend a surprising amount of their time saying no.

Every popular open source project accumulates a long tail of feature requests that never get merged, and the people who maintain those projects spend a surprising amount of their time saying no. Rejecting a feature is rarely about the code quality of the pull request itself. It is almost always about whether the feature fits the shape of the project, who will maintain it in five years, and whether the people asking for it actually represent the project's wider user base or just the loudest corner of it.
The First Filter Is Not Code Quality
A contributor who submits a clean, well tested pull request is often surprised when a maintainer still closes it. The first question most maintainers ask is not "does this work" but "does this belong here." A feature that solves a real problem for a narrow audience can still be rejected if supporting it means the maintainer has to understand and defend that code path for every future release, every security patch, and every refactor, long after the original contributor has moved on. The packaging and maintenance habits that keep a community's libraries usable depend on exactly this kind of restraint, because a package that says yes to everything eventually becomes a package nobody can safely upgrade.
Scope Creep Is The Quiet Killer Of Small Tools
Small, focused tools are valuable precisely because they do one thing well. A maintainer who accepts a feature that is adjacent to the project's purpose, but not actually central to it, sets a precedent. The next adjacent feature becomes easier to justify, and the one after that easier still, until the tool that once did one job cleanly now does five jobs adequately. Rejecting a reasonable sounding feature is often less about that specific request and more about refusing the slow drift that turns a sharp tool into a blunt one.
This is one of the quieter reasons contributors are sometimes pointed toward libraries that are still actively maintained rather than older, broader ones: an actively maintained project usually has a maintainer who has been saying no consistently, and that consistency is exactly what kept the project coherent enough to still be worth using.
Who Will Actually Maintain It Later
A feature proposal that includes a promise to "maintain it going forward" is treated very differently depending on who is making that promise. A first time contributor making that promise is taken far less seriously than someone who has already shipped several accepted patches, responded to issues on other parts of the codebase, and shown up during a release cycle without being asked. Maintainers have all seen contributors disappear after a feature lands, leaving the maintenance burden to fall on whoever is left, and that experience makes them conservative about accepting anything that cannot be supported by the existing team alone.
Backward Compatibility Changes The Calculation Entirely
A feature that only adds new, optional behavior is a much easier yes than one that changes existing behavior, even slightly. Any change to an existing default risks breaking code that users have depended on for years, often in ways the maintainer cannot predict from the issue tracker alone. Maintainers routinely reject features that are objectively better designs if accepting them would force every downstream user to update their code, because the cost of that disruption is paid by thousands of people who never asked for the change, not by the person who proposed it.
Security Surface Area Gets Weighed Quietly
Every new feature is also a new piece of code that can contain a vulnerability, and every new configuration option is a new way for a user to misconfigure their system. Maintainers of widely used packages think about this even when a feature looks harmless, because the cost of a security issue in a library used by thousands of downstream projects is not measured in one bug report, it is measured in thousands of applications that now need a patched version urgently. A feature that adds a new way to execute arbitrary code, parse untrusted input, or load external files gets scrutinized far more heavily than its apparent usefulness would suggest, precisely because the blast radius of a mistake is so much larger than the feature itself.
When Community Pressure Overrides Maintainer Preference
Maintainers are not operating in a vacuum, and a feature that is requested repeatedly, by many independent users, over a long period, eventually gets reconsidered even if the maintainer's initial instinct was to reject it. The difference between a passing complaint and a pattern worth revisiting usually comes down to volume and independence: ten people in one company asking for the same thing is a different signal than a hundred unrelated projects running into the same wall. Good maintainers track that difference, and some of the most significant features in long running projects started as repeatedly rejected proposals that eventually crossed that threshold.
What Contributors Can Do Differently
Contributors who get features accepted more often tend to do the same handful of things before writing any code. They open an issue describing the problem rather than the solution, they ask whether the maintainer has already considered and rejected this direction, and they offer to take on long term maintenance rather than assuming the maintainer will absorb it. None of this guarantees acceptance, but it shifts the conversation away from "is this code good" toward the question that actually decides most outcomes: does accepting this make the project easier or harder to keep healthy next year.
More in Open Source
Open Source
Choosing an Open Source License for a Haskell Library
Open the license field of a hundred random packages on Hackage and you will see the same two answers again and again:...
Open Source
How the Haskell Community Builds and Maintains Its Packages
Open source package maintenance is unglamorous work. The developers who do it reliably and well enable everyone else in the...
Open Source
The Best Open Source Haskell Libraries in Active Use
The Haskell ecosystem has a reputation for being hard to navigate - lots of libraries, varying maintenance states, and...