I’ve gone through enough infrastructure evaluations as an architect to recognize the moment when the energy leaves the room. It’s not when someone questions the performance numbers or the cost model. It’s when someone pulls up the codebase and starts counting how many services need to change.
The infrastructure might be more reliable, easier to operate, or have better economics, but it doesn’t matter if getting there means touching stable production code across dozens of services. The conversation shifts from "should we do this?" to "can we afford to do this?" and the answer is usually no.
That gap between "this is better" and "we can actually adopt this" is where many decisions stall or get turned down.
The real cost of infrastructure change
Architecture discussions t…
I’ve gone through enough infrastructure evaluations as an architect to recognize the moment when the energy leaves the room. It’s not when someone questions the performance numbers or the cost model. It’s when someone pulls up the codebase and starts counting how many services need to change.
The infrastructure might be more reliable, easier to operate, or have better economics, but it doesn’t matter if getting there means touching stable production code across dozens of services. The conversation shifts from "should we do this?" to "can we afford to do this?" and the answer is usually no.
That gap between "this is better" and "we can actually adopt this" is where many decisions stall or get turned down.
The real cost of infrastructure change
Architecture discussions tend to follow a familiar pattern. The whiteboard fills up with boxes and arrows, the tradeoffs look reasonable, everyone agrees that you’ll come out the other end better. Then someone asks: how much code do we have to touch?
That question isn’t about features or benchmarks. It’s about risk. Architects evaluate the blast radius of change alongside performance and reliability. Every line of application code that needs to move, every client library that needs to be swapped, every behavior that needs to be re-learned increases the cost before you can even run a proof of concept.
For systems already in production, touching stable code introduces uncertainty. It stretches review cycles, kicks off regression testing, and makes rollback complicated. Good ideas often don’t make it past this point because weaving them into existing applications costs too much.
This is especially relevant for infrastructure on the hot path. When caching misbehaves, it takes other systems down with it. Teams are rightfully cautious about changes here, even when the infrastructure side of the proposal is compelling.
What teams actually trust
Teams trust behavior they’ve observed in production, like how commands serialize, how errors surface, or how retries behave under load. That behavior has been exercised millions of times. It’s hardened by real traffic, load testing, and years of incremental fixes. In practice, this behavior acts as a contract between the app code and infrastructure.
This is why client changes feel expensive even when two libraries look similar on the surface. Timeouts, connection handling, pipelining behavior, and edge cases around failures all shape how systems respond when stressed. At scale, subtle differences show up as tail latency spikes or incident tickets that are hard to explain.
For cache-heavy systems built on Redis or Valkey, this contract is often the wire protocol itself – RESP, the wire format the client already speaks. The application doesn’t depend on “a cache,” it depends on this specific way of talking to one.
Changing what sits behind the contract
When you hold the contract constant and change what sits behind it, the risk potential drops dramatically.
Instead of rewriting cache layers or swapping SDKs across services, teams can point existing Redis or Valkey clients at Momento, authenticate, and issue the same commands they already use. The infrastructure changes. The operational model changes. The application code largely does not.
That distinction turns evaluation from a refactor into a configuration change. It lets teams observe real production behavior without committing to a rewrite upfront. More importantly, it makes rollbacks boring. Simply change an endpoint back and that’s the extent of it.
This doesn’t eliminate all risk. RESP compatibility has edges and limitations worth understanding. Not every Redis command is supported, but it shifts the evaluation risk from application code to infrastructure, where it’s far easier to observe and reason about.
Lowering the cost of evaluation
I’ve noticed the infrastructure platforms that gain real adoption share a common trait: they meet teams where they already are. They respect existing contracts, existing mental models, and the realities of systems that have been running in production for years.
"Better" isn’t enough if getting there requires destabilizing code no one wants to touch. The platforms that succeed make it easy to start small, observe real behavior, and back out safely when something doesn’t line up. When evaluation feels reversible, teams engage honestly with the tradeoffs instead of inventing reasons to stay put.
RESP compatibility fits this philosophy. It doesn’t ask teams to abandon the clients or patterns they rely on. It allows them to keep the contract they trust while changing the parts that benefit most from being managed: scaling, availability, and operational complexity.
In practice, that’s often what separates interesting technology from technology that actually gets adopted.