Task decomposition: CCAR-F task statement 1.6
CCAR-F · Agentic Architecture & Orchestration (27% of the exam)
Task statement 1.6 sits in Agentic Architecture & Orchestration, 27% of the CCAR-F exam. It tests one choice: when to break work into a fixed sequence of steps decided in advance, and when to let the plan grow from what each step finds.
What the official guide covers
The Claude Certified Architect Foundations exam guide (version 1.0, effective July 2026) lists this under task statement 1.6, "Design task decomposition strategies for complex workflows":
| Knowledge of | Skills in |
|---|---|
| When to use fixed sequential pipelines (prompt chaining) and when to use dynamic decomposition that adapts to what is found | Choosing prompt chaining for predictable reviews with several aspects, and dynamic decomposition for open-ended investigation |
| Prompt chaining that breaks a review into steps, such as analysing each file on its own and then running a cross-file integration pass | Splitting large code reviews into per-file passes plus a separate cross-file pass, so attention is not spread too thin |
| The value of adaptive plans that create subtasks based on what each step discovers | Breaking open tasks (such as "add comprehensive tests to a legacy codebase") into: map the structure, find the high-impact areas, then follow a prioritised plan that changes as dependencies appear |
Two ways to decompose a task
Prompt chaining splits the work into steps you define before it starts. Each step is a separate call to Claude with a narrow job, and the output of one step becomes input to the next. Your code controls the order. Anthropic's "Building effective agents" describes it as suited to tasks that break cleanly into fixed subtasks, trading some latency for accuracy because each call is simpler. You can add checks between steps (Anthropic calls them gates) to stop the chain if a step's output is wrong.
Dynamic decomposition decides the subtasks while the work is running. Claude, often as an orchestrator, looks at the input and at each result, then decides what to do next. The subtasks are not known in advance. This is the orchestrator-workers pattern: the orchestrator splits the task based on the specific input and assigns the parts to workers.
| Prompt chaining | Dynamic decomposition | |
|---|---|---|
| Who decides the steps | Your code, before the run | Claude, during the run |
| Best for | Predictable work with known aspects: reviews, checks, document pipelines | Open-ended investigation where the next step depends on what was found |
| Strength | Consistent, easy to test and log | Adapts to surprises and dependencies |
| Risk | Cannot react to something unexpected | Can drift or miss areas without clear goals |
| Example | Check every invoice for the same four rules | Find why a legacy service fails under load |
Splitting a large code review
Reviewing many files in one request spreads Claude's attention across all of them. Some files get detailed feedback, others get little, and the same pattern can be flagged in one file and passed in another. The fix the guide names is a chain of focused passes:
- Per-file pass. Review each file on its own for local problems: logic errors, naming, error handling.
- Integration pass. Review how the files work together: data passed between modules, changed interfaces, calls that no longer match.
import anthropic
client = anthropic.Anthropic()
def ask(prompt):
response = client.messages.create(
model=MODEL, max_tokens=2000,
messages=[{"role": "user", "content": prompt}],
)
return "".join(b.text for b in response.content if b.type == "text")
def review_pull_request(changed_files): # {path: diff text}
# Step 1: one focused review per file
local = {}
for path, diff in changed_files.items():
local[path] = ask(
f"Review only this file for local issues.\n<file path='{path}'>\n{diff}\n</file>"
)
# Step 2: one cross-file pass over interfaces and data flow
summaries = "\n".join(f"<file path='{p}'>{r}</file>" for p, r in local.items())
interfaces = "\n".join(extract_signatures(d) for d in changed_files.values()) # your helper
integration = ask(
"These files changed together. Check data flow and interfaces between them. "
"Report only cross-file issues.\n"
f"<per_file_reviews>\n{summaries}\n</per_file_reviews>\n"
f"<changed_interfaces>\n{interfaces}\n</changed_interfaces>"
)
return local, integration
Each per-file call has one job and one file, so every file gets the same depth. The integration call sees the per-file findings and the changed interfaces, not every line of every file. Because each step is a separate call, you can log, test and re-run any step on its own. The per-file calls are independent, so you can also run them at the same time.
Breaking down an open-ended task
"Add comprehensive tests to this legacy codebase" has no fixed list of steps. A plan written before anyone has read the code will be wrong. The guide's approach is:
- Map the structure. List modules, entry points and how they depend on each other.
- Find the high-impact areas. Code that is used a lot, changes often, handles money or data, or has no tests.
- Make a prioritised plan. Start with the highest-impact area.
- Adapt as you go. When writing tests for one module shows it depends on another untested module, add that to the plan and move it up if needed.
This is dynamic decomposition. Each step can create new subtasks. Claude can do this inside one agentic loop, or as an orchestrator that hands each area to a subagent (see 1.2 Coordinator and subagent patterns).
The workflow shapes behind decomposition
Prompt chaining and orchestrator-workers are two of five patterns in Anthropic's "Building effective agents". Exam options often describe one of the others without naming it:
| Pattern | Shape | Use it when | Example |
|---|---|---|---|
| Prompt chaining | Each call takes the previous call's output | Stages are fixed and each has a clear output | Extract clauses, then classify each by risk, then write the memo |
| Routing | A first call classifies the input and sends it to one specialised path | Inputs come in distinct kinds that need different handling | Billing tickets to one prompt and tools, technical faults to another |
| Parallelization | Independent calls run at the same time and are combined | Subtasks do not depend on each other, or you want several attempts to compare | The per-file review passes above |
| Orchestrator-workers | Claude splits the task at run time and hands parts to workers | The subtasks depend on the input and cannot be listed in advance | Investigating why a service fails under load |
| Evaluator-optimizer | One call drafts, another grades against criteria, and the draft is revised | Quality can be checked against clear criteria | Generated code revised until the test suite passes |
The patterns combine. The code review above is a chain whose first step runs in parallel. When several outputs build on one shared step, such as one extraction feeding a staff notice, an FAQ and a board brief, check that step before you fan out; an error there is copied into every output.
Chaining also fixes a common prompt failure. When one long prompt asks Claude to write something and obey many rules at once, some rules get missed. Split it: one call writes the draft, a second call takes the draft and checks it against the rules one by one. Each call then has a single job.
Start with the simplest pattern that works
Anthropic's advice is to start with a single well-built call, move to a workflow when one call is not enough, and use an agent only when the steps cannot be written in advance. Five factors, checked in order, show where a task belongs: can you list the steps, what a wrong answer costs, whether someone must audit each step afterwards, how long the user can wait, and how many tokens each request can spend. Agents score worst on the last four, so they need a real reason.
A finance team built an open agent to handle expense claims because the work "felt varied". Six months later they read the logs: every run had followed one of three paths. A router with three chains would have done the same work, cost less, and given auditors a named step for every approval.
Choosing a pattern
| Situation | Choose | Why |
|---|---|---|
| Every item gets the same checks in the same order | Prompt chaining | Steps are known; consistency matters |
| A large pull request with many files | Per-file passes, then an integration pass | Even depth per file, plus cross-file checks |
| The next step depends on what the last one found | Dynamic decomposition | The plan cannot be written in advance |
| An open task on unfamiliar code | Map, prioritise, then adapt | Effort goes where impact is highest |
| You must inspect or log each intermediate output | Prompt chaining | Each step is a separate call you can check |
Rules that decide exam answers
- Predictable means chain. If the steps are the same every time, a fixed chain beats an open agent. It is more consistent and easier to test.
- Open-ended means adapt. If nobody can list the steps before the work starts, choose the option that maps first and lets the plan change.
- Many files means split passes. Uneven or contradictory review feedback across many files points to attention spread too thin. Per-file passes plus an integration pass is the fix; a bigger context window is not.
- Do not drop the integration pass. Per-file reviews alone miss problems between files. Keep a separate cross-file step.
- Prioritise by impact. For large open tasks, the right answer starts with the high-impact areas, not with alphabetical order or the easiest files.
- Start simple. If the runs of an existing agent always follow a few known paths, the better design is a router with fixed chains. If the work splits into independent sections, a parallel workflow beats an open agent.
Where it appears in the exam
Domain 1 is a primary domain in three of the six exam scenarios: Customer Support Resolution Agent, Multi-Agent Research System and Developer Productivity with Claude. Exploring an unfamiliar codebase and planning work on legacy systems fits the Developer Productivity scenario. Splitting research topics fits the Multi-Agent Research System scenario. Large code reviews also appear under task statement 4.6 on multi-pass review.
Two sample questions
These are original Timo practice questions. They are not official exam questions.
Build exercise
- Take a pull request that touches at least eight files. Review it once in a single request and save the output.
- Run the two-step chain above on the same pull request. Compare depth per file and look for contradictions between files in each version.
- Plant a bug that only shows across two files, such as a renamed field. Check that the integration pass finds it and the per-file passes do not.
- Point an agent at an unfamiliar repository with the goal "add tests where they matter most". Ask it to write its structure map and priority list to a file first, then watch whether it updates the list as it works.
Practise this topic
- Claude Certified Architect practice exam: free, 20 questions, no sign-up
- Claude Certified Architect hub
- CCAR-F study guide: all topics
- Same topic in another exam: CCDV-F Agent Patterns and Frameworks
- Previous topic: 1.5 Agent SDK hooks
- Next topic: 1.7 Session state, resumption and forking
Sources
- Claude Certified Architect Foundations Exam Guide, version 1.0, effective July 2026 (Anthropic), task statement 1.6
- Anthropic: Building effective agents
- Anthropic documentation: Prompting best practices
- Anthropic: How we built our multi-agent research system
By Amotion AI