The choice between real-time and batch integration is not purely a technical decision. It determines what happens when an order changes status, inventory runs out, an invoice is corrected, or customer data reaches another system late. A common mistake is assuming that real time is always better. In practice, it adds dependencies, failure points, and operational requirements that are only worthwhile when the cost of waiting exceeds that complexity.
The alternative is not simply running an overnight export without a design. A batch process can be safe, efficient, and sufficient, but it needs explicit update windows, integrity checks, and recovery mechanisms. The right decision starts with the use case: what data is moving, who acts on it, how much harm a delay causes, and what happens if the message arrives twice or does not arrive at all.
The decisive question: what happens if data arrives late, duplicated, or not at all?

Before discussing APIs, webhooks, queues, or execution frequency, describe the impact of a failure in business and operational terms. Data is not critical because it belongs to a CRM, ERP, or ecommerce platform; it is critical because of the decision or action it enables.
- It arrives late: determine the maximum acceptable delay. It may be seconds to block a transaction, minutes to alert a team, or hours to consolidate reports.
- It arrives twice: assess whether the recipient could create two orders, repeat a charge, send duplicate communications, or simply update the same record.
- It does not arrive: identify whether there is a manual route, an alternative query, or a later reconciliation process that prevents business loss.
- It arrives with stale data: define which system has authority over each field and how conflicts between updates are resolved.
It is useful to classify each flow by purpose. A query integration displays information to guide a person; a decision integration supplies rules, segments, or priorities; an execution integration creates an irreversible action, such as reserving inventory or issuing an invoice; and a communication integration triggers messages to customers or teams. Execution flows usually require greater immediacy and stronger protection against duplicates. Query and analytics flows can generally tolerate deferred processing.
Real time is justified by a specific consequence of delay, not by the expectation that every system should always reflect the same information.
When real time is justified and what it requires
A real-time pattern is reasonable when one system must react immediately for another to complete an operation correctly. Examples include validating availability before confirming an order, a status change that enables shipment, or an operational alert that prevents a more serious incident.
There is an important difference between “real time” and “fast.” A synchronous call can respond within a user interaction, but it also blocks the process if the remote system is unavailable. An asynchronous event emitted when a change occurs decouples the sender, although the consumer may process it seconds later. Both patterns can meet a low-latency need, but they carry different risks.
Signs that real time adds value
- A delay causes a failed sale, an invalid operation, or immediate operational exposure.
- The data is part of an authorization, reservation, allocation, or fraud-prevention rule.
- There is a clear owner to manage incidents outside business hours when the flow is critical.
- The systems can support retries, consumption limits, and demand spikes without blocking essential processes.
- The cost of maintaining observability and recovery is lower than the cost of a delay.
Adopting this approach involves non-negotiable requirements: timeouts, retries with progressive backoff, a queue or equivalent mechanism for transient failures, error monitoring, and actionable alerts. It also requires defining what the application does when the dependency does not respond. The answer cannot simply be displaying a technical error: it may mean holding the operation, allowing it subject to review, saving a pending request, or applying a temporary rule.
The main risk is building a long synchronous chain: ecommerce queries inventory, inventory queries the ERP, and the ERP depends on another service. Every link increases latency and the likelihood of unavailability. To reduce this risk, limit online dependencies to essential information and process everything else asynchronously.
When batch processes are safer and more efficient
A batch process collects changes and transfers them on a defined schedule: hourly, several times a day, or at the end of an operating window. It is appropriate when the recipient does not need to act immediately and can work with a data view that has some delay.
This pattern is often a good fit for catalog synchronization, reporting, financial consolidation, segment updates, historical imports, or the exchange of large volumes. It makes it possible to control load on systems with limited capacity, run validations before publishing data, and concentrate monitoring in known windows.
Signs that a batch is sufficient
- The receiving user or process can operate with data that is several hours old without material consequences.
- Volume is high, and an individual transmission for every change would create unnecessary load.
- Updates are consumed for analysis, planning, or non-urgent internal tasks.
- Information must be validated, enriched, or grouped before it becomes available.
- The team has a clear window to review exceptions and reprocess data.
The typical risk is not latency but a false sense of control. A poorly designed batch can overwrite recent changes, omit records because of an incorrect timestamp, or fail halfway through execution without making it clear which portion was applied. Therefore, avoid basing extraction solely on “modified in the last hour” if clocks, time zones, or retries are not controlled. Use persistent cursors, overlapping intervals with deduplication, or change records where possible.
In addition, every execution should produce a verifiable result: how many records were read, created, updated, rejected, or left pending. If these counts cannot be compared with the source, reconciliation will be slow when a discrepancy appears.
A decision model with five practical variables
For each flow, rate these variables as low, medium, or high. The combination helps avoid decisions driven by technology preferences.
- Delay tolerance: how long can pass before the data loses usefulness? If it is seconds or minutes and affects execution, favor an immediate event or an online query.
- Volume and variability: how many changes occur, and are there peaks? A large, predictable flow often benefits from batches; one with few critical events can be processed immediately.
- Operational dependency: must the sending system wait for the recipient to continue? The greater the dependency, the more necessary it is to decouple through events and asynchronous processing.
- Reversibility: can the outcome be corrected without significant impact? If an action is irreversible or costly to undo, prioritize validation, idempotency, and traceability, even if latency increases.
- Failure cost: include lost revenue, process non-compliance, manual effort, and customer trust. A high cost requires better controls, not necessarily a synchronous call.
A useful rule is this: if urgency is high but dependency is also high, use an immediate event and process it asynchronously. This records the change without forcing the source system to depend on the destination’s instant availability. If urgency is low and volume is high, a batch with reconciliation is usually the simplest and most robust option.
Hybrid patterns to balance speed and control
Many mature integrations combine both approaches. The goal is not to choose a single label, but to assign the right pattern to each part of the flow.
- Immediate event and deferred processing: when an order is created, an event is published; secondary systems consume it from a queue without blocking confirmation.
- Immediate query and batch replication: the application queries the authoritative source for a critical decision while maintaining an updated local copy for searches and analysis.
- Frequent batch plus reconciliation: changes are synchronized at a set interval, and a daily check detects missing items, status differences, or partial errors.
- Urgent update by exception: the catalog moves in batches, but a significant availability change generates a priority update.
For inventory, for example, not all data requires the same schedule. The reservation linked to a purchase may require immediate confirmation, while updates to product descriptions or attributes can wait. In invoicing, issuance may require strict rules and validations, while export for financial analysis can run in a scheduled window. In customer data, an opt-out from communications should propagate as a priority if it prevents unwanted messages, while profile field consolidation can be deferred.
Common controls and incident recovery
Regardless of the pattern, reliability depends on explicit controls. Each entity should have a stable identifier, and every operation should have a message or request identifier. The recipient must apply idempotency: processing the same instruction twice should produce the same result as processing it once.
- Define the system of record for each entity and field to prevent silent conflicts.
- Keep processing states: received, validated, applied, rejected, and pending retry.
- Record the source, destination, date, schema version, and error reason for every exception.
- Separate transient errors, such as a temporary outage, from permanent errors, such as invalid data.
- Set up a failed-message queue or review mechanism so items are not lost after retries are exhausted.
- Design schema changes to remain compatible during a transition, and provide notice before removing fields or changing meanings.
Alerts should point to a specific action: a growing backlog, the maximum age of unprocessed items, the rejection rate, or a difference between source and destination counts. An alert for every individual error creates noise; an alert for sustained deterioration makes prioritization possible.
Checklist for agreeing on the decision before building

- Describe the business action that depends on the data and the maximum acceptable delay.
- Document what happens in the event of delay, duplication, absence, and version conflicts.
- Identify the system of record and shared identifiers.
- Estimate average volume, peaks, and source and destination limits.
- Decide whether the sender can continue when the recipient is down.
- Define retries, idempotency, exception handling, and reconciliation.
- Assign monitoring owners and a recovery procedure.
- Test outages, resends, partial execution, and schema changes before activating the flow.
The strongest decision does not pursue instant synchronization across every system. It ensures that each piece of data arrives when it needs to arrive, with a level of control proportionate to its impact and predictable recovery when real-world operations depart from the ideal scenario.
