Skip to content

PATTERN Cited by 2 sources

Upstream fixes to community

Pattern

When a large adopter of an open-source framework finds bugs that only appear at their scale — because smaller adopters can't exercise the code paths hard enough to trigger them — partner with the maintainers and push the fixes upstream, rather than carrying patches as internal forks indefinitely. The adopter gets a maintained, community-backed fix; the maintainer gets scale-level test coverage they can't generate in isolation; every other downstream consumer benefits.

The canonical wiki instance is Shopify's 2025 React Native new-architecture migration (see sources/2025-09-12-shopify-migrating-to-react-natives-new-architecture), specifically the collaboration with Meta (React Native) and Software Mansion (Reanimated) on the frame-rate issues Shopify hit in production.

Forces

  • Adopter-scale-only bugs. Shopify's Reanimated navigation animations hit frame-rate drops "unique to our scale and animation complexity" — issues "that likely would have gone unnoticed in smaller or less complex applications." The bug wasn't in Shopify's code; it was in Reanimated, latent until Shopify's scale exposed it.
  • Internal forks are expensive. Long-term maintenance of custom patches on an upstream moving target is a recurring engineering tax — rebases, merge conflicts, drift. Shopify chose not to pay it.
  • Adopter reputation. An OSS library with "Shopify is a major user and found these fixes" has a reliability story competitors lack.

Solution shape

  1. Open a high-bandwidth channel with maintainers. Shopify worked "closely with Meta and Software Mansion" — both upstream teams responded "exceptional[ly]". This usually requires existing relationships or cross-company introductions; it's not an email-the-repo exercise.
  2. Let the maintainers receive patches before GA. Software Mansion "provided early access to patches that addressed most of the performance issues." Shopify integrated those patches in-production, then iterated on them.
  3. Upstream the fix incrementally. "We're currently collaborating with both Meta and Software Mansion to integrate these fixes into Reanimated and React Native itself, ensuring the broader community benefits from the improvements discovered through our large-scale testing."
  4. Publish the contribution. The migration writeup names one public Shopify RN fix (facebook/react-native PR #49849).
  5. Credit back. The writeup explicitly thanks "Meta and Software Mansion for being amazing partners" — the relationship is reciprocal and public.

Why "ship and move on" beats "fork and maintain"

  • Forks drift. An internal patch on top of upstream X is a patch on top of upstream X+1 three months later. Each upstream release costs a rebase.
  • Forks lose review. The internal patch was reviewed by one team's engineers. The upstreamed version is reviewed by the entire maintainer community, in production at multiple companies.
  • Forks sign up for incident ownership. A bug in the forked-only code path is the adopter's bug to fix. An upstreamed bug can be co-owned.
  • Forks hide signal. Other adopters hit the same bug and independently fix it (or suffer silently). A public upstream makes the issue and fix discoverable.

Adjacent patterns

  • patterns/upstream-the-fix — the broader canonical pattern for OSS contribution (covered at Meta's altitude in the separately-ingested Meta libraries post).
  • Library-side dual-architecture support (FlashList v2) — Shopify does the inverse: makes their OSS library easier for downstream adopters.
  • patterns/upstream-contribution-parallel-to-in-house-integration — sibling pattern at the merge-timing altitude. When the upstream maintainer cannot merge on your timeline, run the PR and an in-house integration of that same branch in parallel. Canonicalised in the Slack × BBE × HTTP/3 ingest below.

Altitudes

The pattern shows up at two distinct altitudes in the wiki:

  1. Fix-existing-feature-at-scale altitude — the adopter finds bugs in existing upstream features because their scale exposes code paths smaller adopters don't hit. Canonical instance: Shopify × React Native + Reanimated (below).
  2. Upstream-a-whole-new-feature altitude — the adopter needs a capability that doesn't exist upstream at all and builds + contributes it. Canonical instance: Slack × Prometheus Blackbox Exporter × HTTP/3 support — Slack intern Sebastian Feliciano scoped, implemented, and open-sourced QUIC/ HTTP/3 probe support into BBE upstream using systems/quic-go as the client library. Contribution discipline verbatim: "had to add this new logic while following the Blackbox Exporter's existing architecture, ensuring the new features maintained the tool's configuration patterns ... By following existing patterns and earning community buy-in, Sebastian successfully landed the HTTP/3 feature." Community-wide benefit framed verbatim: "This contribution benefits the wider Prometheus community, helping other organizations facing the same challenges with HTTP/3 adoption." (Source: sources/2026-03-31-slack-from-custom-to-open-scalable-network-probing-and-http3-readiness). The patterns/upstream-contribution-parallel-to-in-house-integration pattern is how Slack shipped the feature internally before upstream merge completed.
Last updated · 470 distilled / 1,213 read