Chapter 25

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.

JSON
{
  "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.

Links