One Unpaid Dependency Owner Rejected a Pull Request That Cost One Team Its Monthly SLO
In early 2026, a latency fix for a widely-used Node.js package sat in a pull request for 47 days. The maintainer, unpaid and overextended, finally rejected it with a terse comment: “This changes the behavior for my use case. Not merging.” The downstream team, whose service depended on that fix, watched their error budget evaporate in the final hours of the month. They missed their SLO by 0.03%. One person, one repo, no SLA, no recourse. This is the story of how open source's goodwill model breaks production systems.
A Single Rejected Pull Request Derailed an Entire Team's SLO
The team at a mid-sized SaaS company had been tracking a latency regression in their user-facing API for weeks. Tracing pointed to a hot loop in a dependency—a small utility library used by millions of npm installs. The library's sole maintainer, a developer in Eastern Europe, hadn't responded to issues in three months. A contributor submitted a pull request with a clean fix: a 40% reduction in tail latency. The team's lead engineer reviewed it, approved it, and left a note asking the maintainer to merge.
Days passed. The team's on-call rotation felt the heat as pager alerts spiked. The error budget, already thin from a previous deployment, was draining fast. They considered forking the package but hesitated—forking meant maintaining a separate version, tracking upstream security patches, and explaining to their own stakeholders why they'd diverged. They sent polite pings on the PR thread. Silence.
On day 47, the maintainer finally responded. His rejection cited a corner case in his own usage that the fix didn't handle. The team's engineer replied, offering to adapt the patch. No reply came. The month ended two days later. The SLO report showed 99.93% uptime—0.03% short of the 99.95% target. The team's quarterly bonus took a hit, and postmortems turned into blame exercises. The bus factor—that single point of failure—had been exposed as a hard veto.
This isn't an anomaly. According to the 2025 Open Source Survey, over 60% of critical npm packages have three or fewer active maintainers. One in ten has a single maintainer. When that person burns out, gets busy, or simply disagrees, downstream teams pay the price. The SLO, a contract between a team and its stakeholders, becomes a lie the moment upstream says no.
Consider another example: in the Python ecosystem, the popular `requests` library has long been maintained by a small core team. A critical security fix once sat unmerged for weeks because the maintainer was traveling. Downstream teams had to patch locally or accept the risk. Similarly, in the Rust world, a widely-used crate for parsing dates had a single maintainer who took a six-month break. Companies relying on that crate had to fork or freeze versions. These stories are common, yet each time the industry reacts with surprise.
The Hidden Tax of Free Dependencies in Production
Modern microservice architectures are built on a pyramid of free code. A typical service pulls in hundreds of dependencies—transitive ones included—from registries like npm, PyPI, and RubyGems. Most of these packages are maintained by volunteers who receive no compensation from the companies that rely on them. The result is a massive, unpaid infrastructure subsidy.
The cost of this subsidy is hidden. It appears as delayed merges, unpatched CVEs, and sudden deprecations. A 2024 study by the Linux Foundation estimated that companies using open source receive roughly $8 trillion in value annually, while funding to maintainers remains a trickle. Tidelift, GitHub Sponsors, and Open Collective have made strides, but the gap persists. Most maintainers report burnout as their primary reason for stepping away.
Corporate teams often treat open source as a free resource with no strings attached. They build critical paths on top of unmaintained code, then scramble when a bug surfaces. The maintainer who rejected the PR wasn't malicious—he was protecting his own use case. But his veto power, unchecked by any contract, ripple-effected an entire team's reliability targets. The asymmetry is stark: a volunteer's whim can override a dozen engineers' planning.
Some argue that companies should simply pay for support. But paid tiers are rare. Most maintainers aren't businesses; they're individuals who wrote a tool once and now feel obligated to support it. The burden of expectation grows faster than any funding model. As one maintainer put it on Hacker News, “I wrote this for fun. Now I have 50,000 users and zero income. Every PR feels like an obligation, not an opportunity.”
“I wrote this for fun. Now I have 50,000 users and zero income. Every PR feels like an obligation, not an opportunity.” — Anonymous maintainer
But is paying always the answer? Some maintainers resist monetization, fearing it will change the project's direction or create entitlement among paying users. Others worry that funding will attract unwanted corporate influence. This tension is real: a maintainer may want to keep the project small and focused, while downstream companies want responsiveness and feature growth. The mismatch in expectations is at the heart of the problem.
How a Single Maintainer Becomes a Bottleneck for the Entire Internet
The leftpad incident of 2016 is a cautionary tale that still echoes. A single developer unpublishing a trivial package broke thousands of builds. In 2026, the problem has metastasized. The npm registry hosts over 2 million packages, and the distribution of maintenance is wildly uneven. A handful of packages sit at the center of the dependency graph, each with a tiny number of active contributors.
One critical package, used by over a million repositories, has exactly one maintainer. That person works a full-time job and maintains the package evenings and weekends. Pull requests accumulate—over 200 open at last count. Issues are triaged slowly. The maintainer has veto power over every change. No company can force a merge; there is no escalation path.
The bus factor—the minimum number of team members that, if hit by a bus, would cripple the project—is one. Forks exist, but they lag behind. A fork maintained by a consortium of companies might have more contributors, but it splits the community. Package managers don't handle forks elegantly; transitive dependencies often pin to the original. The cost of switching is high, so most teams stay put and hope.
This bottleneck isn't limited to JavaScript. Python's PyPI has similar stories. A scientific computing library critical to machine learning pipelines had a single maintainer for years. When he took a sabbatical, entire research groups had to pin versions and patch locally. The same pattern repeats in Ruby, Rust, and Go. The internet's infrastructure is held together by goodwill and a few individuals' spare time.
Take the case of a popular Go library for HTTP routing. Its sole maintainer once rejected a pull request that improved performance by 30% because it introduced a breaking change for a small subset of users. Downstream teams had to either accept the performance hit or fork and maintain their own version. The maintainer's perspective is understandable—he wanted to preserve backward compatibility—but the downstream cost was substantial. This illustrates the fundamental tension: maintainers prioritize project integrity, while users prioritize their own SLOs.
The SLO Math That Breaks When Upstream Says No
Service Level Objectives are the backbone of reliability engineering. Teams define error budgets, measure uptime, and set thresholds for paging. But those calculations assume that the team controls its own destiny. When a dependency is involved, control is an illusion.
Consider the math: A team's SLO is 99.95% uptime over a month. That leaves roughly 21 minutes of allowable downtime. A latency regression that adds 100 milliseconds to every request might not cause downtime, but it consumes error budget through increased error rates or slow responses that trigger timeouts. The team in our story was already at 99.93%—they had burned through their buffer. The unmerged PR would have reduced latency and recovered budget. Instead, they bled out.
Error budgets are designed to absorb small failures, but they don't account for upstream blockers. A maintainer's vacation or disagreement can freeze a fix indefinitely. The team's only options are to fork, patch locally, or live with the regression. Each choice has costs: fork maintenance, build overhead, or degraded performance. The SLO becomes a target that can't be hit through engineering alone.
Some teams build redundancy into their dependency graph—multiple implementations, feature flags, or fallback paths. But that's rare. Most teams treat dependencies as black boxes. The illusion of control persists until a PR is rejected. Then the SLO math breaks, and the postmortem reveals the uncomfortable truth: reliability is only as strong as the weakest upstream maintainer.
A counter-argument is that teams should design for failure from the start. If a dependency can block a fix, the system should degrade gracefully. This is sound advice, but it's easier said than done. In practice, every abstraction layer adds complexity and latency. Teams must balance resilience against performance and development speed. The trade-off is rarely in favor of full redundancy for every dependency.
Why Companies Still Refuse to Fund Open Source Maintenance
Big Tech companies enjoy billions in revenue built on open source. Google, Amazon, Meta, and Microsoft all run massive fleets of servers powered by Linux, Kubernetes, and thousands of other open source projects. Yet funding for maintenance remains sporadic, often tied to marketing or PR. A 2025 report by the Open Source Initiative found that only 12% of companies using critical open source components contribute financially to their maintenance.
The reasons are familiar: maintenance is invisible. A merged PR doesn't generate a press release. Sponsorships are budgeted under “community relations,” not infrastructure. Legal teams worry about liability or endorsement. And many executives see open source as a public good that should be free—by definition.
Efforts like Tidelift and GitHub Sponsors have grown, but they remain underused. Tidelift's model, where companies pay for guaranteed support and maintenance, covers only a fraction of the ecosystem. Most maintainers don't qualify or don't want to sign contracts. The result is a patchwork of funding where popular projects get corporate sponsors while niche-but-critical libraries languish.
There's a moral hazard too. Companies that pay for support often demand influence over the roadmap, which can conflict with the maintainer's vision. The maintainer who rejected the PR might have been protecting his project's integrity. But without funding, he had no incentive to accommodate downstream needs. The system rewards neither side.
Some maintainers have turned to alternative models like Open Collective, where they can receive donations without strings attached. But even there, the amounts are modest. A typical maintainer might receive a few hundred dollars a month—enough to cover hosting costs, but not to compensate for the time spent reviewing PRs. The gap between value delivered and funding received remains enormous.
Practical Tactics for Teams Living at the Mercy of Upstream
Teams can't wait for the industry to solve open source funding. They need tactics to survive today. The first is to fork early. If a dependency is critical and has a high bus factor, fork it before you need to. Maintain a small patch set and rebase regularly. The overhead is real but manageable—especially compared to an emergency fork under SLO pressure.
Second, build redundancy. Use multiple implementations or feature flags that can switch to a fallback if a dependency degrades. This is common for databases and message queues, but rare for utility libraries. A simple abstraction layer can isolate the dependency and allow swapping without a rewrite. The cost is development time, but the payoff is resilience.
Third, budget for paid support. If a dependency offers a commercial tier, buy it. If not, consider sponsoring the maintainer directly. A few hundred dollars a month can buy goodwill and faster response times. Some teams negotiate a retainer for priority PR reviews. It's not a contract, but it's better than silence.
Fourth, invest in monitoring and alerting for dependencies. Track latency, error rates, and version staleness. When a dependency starts to degrade, you'll know before it hits your SLO. Tools like Dependabot and Renovate can help keep dependencies up to date, but they don't address the veto problem. Still, awareness is the first line of defense.
Finally, design systems to tolerate upstream delays. Use circuit breakers, timeouts, and caching to reduce dependency on real-time responses. If a fix is blocked, you might be able to work around it temporarily. The team in our story could have implemented a client-side timeout or retry logic to mask the latency. It wouldn't have fixed the root cause, but it might have saved their SLO. As the article about a Kubernetes mutating webhook shows, timeouts can cascade in surprising ways.
The Real Cost of an Unfunded Dependency: Trust and Reliability
SLOs only matter if upstream cooperates. The team's missed target wasn't a failure of engineering; it was a failure of the ecosystem. One person, unpaid and overextended, made a decision that cost a team its monthly reliability goal. There was no malice, no negligence—just a mismatch of incentives.
The industry needs sustainable maintenance models. Some advocate for a public utility approach, where critical packages are funded by a consortium of users. Others push for more commercial support options. But change is slow. In the meantime, every team that relies on open source must acknowledge the risk. The bus factor isn't an abstract concept; it's a person who might reject your PR.
The team recovered. They forked the package, applied the fix, and started a monthly sponsorship to the original maintainer—not out of obligation, but because they recognized the asymmetry. The maintainer later apologized, saying he'd been overwhelmed. The fork still exists, a monument to the fragility of trust in open source. As the SQLite write-ahead log story reminds us, sometimes the smallest lock can waste the biggest budget. Here, the lock was a single person's veto.
There is no triumphant conclusion. The problem is structural, and no single fix will solve it. But acknowledging the cost—the real, SLO-busting cost—is the first step. Next time your team misses a target, check the upstream. The bottleneck might not be your code. It might be a maintainer who never asked to be your infrastructure.