A feature needs real-time processing only when the cost of a delayed decision exceeds the extra engineering and operational cost of streaming infrastructure. Most features don't clear that bar. Batch processing — running work in scheduled chunks — is cheaper, simpler to debug, and correct for the majority of reporting, analytics, and notification use cases.
Quick Answer: Default to batch. Reach for real-time only when a delay of minutes causes measurable harm — fraud losses, safety incidents, or a broken user-facing promise. Everything else, including most dashboards and "instant" nice-to-haves, can run on a schedule.
What's the actual difference between real-time and batch processing?
Batch processing collects data over a window — an hour, a day, a month — and processes it all at once on a schedule. Real-time (streaming) processing handles each event individually, the moment it arrives, with results available in seconds or less.
The distinction isn't about how "modern" the architecture looks. It's about when the processing happens relative to when the event occurred, and how much that gap costs. A nightly job that runs at 2 a.m. and a Kafka consumer processing events as they land are solving the same problem — turning raw events into usable output — on different clocks.
Three practical differences follow from that clock difference:
- Latency: batch has a floor set by the schedule interval (an hourly job is never faster than an hour); streaming has a floor set by network and processing time (typically sub-second to a few seconds).
- Failure blast radius: a broken batch job delays a report; a broken streaming pipeline can silently drop or duplicate individual events in production, in real time, with no batch window to catch and reprocess the mistake before anyone notices.
- Cost shape: batch compute is provisioned for a burst and idles the rest of the time; streaming infrastructure (message brokers, stream processors, always-on consumers) runs continuously, so you pay for capacity around the clock even during quiet periods.
Why this decision keeps getting made by default instead of on purpose
Teams often reach for real-time because it sounds more impressive in a roadmap review, not because a delay analysis justified it. That's backwards. Real-time is a requirement with a price, not a default — it should be the conclusion of a cost-of-delay argument, never the starting assumption. Treating "real-time" as inherently superior is the same category error as assuming an API is always the right integration pattern regardless of what's actually needed on the other end.
When does a feature genuinely need real-time processing?
A feature needs real-time processing when the value of information decays fast enough that a delayed answer is materially worse than no answer, or when a human or system is blocked waiting on it. Fraud detection, safety-critical alerts, live pricing, and operational monitoring dashboards for active incidents are the clearest cases.
Fraud detection is the canonical real-time case. A stolen card being used at three merchants in two cities within ten minutes is a solvable problem only if the block happens before the fourth transaction clears. Run that same analysis in a nightly batch job and you've produced an accurate, well-documented, completely useless report — the money is already gone. Visa and Mastercard's real-time authorization networks, and the streaming fraud models built on top of them, exist precisely because the cost of a delayed decision (fraud loss, chargebacks) dwarfs the cost of running always-on infrastructure.
Other legitimate real-time candidates:
- Live inventory/pricing for marketplaces where overselling or stale prices create direct financial exposure.
- Safety and operations alerting — equipment anomalies, security events, service outages — where minutes matter for containment.
- In-session personalization where the next screen depends on an action the user just took.
- Collaborative editing and presence (who's online, live cursors) where the entire product experience is the immediacy.
None of these are "real-time because users like fast things." Each has a specific, nameable cost that accrues while data sits unprocessed.
The tell: ask what happens in the gap
A useful gut-check before invoking any monitoring or alerting tooling: what concretely happens during the delay window, and who is harmed by it? If the honest answer is "nothing, someone reads the number a bit later," you don't have a real-time requirement — you have a latency preference, and preferences should lose to cost.
When is batch processing the right — and cheaper — choice?
Batch is the right choice whenever the information's value doesn't meaningfully decay within the batch window, which covers most internal reporting, billing, analytics, and non-urgent notifications. A monthly usage report, a weekly cohort analysis, or a nightly data warehouse refresh loses essentially nothing by running once a day instead of continuously.
The monthly report is the canonical batch case. Finance doesn't need subscription revenue recalculated every time a transaction posts — it needs a correct number by the close date. Running that aggregation once, on a schedule, against a stable snapshot is simpler to reason about, cheaper to run, and dramatically easier to reconcile and audit than trying to maintain a live running total across every edge case (refunds, currency conversion, proration) in real time.
Batch also wins on three engineering dimensions PMs frequently under-weight:
| Dimension | Batch | Real-time / streaming |
|---|---|---|
| Typical latency | Minutes to a day (schedule-bound) | Sub-second to a few seconds |
| Infrastructure | Scheduled jobs, data warehouse, ETL/ELT tools | Message broker (Kafka/Kinesis), stream processor, always-on consumers |
| Debuggability | Rerun the job against the same input; easy to reproduce | Harder to reproduce — state and ordering depend on timing |
| Failure mode | Delayed output; job retried or backfilled | Dropped/duplicated events; requires idempotency and dead-letter handling |
| Cost profile | Pay for burst compute, often serverless/scheduled | Pay for continuous uptime, regardless of event volume |
| Team skill needed | SQL, orchestration tools (Airflow, dbt, cron) | Distributed systems, stream semantics, backpressure handling |
| Best-fit examples | Monthly billing, weekly cohort reports, nightly sync | Fraud checks, live pricing, incident alerting |
The table's core takeaway: batch trades latency for simplicity and cost predictability, while streaming buys speed at the price of continuous infrastructure and much harder failure modes. Most roadmaps have far more batch-shaped work than they admit.
Batch is also the safer default while you're still learning the domain
Early in a feature's life, you often don't yet know the exact aggregation logic, edge cases, or business rules. Batch pipelines are cheap to rerun and reprocess once you find a bug — you fix the logic and replay history. Streaming pipelines are much less forgiving of a logic change: reprocessing already-emitted events, or correcting a bad decision the fraud model already acted on, is a genuinely hard problem. Prefer batch until the domain logic has stabilized, then consider promoting only the pieces that have a demonstrated delay cost.
What's the decision heuristic for choosing real-time vs batch?
The heuristic is a cost-of-delay comparison: estimate what a delayed decision costs per unit of time, estimate what real-time infrastructure costs to build and run, and pick whichever number is smaller. This reframes the question from a technology preference into a spreadsheet.
A simple version, adapted from the cost-of-delay thinking popularized in Lean and Agile economics (notably Donald Reinertsen's work on prioritizing under queueing and delay costs) and echoed in incident-response literature on Mean Time to Detect/Resolve:
- Quantify the delay cost. For the worst realistic delay (batch window length), what is lost — money, safety, trust, a broken user promise? Put a number or a severity tier on it.
- Quantify the real-time cost. Streaming infrastructure, on-call burden for a now-always-on system, and the engineering cost of handling out-of-order events and duplicates.
- Compare the two, not in the abstract but at your actual event volume and actual batch window. A daily batch job's "delay" is trivial for a monthly report and severe for fraud; the same technology choice can be right in one context and wrong in the next.
- Check for a middle option before committing to either extreme. Micro-batching (processing every 1-5 minutes instead of continuously or once a day) often captures most of the delay-cost reduction at a fraction of full streaming's operational cost.
- Re-run the calculation when volume or stakes change. A feature that was safely batch at 10,000 events/day may cross the threshold at 10 million/day, or when it starts gating a payment decision instead of an internal report.
Rule of thumb: if you can't name a specific harm that occurs during the delay window, you don't have a real-time requirement yet — you have a hunch, and hunches shouldn't drive infrastructure decisions.
This is the same discipline behind good technical-debt tradeoffs: the question is never "which is better," it's "what does the delay actually cost, here, at this scale, right now."
Watch for the false dichotomy
Real-time and batch aren't the only two settings. Near-real-time (micro-batch), event-driven with batched downstream processing, and on-demand pull (compute only when a user actually asks) are all legitimate middle options. A notification feature, for example, might use real-time event capture but batch the actual send into 5-minute digests — cutting infrastructure cost and notification fatigue simultaneously, at a delay cost close to zero for most notification types.
How do push and pull models interact with the real-time/batch decision?
The push-vs-pull choice is a second, related axis: push systems send data to consumers as it becomes available (webhooks, streaming, notifications); pull systems have consumers request data on their own schedule (polling, on-demand queries, scheduled reports). Real-time is almost always paired with push; batch is almost always paired with pull, but not by strict requirement.
You can pull frequently enough to approximate real-time (aggressive polling), and you can push batched summaries (a daily digest email is a push of batch output). Keep the two axes separate when scoping a feature — conflating "real-time" with "push" leads teams to over-build streaming infrastructure for something that only needed more frequent polling. This same push/pull framing shows up whenever you're deciding how two systems should talk to each other, which is also the crux of scoping what an API actually needs to do for a given feature.
Seeing the feedback loop, not just the two options
Key Takeaways
- Real-time is a requirement with a price, not a default — justify it with a specific, named cost of delay before committing to streaming infrastructure.
- Batch wins on cost, debuggability, and reprocessing whenever the information's value doesn't decay within the batch window — most reporting, billing, and analytics features qualify.
- Fraud detection and monthly reporting are the clean poles: one has a per-minute cost of delay measured in real money, the other has essentially zero.
- Run the cost-of-delay calculation at your actual volume and window, not in the abstract — the right answer shifts as scale and stakes change.
- Micro-batching and other middle options often capture most of real-time's benefit at a fraction of its operational cost — check for them before committing to either extreme.
- Push/pull and real-time/batch are separate axes — don't assume a real-time feature must use push, or that batch must use pull.
- The tradeoffs behave as a system with feedback and delay, which is easier to reason about visualized as a causal loop than buried in a single latency requirement.
Frequently Asked Questions
Is real-time processing always more expensive than batch?
Yes, almost always, because streaming infrastructure runs continuously while batch compute idles between scheduled runs. The gap narrows at very high sustained event volumes, where batch's burst-provisioning advantage shrinks, but for typical PM-scoped features real-time carries a persistent operational cost batch doesn't.
Can I start with batch and move to real-time later?
Yes, and it's often the right sequencing — batch lets you validate the business logic cheaply before investing in streaming infrastructure. Migrating later mainly requires isolating the processing logic from the scheduling mechanism up front, so the "what" doesn't need a rewrite when the "when" changes.
What's the difference between real-time and near-real-time (streaming vs micro-batch)?
True real-time processes each event within seconds of arrival using continuous stream processing; near-real-time (micro-batch) processes small batches every few seconds to minutes, trading a small amount of latency for meaningfully simpler infrastructure. Most features described internally as "needing real-time" are actually satisfied by near-real-time.
How do I know if my notification feature needs real-time delivery?
Ask what a 5-15 minute delay would cost the user in that specific moment — a security alert or a time-sensitive transactional confirmation usually can't tolerate it, but most digest-style or informational notifications can, and batching them also reduces notification fatigue. If you can't name a concrete harm from the delay, batch it.
Does real-time vs batch matter for analytics dashboards specifically?
Rarely, because most analytics consumption is decision-support, not action-triggering, and a decision made from yesterday's numbers is usually as good as one made from this second's numbers. Reserve real-time dashboards for active-incident monitoring or live-operations views where someone is watching the screen to act within minutes, not for standard business reporting.
For the broader technical vocabulary this decision sits inside — including how these tradeoffs connect to system architecture and data flow — see the technical foundations complete guide, and for the underlying model of how requests and data move between systems in the first place, how the web works: a mental model for PMs. If you're mapping a data feature's requirements against real user needs before deciding on its processing model, the complete guide to Jobs to Be Done and mapping the customer journey are useful starting points for grounding the "when does delay actually hurt" question in real user moments rather than internal debate.