Delegate a Task Package, Not a Topic
You can't toss a topic to a narrow agent - only a package. The phrase "study the competitors" breeds duplication and gaps. Good delegation fixes the objective, the boundary, the inputs, the tools, the evidence, the format, the budget, and the stop condition.
{
"task_id": "market-pricing",
"objective": "Compare the public pricing of the three named products",
"in_scope": ["current prices", "plan limits", "check date"],
"out_of_scope": ["reviews", "quality assessment", "other products"],
"inputs": { "products": ["A", "B", "C"], "region": "EU" },
"tools": ["web_search", "web_open"],
"source_policy": "official pricing pages; secondary only if official missing",
"output_schema": "PricingComparisonV2",
"budget": { "tool_calls": 12, "deadline_ms": 90000 },
"stop_condition": "each product has a price + source or status=not_found"
}It is precisely because of vague delegation that synthesis turns into gluing. Let's break down the failures and their causes.
- All workers do the same thing. Cause - scope set by topic. Cure - non-overlapping deliverables.
- The answers can't be compared. Cause - no common schema. Cure - shared fields, units, and an evidence contract.
- The orchestrator picks the nice-looking text. Cause - no source quality policy. Cure - comparison of provenance and dates.
- An endless second round. Cause - no stop condition. Cure - a gap budget and an explicit status=not_found.
And about parallelism separately.
Parallelism requires independence. Google ADK stresses: parallel workers don't exchange history during execution, and the order of results may be non-deterministic. Don't design hidden dependencies between branches.