Latency needs, cost, complexity, data freshness SLAs, and correctness guarantees.
How to answer it
Ask how quickly the consumer of the data needs to act on it, and what a wrong or late answer costs. Everything else follows.
Batch when:
The decision happens on a schedule: daily reports, monthly billing, model retraining.
Correctness matters more than freshness: finance, anything reconciled, anything with late-arriving data that needs a settled view.
The computation is heavy and benefits from seeing the whole window at once: joins across large tables, deduplication, aggregations over a day.
Streaming when:
Someone or something acts within seconds or minutes: fraud blocking, alerting, live personalisation, operational dashboards for on-call teams.
The event itself triggers work: an order placed starts fulfilment.
The source is a stream anyway and buffering it only adds delay.
The middle, which is most cases: micro-batch every few minutes gives near-real-time freshness with batch semantics, and is much simpler to operate than true streaming.
The costs to state: streaming needs exactly-once or idempotent consumers, state management, handling of out-of-order and late events with watermarks, and 24/7 operation. A batch job that fails re-runs in the morning; a stream that falls behind needs someone now.
Worked line: "The dashboard refreshes hourly and the analysts look at it twice a day; that is batch, hourly. The fraud check has to answer before the payment completes; that is streaming, and it is a different system with a different team on call."
What they are checking: that you decide from the consumer's latency need and name the operational cost of streaming.
Common mistake: "streaming is more modern". It is more expensive, and most data has no one waiting for it.