Every artefact behind this page, graded. The full ledger, with the quote
supporting each claim, ships beside this file as sources.md.
Decision recordNetflix2016-04-18
Ribbon README, "Project Status: On Maintenance"
Lists each module with its internal status, four of them marked not used, and states that
the production ones are wrapped in an internal client with no new functionality. Names
gRPC as the direction, for "multi-language support and better extensibility".
Carry forwardThe published library is a snapshot of an internal need. Read the component-by-component status before adopting the whole.
https://github.com/Netflix/ribbon
SourceNetflixchecked 2026-09-09
Ribbon open pull request queue
40 open pull requests, the oldest visible from 7 February 2018, against a README that
says complete pull requests would be reviewed and accepted.
Carry forwardThe queue is the support commitment. Compare it with the stated one before you depend on either.
https://github.com/Netflix/ribbon/pulls?q=is:pr+is:open
SourceNetflix2015-09-02
Ribbon issue #243, replacement API unclear
An issue reporting that a deprecated client is still used throughout the documentation
and that the replacement is unclear. Open at the check date, eleven years later.
Carry forwardDeprecation without a documented migration path is a decision to leave users where they are.
https://github.com/Netflix/ribbon/issues/243
Decision recordNetflix2018-11-19
Hystrix status notice
Declares maintenance mode, states that issues will not be reviewed nor pull requests
merged, pins the final release to the last internally used version, points new projects at
resilience4j and invites the community to take ownership.
Carry forwardA good freeze notice names a successor and a version boundary. Demand both from your own deprecations.
https://github.com/Netflix/Hystrix
Case studyNetflixwiki, edited 2017
Hystrix wiki, production volume
"Today tens of billions of thread-isolated, and hundreds of billions of semaphore-isolated
calls are executed via Hystrix every day at Netflix." The ratio is the interesting part:
the cheap isolation mode carries an order of magnitude more traffic.
Carry forwardThread-per-call isolation is a premium you pay on a minority of calls. Decide which calls deserve it before you standardise.
https://github.com/Netflix/Hystrix/wiki
SourceNetflix2022-11 to 2026-08
Hystrix pull request #2033
A fix for an exception thrown when resizing thread pools on Java 11. Opened November 2022,
never merged, closed in August 2026 when the contributor deleted their fork.
Carry forwardIn a frozen project, your fix is your fork. Budget for carrying patches, or leave.
https://github.com/Netflix/Hystrix/pull/2033
Decision recordNetflixwiki edit 2018-07-13
Eureka wiki, the 2.0 discontinuation
"The existing open source work on eureka 2.0 is discontinued. The code base and artefacts
that were released as part of the existing repository of work on the 2.x branch is
considered use at your own risk."
Carry forwardA rewrite that is abandoned in public is more informative than one that quietly stalls. Ask vendors directly about the state of any announced next generation.
https://github.com/Netflix/eureka/wiki
SourceNetflixchecked 2026-09-09
Eureka at a glance
Documents the mechanism that decides how stale a caller's view can be: a 30 second
registry poll, renewals, and removal "in about 90 seconds" when renewals stop. Also states
that clients keep working when every registry server is down.
Carry forwardAvailability under registry failure and speed of removing dead instances are the same dial. Pick which one you are buying.
https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
Operator reportOperator, via Netflix issue tracker2023-08-07
Eureka issue #1510, refresh task rejected
A saturated executor rejects the cache refresh; the registry view freezes; a redeployed
dependency becomes unreachable for that pod, with "No route to host" on every call.
Carry forwardExport the age of every cached view and fail readiness on it. A frozen refresher is invisible to liveness checks.
https://github.com/Netflix/eureka/issues/1510
Operator reportSpring Cloud users2020-04-05
spring-cloud-netflix #3652, eviction measured
Timestamps in the thread show 2 minutes 46 seconds from process stop to eviction with a
90 second lease and a 9 second eviction timer.
Carry forwardMeasure the removal window end to end in your own environment; the configured intervals are inputs to it, not the answer.
https://github.com/spring-cloud/spring-cloud-netflix/issues/3652
Operator reportSpring Cloud users2017-03-16
spring-cloud-netflix #1785, CLOSE_WAIT connections reused
Connections stuck in CLOSE_WAIT are handed back out of the pool behind a routing filter
whose default connection lifetime is infinite, until the pool blocks requests.
Carry forwardGive every pooled connection a maximum age. An infinite time-to-live turns a transient peer failure into a permanent pool defect.
https://github.com/spring-cloud/spring-cloud-netflix/issues/1785
SourceSpring Cloud users2018 to 2021
The timeout, retry and circuit-breaker issue set
Nine issues in one repository about the same interaction: an outer circuit-breaker timeout,
an inner read timeout, and retries between them producing duplicate or abandoned work.
Carry forwardLayered resilience needs one budget, allocated downward. Independent defaults at each layer is the recipe for the whole class.
https://github.com/spring-cloud/spring-cloud-netflix/issues
Decision recordNetflixchecked 2026-09-09
concurrency-limits, the case against tuned constants
States that stress-test-derived request ceilings go stale under autoscaling and that the
service then "falls over by becoming non-responsive", and derives a limit at runtime by
treating concurrency as a TCP congestion window, with Little's Law as the model.
Carry forwardIf a number in your configuration has to be revisited whenever capacity changes, it is a control loop with a human in it. Automate the loop or accept the staleness.
https://github.com/Netflix/concurrency-limits
SourceNetflixchecked 2026-09-09
Prana, the 2014 sidecar
Exposes the Java client libraries for discovery, load balancing and configuration over
HTTP so non-JVM applications can participate, and records that the implementation is not
used internally.
Carry forwardWhen a second runtime appears, the library becomes a protocol problem. Design the out-of-process path before you need it, not after.
https://github.com/Netflix/Prana
SourceNetflixchecked 2026-09-09
Zuul, how filters are loaded
Filter source is written to directories that are polled for changes, then compiled into
the running server and applied to subsequent requests.
Carry forwardThe gateway earns its place when policy can be pushed to it faster than a deployment. Without hot loading it is one more service to deploy.
https://github.com/Netflix/zuul/wiki/How-It-Works
Decision recordNetflix2020-04-11
Zuul issue #771, "Zuul 3 Improvements", closed as not planned
Proposes dropping the hard dependencies on Guice and Groovy, removing RxJava from the API,
and making the name resolver and load balancer pluggable so Eureka and Ribbon are no longer
required. Closed without being done; one item shipped four years later.
Carry forwardDependency removal lands when it is packaged as one change per release, not as a clean-up epic.
https://github.com/Netflix/zuul/issues/771
SourceNetflix2024-07-08
Zuul 4.0.0 release notes
Replaces RxJava Observable in the async filter API with CompletableFuture, removes the
debug routing infrastructure, and changes connection draining to an event on the pipeline.
Carry forwardEven the vendor eventually leaves its own abstraction. Prefer the platform primitive when the library adds no leverage.
https://github.com/Netflix/zuul/releases/tag/v4.0.0
Operator reportOperator, via Netflix issue tracker2026-01-14
Zuul issue #2021, buffer leaks after upgrade, closed as not planned
Netty leak detection fires after upgrading the gateway, with traces from the message
buffering path. Closed without a fix, alongside a companion report on the following
version.
Carry forwardAdopting a company's internal gateway means adopting its upgrade priorities. Pin versions and own the debugging.
https://github.com/Netflix/zuul/issues/2021
Decision recordSpring Cloud (VMware)2021-01-27
Spring Cloud 2020.0 release notes
Removes fourteen Netflix modules from the release train in one version, including the
circuit breaker, the load balancer, the gateway, the configuration library and the
sidecar, having announced the plan thirteen months earlier.
Carry forwardYour framework's removal date, not the upstream freeze date, is the deadline you actually have. Track both.
https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes
Decision recordgRPC2020-03-18
Proposal A27, xDS-based global load balancing
Moves gRPC from its own balancing protocol to the xDS configuration bus, on the reasoning
that xDS is becoming the standard for configuring data plane software generally, and wires
it into both the resolver and the balancing policy.
Carry forwardThe durable choice is the configuration bus, not the balancing algorithm. Pick the client that can subscribe to yours.
https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md
Decision recordNetflix2023-12-13
Conductor discontinuation notice
States the date maintenance ends, points to community forks, and leaves the repository
readable. The organisation listing shows the archive with its last update on 22 December
2023.
Carry forwardAsk any vendor-run open-source dependency one question: what happens on the day it stops being used internally?
https://github.com/Netflix/conductor
SourceGitHub Advisory Database2025-06-30
GHSA-8gqp-hr9g-pg62, critical injection in the forked orchestrator
CVSS 9.8 command injection in conductor-core below 3.21.13, eighteen months after the
original project was discontinued, patched by the fork.
Carry forwardAfter an archive, your advisory feed must follow the fork's coordinates or you stop receiving notifications for code you still run.
https://github.com/advisories/GHSA-8gqp-hr9g-pg62
Case studyNetflixchecked 2026-09-09
Maestro, the successor orchestrator
Published separately from the discontinued project and described as a fully managed
workflow service scheduling "hundreds of thousands of workflows, millions of jobs every
day" under a strict service level objective.
Carry forwardWhen a vendor archives one project and publishes another in the same problem space, the archive is a migration signal, not an abandonment of the problem.
https://github.com/Netflix/maestro
SourceNetflixchecked 2026-09-09
Organisation repository listing and searches
Shows what is still being touched: the gateway in September 2026, discovery in August
2026, configuration in July 2026, adaptive limits in January 2026. Searches for grpc and
rpc return no successor to the load balancer, ten years after one was promised.
Carry forwardAn organisation's repository list, sorted by last update, is the fastest map of which of its published systems still matter to it.
https://github.com/orgs/Netflix/repositories?sort=updated
Sourceresilience4jchecked 2026-09-09
resilience4j, the named successor
A fault tolerance library built as composable decorators, where "you have the choice to
select the decorators you need and nothing else", contrasting with a framework that owns
thread pools and a dashboard.
Carry forwardThe successor to a heavy framework is usually a smaller thing you assemble. Check what runtime you are inheriting, not just what features.
https://github.com/resilience4j/resilience4j
SourceNetflixchecked 2026-09-09
Archaius and Servo, the configuration and telemetry planes
Archaius exists so that values change without a restart and is still maintained; Servo
states that it receives minimal maintenance and points to Spectator, which is the most
recently updated repository in the organisation.
Carry forwardThe planes that survive a decade are the ones whose whole purpose is changing something at runtime.
https://github.com/Netflix/archaius