Which to choose when your team already uses Redis as a queue
If your team already runs queue work on Redis lists, Pub/Sub or Streams, the question is not whether Redis can move messages but whether losing or redelivering them is acceptable. RabbitMQ is the stronger choice when queue work is a business process that must survive node failure, needs explicit acknowledgement, and depends on routing and dead-lettering. Its quorum queues are durable, replicated queues based on the Raft consensus algorithm, and classic queue mirroring was removed starting with RabbitMQ 4.0. Redis is the reasonable choice when queue work is secondary to caching and the application can tolerate loss or handles retries and idempotency itself. Redis Pub/Sub is at-most-once, so a message is lost if the subscriber cannot handle it.
The decision turns on five questions. First, how much message loss your workflow tolerates: if a lost message means a missed payment or an unsent notice, a dedicated broker with replicated queues changes the risk profile. Second, redelivery and dead-letter needs: check whether your current design can quarantine poison messages and retry them without custom code. Third, protocol needs: RabbitMQ supports AMQP 0-9-1, AMQP 1.0 as a core protocol since 4.0, plus MQTT and STOMP through plugins, while Redis clients speak the Redis protocol. Fourth, licensing posture: RabbitMQ's server is MPL 2.0, while Redis 8.0 and later is available under a license of your choice among RSALv2, SSPLv1 and AGPLv3, so review which terms your legal team has approved. Fifth, who will operate the broker, since a separate system adds upgrades, monitoring and backups. Confirm current support windows on the RabbitMQ release information page before you plan an upgrade path.
Which broker fits which queue workload
This table maps common queue workloads to the better fit between RabbitMQ and Redis, with the condition that drives each choice. Read each row for the deciding factor, then check whether your own load, failure tolerance and operating model match it.
| Workload | Better fit | Deciding condition |
|---|---|---|
| Background jobs that must not be lost | RabbitMQ with quorum queues | Choose RabbitMQ when a dropped or unacknowledged job means lost business work, since quorum queues are replicated with Raft. Redis Streams with consumer groups can work, but you must design and test the replication and failover behavior yourself. |
| Fan-out notifications where some loss is acceptable | Redis Pub/Sub | Pub/Sub is at-most-once, so a subscriber that is offline or cannot keep up misses messages. This is acceptable for presence updates or cache invalidation hints, but not for billing or alerts you must act on. |
| Cache-heavy app that also queues lightly | Redis Streams (illustrative fit) | If Redis already runs as a cache with high availability in place, Streams with consumer groups can cover modest queues without another service. Confirm your persistence settings and failover tests before relying on it for work that must complete. |
| Multi-protocol device or enterprise integration | RabbitMQ | Choose RabbitMQ when clients need AMQP 0-9-1, AMQP 1.0, MQTT or STOMP through its plugins. Redis does not offer these as broker protocols, so each integration would need custom bridging code. |
| Event replay and reprocessing | Redis Streams or RabbitMQ Streams | Redis Streams act as an append-only log with consumer groups, which suits replay within the retention you configure. RabbitMQ Streams suit high-throughput replay. Confirm retention limits and memory sizing for either option against your replay window. |
| Queue traffic that must be isolated from cache memory pressure | RabbitMQ | A dedicated broker keeps queue backlogs from competing with cache eviction and memory limits in one Redis instance. The payoff grows as queue depth and team count grow. |
| Small team, single Redis already operated, low message volume | Redis | Adding a broker adds a service to patch, monitor and back up. If your delivery needs fit Streams semantics, keeping one data store may cost less to run. Ask your team to define the acceptable loss window in writing first. |
| Licensing and long-term support planning | RabbitMQ (MPL-2.0) and Redis Open Source (AGPLv3 option) | RabbitMQ core is MPL-2.0. Redis 8.0 and later are available under RSALv2, SSPLv1 or AGPLv3 at your choice, while Redis 7.4 to 7.8 use the dual RSALv2 or SSPLv1 terms. Confirm your license obligations with counsel before you choose a version. |
How RabbitMQ quorum queues and Redis replication differ in operation
RabbitMQ and Redis both keep queue traffic available through node failures, but they get there with different consensus models, node counts and operating routines. The cards below cover where each model puts the risk, what it asks of your team after go-live, and what to confirm in your own environment before you size a cluster.
Raft-based quorum queues
Quorum queues are durable, replicated queues based on the Raft consensus algorithm, so a message is held by a majority of replicas before the broker treats it as stored. A three-node cluster can lose one node and keep serving the queue, but losing two stops writes until a majority returns. Ask your vendor or test lab to confirm how your chosen replica count behaves during a partition.
Classic mirroring removed in 4.0
Classic queue mirroring was removed starting with RabbitMQ 4.0, so any queue that relied on it must move to quorum queues or streams before you upgrade. Teams that copied mirroring policies from older runbooks should audit policies and client declarations first. Plan the migration as a separate change with its own rollback path, because the old failover behavior does not carry over.
Streams and the AMQP 1.0 core
RabbitMQ Streams serve high-throughput, replayable access, and AMQP 1.0 became a core protocol in RabbitMQ 4.0, alongside the AMQP 0-9-1 protocol the broker was originally built on. Clients that speak AMQP 1.0 can use the broker without a plugin, but you should confirm each client library's support level before you commit. Mixed protocol estates need a compatibility test in staging.
Redis single-process structures
Redis keeps its data structures, including lists, Pub/Sub channels and streams, in one process per instance, and replication copies data asynchronously from a primary to replicas. Writes acknowledged by the primary can be lost on failover if a replica had not yet received them. Pub/Sub adds at-most-once delivery, so a subscriber that is down misses the message. Streams give at-least-once consumption, but your consumers still need idempotent handling.
Sentinel failover and node counts
Redis Sentinel provides automatic failover by promoting a replica to primary when Redis Cluster is not in use, and the Sentinel docs say a robust deployment needs at least three Sentinel instances. Sentinel is a separate process set you must deploy, monitor and keep in quorum with the data nodes. Confirm your Sentinel placement across failure domains, because three Sentinels on one host do not protect you from a host failure.
Day-two operations and sizing
A RabbitMQ cluster and a Sentinel-managed Redis deployment both need upgrade windows, backup routines, disk and memory alerting, and runbooks for node replacement. The difference is where the work sits: RabbitMQ spreads queue state across replicas that you size per queue, while Redis keeps the full dataset in memory on each node. Ask your team to size both against your message volume, retention and recovery targets in a test environment before you commit to a topology.
Delivery, persistence and protocol capabilities compared
This table compares how Redis Pub/Sub, Redis Streams and RabbitMQ deliver, persist and replicate messages, and which protocols each accepts. Read each row against your current Redis version and client library, because delivery behavior depends on how your application uses the commands.
| Capability | Redis (lists, Pub/Sub, Streams) | RabbitMQ (queues and streams) |
|---|---|---|
| Delivery guarantee | Pub/Sub is at-most-once, so a message is lost if the subscriber cannot handle it. Streams support at-least-once delivery when consumers acknowledge entries. | Acknowledged queue delivery with durable, replicated quorum queues based on Raft. Confirm publisher confirms and consumer acks are configured in your client. |
| Persistence model | Streams behave as an append-only log in memory with persistence options. Confirm the persistence settings for your exact Redis deployment. | Quorum queues are durable and replicated across cluster nodes. RabbitMQ Streams offer a separate log structure for high-throughput reads. |
| Replication and failover | Redis Sentinel provides automatic failover from a primary to a replica when not using Redis Cluster, and the Sentinel docs say a robust deployment needs at least three Sentinel instances. | Replication is built into quorum queues. Classic queue mirroring was removed starting with RabbitMQ 4.0, so mirrored classic queues are not an option on current lines. |
| Consumer groups and routing | Streams offer consumer groups. Pub/Sub has channel and pattern subscriptions but no queue-level routing rules. | Exchanges and bindings route messages to queues. Consumer groups are not a native concept, and competing consumers share a queue. |
| Protocol support | Redis clients use the Redis protocol. AMQP, MQTT and STOMP are not native Redis protocols. | AMQP 0-9-1 is the original protocol. AMQP 1.0 is a core protocol since RabbitMQ 4.0. MQTT 3.1, 3.1.1 and 5.0 and STOMP are available through plugins, with AMQP 1.0, MQTT and STOMP over WebSocket. |
| Data types beyond queues | Lists, sets, hashes, JSON, time series, probabilistic structures and vector search, depending on edition and modules. Confirm which modules your build includes. | Queues, exchanges, bindings and streams. RabbitMQ is a broker, not a general-purpose data store. |
| Platform support | Redis Open Source runs on Linux, macOS, OpenBSD, NetBSD and FreeBSD, and on Windows only through Docker. | Confirm the supported operating systems and container images for your RabbitMQ release in the official documentation before standardizing. |
What the MPL-2.0 and Redis license changes mean for each option
RabbitMQ server and its tier 1 core plugins are licensed under MPL 2.0, a file-level copyleft license, and some OCF files carry Apache 2.0. In practice, this means changes you make to MPL-licensed RabbitMQ files must be made available under the same terms when you distribute them, while your own applications that merely connect to the broker are not affected. The license is stable across the current release lines, so the question is mostly about support rather than permission to run the software.
- File-level copyleft: Modifications to MPL 2.0 files stay under MPL 2.0 if you distribute them, but separate code that talks to the broker over AMQP is not automatically covered.
- Mixed license files: Some OCF files are Apache 2.0, so check the license header of any file you fork or embed.
- Community support window: RabbitMQ 4.3.6, released on September 16, 2026, has community support until January 31, 2027, and 4.2 community support ended on July 31, 2026.
- Commercial long-term support: Support beyond community dates is available only with a valid commercial support license, for example commercial support for 4.2 runs to June 30, 2030.
- Lifecycle source: Official commercial lifecycle details sit on the Broadcom support portal, not in the open-source release notes.
Ask counsel to confirm how MPL 2.0 applies to any forked or patched broker code, and ask Broadcom for the written support terms that match your required lifecycle dates.
Redis 7.2.x and earlier remain under the BSD-3-Clause license, which is permissive and OSI-approved. If your queue runs on one of these lines, the license does not restrict internal use, modification or redistribution in the way the later changes do. That makes this line the least license-sensitive choice for teams that want to stay on an older Redis, but it also means you accept the feature set and security patch level of that line.
- Permissive terms: BSD-3-Clause allows use, modification and redistribution with notice requirements.
- No network-service clause: The later copyleft-style obligations on modified network services do not apply to this line.
- Feature boundary: Newer Redis features, including those in the 8.x line, are not part of this license history.
- Upgrade decision: Moving to a later line changes the license terms, so the upgrade is a licensing decision as well as a technical one.
- Legal scope: The license change history is documented on the Redis licenses page, which also describes the FAQ position for unmodified artifacts.
Confirm which exact Redis version your production queue runs, and record it, before any license review starts.
Redis 7.4.x through 7.8.x, then called Redis Community Edition, are distributed under the dual RSALv2 or SSPLv1 license. Neither license is OSI-approved, so these releases do not meet the open-source definition used by many procurement and compliance policies. The Redis licenses page notes that the March 2024 change to this dual license frustrated some community members, which is a reason to treat this line as a distinct legal position.
- Non-OSI terms: RSALv2 and SSPLv1 are source-available licenses, so policies that require OSI-approved software will exclude this line.
- Hosting obligations: Offering a modified Redis as a service under SSPLv1 carries obligations that your counsel should read in full.
- Dual choice: You may use the line under either RSALv2 or SSPLv1, but the choice and its consequences need legal review.
- Version boundary: The license applies to these specific releases, so a server on 7.4 to 7.8 is not covered by the Redis 8 terms.
- Policy check: Map your open-source policy against the license names, not the product name.
Have legal review the RSALv2 and SSPLv1 texts against your intended use, including any internal platform you expose to other business units.
Redis Open Source 8.0 and later can be used under a license you choose among RSALv2, SSPLv1 and the GNU AGPLv3, effective from the general availability release of Redis 8. The AGPLv3 option is OSI-approved and is the one the Redis licenses page says Redis Ltd. plans to keep Redis Open Source under. The license choice is yours to make, but it should be recorded and applied consistently across the environment.
- Tri-license choice: Select AGPLv3 if your policy requires an OSI-approved license, and document the selection.
- Network-service obligation: If you offer modified Redis code as a network service, the modified source must be made available to that service's users under the license you rely on.
- Source-available features: The Intel SVS-VAMANA optimizations (LeanVec and LVQ) are closed source and can only be used with Redis Open Source under RSALv2, not AGPLv3 or SSPLv1.
- Commercial products are separate: Redis Software, a self-managed product, and Redis Cloud, a managed service, are not open source.
- Current line: The line reached 8.10.0 on July 29, 2026, and security releases shipped on September 17, 2026.
If you plan to use the vector optimizations, have counsel confirm that RSALv2 is acceptable before you rely on them.
What drives running cost for each broker
This table lists the cost drivers for running RabbitMQ or Redis as a queue, with no figures, since none are supplied for either product. Read each row as a question to answer in your own environment and in vendor quotes, because the largest differences come from replica count, memory sizing and which support tier you buy.
| Cost driver | RabbitMQ | Redis |
|---|---|---|
| Replicas and quorum nodes | Quorum queues replicate through Raft, so each queue needs a majority of replicas online. Plan node count and disk for the replication factor you choose. | Sentinel needs at least three Sentinel instances for a robust deployment, plus replicas. These are extra processes and hosts even when the data set is small. |
| Memory and backlog sizing | Queue backlog is written to disk, so cost tracks storage and I/O more than RAM. Confirm disk sizing against your peak backlog. | Redis keeps data in memory, so cost tracks RAM against the largest queue backlog and any retained stream history. Size for peak backlog, not average load. |
| Operator skills | Staff need to run clustering, quorum queue health, and protocol plugins. Ask whether your team already runs RabbitMQ or would need training. | Staff need Sentinel or cluster failover, memory eviction and persistence settings. Teams that already run Redis for cache may need fewer new skills. |
| Support tier | Community support has defined end dates, and longer lifecycle comes only with a commercial support license. Confirm the commercial terms and dates on the Broadcom support portal. | Redis Software is self-managed and adds compliance and resiliency features, and Redis Cloud is managed. Neither is open source, so ask Redis Ltd. for licensing and support terms. |
| Upgrade cadence | Community support for each release line ends on a published date, so plan upgrades inside that window. Confirm the next upgrade path for your current line. | Redis 8 licensing and release lines changed over time, and some Redis 7 lines have different license terms. Check which license applies to the exact version you deploy. |
| Second system if Redis stays for cache | Running RabbitMQ beside an existing Redis cache adds a separate cluster, monitoring, backups and upgrades. Ask whether one platform can cover both needs. | If Redis is kept for cache, queue traffic on the same instances shares memory and failure domains with cache. A dedicated broker separates these costs but adds a second system to run. |
Moving queue traffic from Redis to RabbitMQ in order
This sequence moves queue traffic off Redis lists, Pub/Sub or Streams onto RabbitMQ without losing messages in flight, and ends with a documented retirement of the old path. Each step closes with a check the owning team can verify.
Inventory every producer and consumer
Platform engineering and the owning application teams list every service that pushes to or pulls from Redis, including scripts, cron jobs and batch workers. For each one, record the Redis structure it uses (list, Pub/Sub channel or Stream with consumer groups), the message volume it handles, and any code that depends on Redis-specific behavior such as blocking pops or stream IDs. The step is done when every queue has a named owner and no client is unaccounted for in network or configuration review.
Define delivery and redelivery rules per queue
For each queue, the owning team decides whether the workload can tolerate loss, duplicate delivery or only ordered single processing. Redis Pub/Sub is at-most-once, so any channel that carries work must be redesigned before it moves. Document the acknowledgement mode, the maximum redelivery attempts, and the expected behavior when a consumer crashes mid-message. The step is done when a written rule exists for each queue and the security and data owners have signed off on any queue that carries regulated data.
Model exchanges, queues and bindings
Platform engineering designs the RabbitMQ topology: exchanges, routing keys, bindings and quorum queues for queues that need durability and replication. Decide early whether a workload needs a stream instead, since RabbitMQ streams suit high-throughput log-style consumption. Review the design with the consumer teams so that routing keys and queue names match what each consumer subscribes to. The step is done when a topology definition exists in version control and a test environment can declare it cleanly.
Rebuild the client and retry layer
Application teams replace Redis client calls with an AMQP client library and wire in the new acknowledgement logic, retry policy, dead-letter exchange and alerting defined in the earlier steps. Message payloads and idempotency checks typically carry over, but the surrounding code does not, so teams should expect to rewrite connection handling and error paths. The step is done when each consumer passes integration tests against a non-production RabbitMQ cluster, including forced consumer failure and redelivery.
Run both paths in parallel
Teams run dual publishing, where producers write to Redis and RabbitMQ at once, or move consumers one queue at a time with a cutover switch. Dual publishing keeps a rollback path but doubles write load, so confirm capacity with the platform team before enabling it. Compare message counts, processing results and error rates between the two paths for a period the owners agree on in advance. The step is done when the outputs match and the on-call team has run at least one planned failover test on the new broker.
Drain the Redis queues
Once a consumer is switched, the team stops new publishes to the Redis structure and lets existing entries finish processing. For lists, confirm the length reaches zero. For Streams, confirm that every consumer group has acknowledged its pending entries, and inspect the pending entries list for stuck messages. Any messages that cannot be processed are moved to a reviewed holding queue rather than dropped. The step is done when the Redis key has no unprocessed entries and the owner signs off on the drain report.
Retire the old path and document the result
Remove the Redis publishing code, consumer connections and dual-write logic, then delete the unused keys and update the architecture diagrams and runbooks. Record the final topology, the acknowledgement rules and the monitoring dashboards in the team's documentation, along with who owns each queue. Keep the Redis instance itself only for the uses that still need it, such as caching. The step is done when a configuration search finds no active Redis queue references and the runbook has been reviewed by the operations team.
Where a dedicated broker pays off for queue traffic
A dedicated broker such as RabbitMQ pays off when losing a job is expensive and the team needs guarantees Redis does not give by default. The core test is what happens to a message when a consumer fails mid-task. RabbitMQ consumers acknowledge deliveries explicitly, unacknowledged messages are redelivered, and dead-lettering moves repeatedly failing messages aside for inspection. Redis Pub/Sub is at-most-once, so a message is gone if the subscriber cannot handle it. Redis Streams with consumer groups give at-least-once behavior, but your application must build the acknowledgement, retry, claim and dead-letter handling itself. If that logic is already built and tested, the gap narrows. If it is not, a broker that provides it out of the box shifts that work off your team. Check whether your queues carry payments, provisioning or notifications that must not silently disappear, and whether your current code handles redelivery of duplicates.
A broker also pays off when several protocols or languages must share one queue layer. RabbitMQ was originally built around AMQP 0-9-1, AMQP 1.0 became a core protocol in RabbitMQ 4.0, and MQTT and STOMP are available through plugins. Redis clients are available for most languages, but Redis does not speak these messaging protocols, so each new producer or consumer type means another bespoke integration. Isolation matters too. When queue bursts compete with cache reads for memory and CPU on the same Redis instance, cache latency can degrade during backlog spikes. Moving queue traffic to its own broker, with its own resource limits and monitoring, separates those failure modes. Confirm your peak queue depth and memory headroom before deciding whether that separation is needed.
Keeping Redis is the right answer for small, non-critical queues that sit beside a cache, such as cache invalidation hints, background cache refreshes or throttled notifications where a dropped message is harmless. Adding a broker is not free: it is one more stateful component to deploy, patch, back up, monitor and secure, and RabbitMQ quorum queues need replicated nodes to deliver their durability. Ask your platform team who will own the broker's upgrades, given that RabbitMQ 4.2 community support ended on July 31, 2026, and check RabbitMQ release information before choosing a line. A reasonable first step is to move only the queues that fail the loss test, and leave the rest on Redis until you have measured the operating cost.
Questions teams ask before moving queues off Redis
How much effort does moving queue traffic from Redis to RabbitMQ take?
Effort depends mostly on how many queues, consumers and producers depend on Redis-specific behavior, not on the broker itself. The main drivers are the delivery semantics your code assumes, the number of Redis commands in use (lists with BRPOP, Pub/Sub channels or Streams with consumer groups), how much retry and dead-letter logic you already built around Redis, and how many services must change at once. Teams with a small set of queues and idempotent consumers usually have the smallest surface to change. Ask any partner to inventory each queue, its producers, consumers and expected delivery guarantee before agreeing a scope, because that inventory is what turns an effort question into a written estimate.
Can our internal team migrate queues without outside help?
Often yes, for a bounded set of queues, if the team already runs message infrastructure and has the time to test failure cases. The harder part is usually not the client library change but proving behavior under broker restarts, node failures and consumer crashes, which requires a test environment that matches production topology. Outside help is most useful for design decisions about queue types, acknowledgement and retry patterns, and for running the cutover with a rollback plan. Be honest about capacity: a migration competes with the team's existing work, so a fixed-scope plan with written deliverables is easier to staff than an open-ended one.
What does our team need to provide for a migration?
A migration needs named owners for each queue and consumer, access to the staging and production environments that run them, and a clear list of message contracts that must not change. Plan for someone who can operate the new broker after handover, including monitoring, backup, upgrades and on-call runbooks. You will also need a decision on where RabbitMQ runs, whether in your cloud account, a data center or Kubernetes, because that shapes networking, storage and the operator you choose. Document current throughput, message sizes and retention needs before work starts, since those numbers drive sizing for the new cluster.
Can RabbitMQ replace Redis Pub/Sub one for one?
Not without changes. Redis Pub/Sub is fire-and-forget with at-most-once delivery, so a subscriber that is offline or fails to process a message loses it. RabbitMQ queues hold messages until they are acknowledged, which changes how consumers are written, how subscriptions are created and how backlog behaves. Pub/Sub fan-out maps more naturally to RabbitMQ exchanges bound to queues, but each subscriber needs its own queue to receive a copy. Treat the move as a redesign of the messaging contract, and test duplicate handling, since acknowledged-after-processing delivery can redeliver messages after failures.
Is Redis Streams good enough to keep as our queue?
Redis Streams can be sufficient when your queue is an append-only log, your consumers use consumer groups, and your team is comfortable operating Redis persistence and failover. Streams persist messages and support at-least-once delivery, which is a stronger guarantee than Pub/Sub. The questions to answer are how you handle failed or unacknowledged entries, how you size memory as streams grow, how Sentinel or your high availability design fails over, and whether you need protocols or routing that Streams does not provide. If your needs stay within those limits, the case for a dedicated broker is weaker and should be justified by the operating and routing requirements you actually have.
What does the Redis licensing change mean for our Redis version?
It depends on the version you run and how you distribute or host it. Redis 7.2.x and earlier remain under BSD-3-Clause, and per the Redis licenses FAQ, teams moving from 7.2 or earlier with unmodified Redis artifacts see no impact. Redis 7.4.x to 7.8.x are under the dual RSALv2 or SSPLv1 license, neither OSI-approved. Redis 8.0 and later can be used under a license of your choice among RSALv2, SSPLv1 and AGPLv3. If you modify Redis and offer it as a network service, the modified source obligations apply, so have counsel confirm your position against the Redis licenses page before deciding which version to keep.
What should a quote for this migration include?
A written quote should list the queues in scope, each producer and consumer, the target broker topology and where it runs, the delivery and acknowledgement design for each queue, test scenarios including broker failure and redelivery, cutover and rollback steps, documentation, and handover training. It should also state what is one-time (design, migration, testing) and what recurs (support, upgrades, monitoring). For RabbitMQ, ask which release line is proposed and its support window, since community support differs from commercial support dates. Ask whether any Redis licensing review is included. DeployOpen plans, implements and documents these engagements under fixed scope, with the scope agreed in writing before work starts.
How DeployOpen helps choose, implement or migrate a queue layer
DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure, so a queue layer is designed around your cloud accounts, data centers or air-gapped network. Engagements are fixed-scope, with scope and deliverables agreed in writing before work starts.
How we scope
- Inventory which Redis lists, Pub/Sub channels and Streams carry work today, and who consumes them.
- Document delivery expectations per flow, including whether message loss or duplicate processing is acceptable.
- Agree in writing which queues move to RabbitMQ, which stay on Redis, and what the migration excludes.
How we build
- Design quorum queues for flows that need durable, replicated delivery, and confirm the Raft-based setup against your topology.
- Build producer and consumer changes, retry and dead-letter handling, and idempotency checks where at-least-once delivery applies.
- Test failover, node loss and message replay in your environment before any production cutover.
How we hand over
- Deliver runbooks covering queue declarations, monitoring, capacity checks and the upgrade path for your chosen RabbitMQ release line.
- Document the licensing and support position you chose, including community support dates and any commercial support decision.
- Walk operations and development teams through the handover so they can run, troubleshoot and extend the queue layer.
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer after handover.
- Agree in the written scope who patches the broker, who tests upgrades and who owns on-call escalation.
- Ask for the retainer terms, response expectations and upgrade scope in writing before you sign.

