CClaude Cert Prep
P117% of exam

CCAR-P Domain 1: Solution Design & Architecture

How to make architect-level design decisions for Claude systems at enterprise scale: agentic vs. deterministic, model-tier selection, terminal guarantees, and designing for failure.

12 min read Reviewed July 25, 2026
On this page

Domain 1 of the Claude Certified Architect – Professional (CCAR-P) exam carries roughly 17% of the weight and sets the tone for everything else: it is where you prove you can choose the right shape for a system before you write a line of prompt or wire up a tool. At the Foundations tier you learned that Claude can do a task; at the Professional tier you are expected to justify whether it should be an agent at all, which model tier each component runs on, and what happens when a step fails at three in the morning under production load.

This guide is an independent, unofficial study resource. It is not affiliated with, authorized by, or endorsed by Anthropic, and it reproduces no real exam items. Everything here is grounded in publicly documented Claude and Anthropic capabilities plus mainstream enterprise-architecture practice; verify specifics against docs.anthropic.com, docs.claude.com, and code.claude.com/docs as they evolve.

Frame every decision in this domain as a production trade-off. The exam rewards answers that name the cost of being wrong — latency budgets, blast radius, idempotency, escalation paths — over answers that simply pick the most capable model or the most autonomous design. An architect who reaches for an agent when a single call would do is as wrong as one who forces a deterministic pipeline onto a genuinely open-ended task.

Single call, workflow, or agent: pick the least autonomy that works

The first architectural fork is how much control you hand to the model. Three shapes sit on a spectrum of increasing autonomy and decreasing predictability: a single call (one request, one response — classification, extraction, summarization, a bounded Q&A), a deterministic workflow (your code owns the control flow and calls Claude at fixed steps, optionally with tools), and an agent (the model decides which tools to call and when, looping until it judges the task done).

A useful heuristic: if you can draw the control flow as a fixed flowchart in advance, you want a workflow, not an agent. If the path genuinely depends on what the model discovers mid-task — unknown number of steps, branching that can't be enumerated — that is where an agent earns its cost.

ShapeWho owns control flowUse when
Single callYour code (one shot)Bounded, well-specified task: classify, extract, summarize, translate, answer from provided context
Deterministic workflowYour code (fixed steps)Multi-step pipeline you can fully diagram in advance; each step is a call or tool invocation you orchestrate
AgentThe model (dynamic loop)Open-ended task where the path can't be pre-specified and depends on what the model finds as it goes

When an agent is actually justified: the four-part test

Because an agent is the most expensive and least predictable shape, an architect must be able to defend the choice. Run the decision through four gates — an agent is warranted only when all four point the same way:

  • Complexity — is the task genuinely multi-step and hard to fully specify up front? 'Turn this design doc into a merged PR' qualifies; 'extract the invoice total from this PDF' does not.
  • Value — does the outcome justify higher latency and token cost? Agents are worth it for high-value work, not for shaving seconds off a cheap lookup.
  • Viability — is Claude actually capable at this task type today? If the model can't reliably do the sub-tasks, an agent just fails more elaborately.
  • Cost of error — can mistakes be caught and recovered? Agents suit domains with tests, review gates, or rollback (code, research drafts). They are dangerous where an action is irreversible and unmonitored.

Cost of error deserves special weight at enterprise scale. An agent that can send customer emails, move money, or delete records without a gate is a liability regardless of how capable it is. The architect's job is to make the reversibility of each action an explicit design input, not an afterthought.

Single agent vs. coordinator: topology and decomposition

Once an agent is justified, the next decision is topology. A single agent holds all tools and context in one loop — simplest to build, reason about, and cache, and the right default. A coordinator / hub-and-spoke design has an orchestrator agent that delegates sub-tasks to specialized sub-agents, each with its own context window, tools, and often its own model tier.

Multi-agent shines when work fans out across independent items (review ten files in parallel, research five vendors) or when sub-tasks need genuinely different tool sets or personas. It costs you context isolation (sub-agents don't share conversation history — the coordinator must pass what they need explicitly), more moving parts, and harder end-to-end tracing.

  • Single agent — one loop, shared context, one model tier. Default choice; easiest to cache and audit.
  • Coordinator / hub-and-spoke — orchestrator delegates to sub-agents with isolated context. Use for parallel fan-out, heterogeneous tool sets, or per-sub-task model-tier optimization.
  • Keep delegation shallow — deep nesting of agents spawning agents multiplies cost and makes failures nearly impossible to trace. Most enterprise designs stay one level deep.

A subtle win of hub-and-spoke: it lets you run each spoke on the cheapest model tier that clears the sub-task's bar while the coordinator reasons on a stronger tier — a lever a single-agent design can't pull without invalidating its prompt cache mid-run.

Terminal guarantees, human-in-the-loop, and idempotency

An enterprise agent must never simply stop in an undefined state. Design every autonomous flow so that each unit of work reaches a terminal guarantee: it either resolves the task or escalates it — never silently abandons it. This 'resolve-or-escalate' invariant is what makes an agent safe to run unattended.

Human-in-the-loop (HITL) placement is an architectural decision, not a UI detail. Put the checkpoint immediately before any high-cost, hard-to-reverse action — sending external communications, financial transactions, destructive data operations. Gate those behind approval; let cheap, reversible, read-only actions run automatically. Placing the gate too early throttles throughput; placing it too late defeats its purpose.

Design for idempotency. At scale, retries are inevitable — network blips, timeouts, at-least-once delivery, and the model's own re-attempts all mean the same action can fire twice. Every side-effecting operation should carry an idempotency key so a duplicate invocation is a no-op, not a double charge or a duplicate email.

  • Assign a stable idempotency key per logical operation; dedupe on it server-side.
  • Make tool results safe to replay — a retried create_order with the same key returns the existing order, it does not create a second.
  • Return structured errors (is_error: true) rather than throwing away a failed step, so the agent can recover or escalate instead of looping blindly.
  • Bound autonomous loops with an explicit iteration/step ceiling so a stuck agent escalates rather than burning budget.

Model-tier selection per component: Opus, Sonnet, Haiku

A professional architect does not pick one model for the whole system — they pick a tier per component, matching capability to the sub-task's difficulty and the cost/latency budget. The current Claude tiers trade capability against price and speed roughly as follows (verify current model IDs and pricing at docs.claude.com):

TierBest forRelative cost / speed
Opus (e.g. Opus 4.8)Hardest reasoning, long-horizon agentic loops, the coordinator role, high cost-of-error stepsHighest cost, most capable
Sonnet (e.g. Sonnet 5)Near-Opus quality on coding and agentic work at lower cost — the workhorse for most production componentsMid cost, strong balance
Haiku (e.g. Haiku 4.5)High-volume, latency-sensitive, well-scoped sub-tasks: classification, routing, extraction, simple tool callsLowest cost, fastest

In a hub-and-spoke design this becomes concrete: run the coordinator on Opus for planning and judgment, run a high-throughput classification spoke on Haiku, and run coding or analysis spokes on Sonnet. Validate the choice empirically — promote a component to a higher tier only when measured quality on its sub-task falls short, and demote when it clears the bar with headroom.

Never justify the choice on model name alone in an exam answer. Justify it on the sub-task's reasoning depth, its volume, its latency budget, and its cost of error.

Cost, latency, and reliability trade-offs at scale

At enterprise volume the three levers — cost, latency, and reliability — pull against each other, and the architect's design makes the trade explicit. Prompt caching amortizes a large stable prefix (system prompt, tool definitions, shared context) across many requests, cutting both cost and time-to-first-token; but it only pays off when the prefix is genuinely stable, so architect the prompt so volatile content sits after the cache breakpoint.

  • Cache the stable prefix. Keep the system prompt, tool set, and shared context byte-stable and front-loaded; put per-request variability at the end. A single changed byte in the prefix invalidates everything after it.
  • Stream long or high-`max_tokens` responses. Streaming avoids request timeouts on long outputs and improves perceived latency — a design consideration, not just an SDK flag.
  • Bound spend with effort and budgets. Lower reasoning effort on routine sub-tasks and reserve high effort for the components that need it; cap long agentic loops so a runaway agent degrades gracefully instead of billing indefinitely.
  • Isolate failure domains. A degraded downstream tool should fail one step and escalate, not cascade into a whole-session failure.

Synchronous vs. Message Batches: match delivery to the SLA

Not every workload is interactive. When a use case tolerates delayed results — nightly document classification, bulk enrichment, offline evaluation, large-scale content generation — the Message Batches API processes requests asynchronously at roughly half the per-token cost of synchronous calls, with results typically available within an hour (and a hard ceiling measured in hours). Choosing batch over sync for the right workloads is a pure architectural win: lower cost, higher throughput, no user waiting.

DimensionSynchronousMessage Batches
LatencyReal-time (seconds)Asynchronous (up to hours)
CostStandard per-token~50% of standard
Best forInteractive UX, agent loops, anything a user is waiting onBulk / offline jobs with a relaxed SLA
Result orderingImmediate responseAny order — key results by your own custom ID

Because batch results arrive in arbitrary order, design the consumer to key each result by the custom_id you assigned, never by position. That is the same discipline as idempotency: build the system so ordering and retries can't corrupt the outcome.

Key takeaways

  • 01Choose the least autonomous shape that works: single call, then deterministic workflow, then agent — autonomy is a cost, not a default.
  • 02Justify an agent only when complexity, value, viability, and cost-of-error all point the same way; a 'no' on any gate means drop a tier.
  • 03Default to a single agent; reach for coordinator/hub-and-spoke for parallel fan-out or heterogeneous tools, and prefer dynamic decomposition over a hard-coded sub-agent set.
  • 04Guarantee resolve-or-escalate on every terminal path — an enterprise agent must never stop in an undefined state.
  • 05Place human-in-the-loop gates immediately before high-cost, irreversible actions; let cheap reversible actions run automatically.
  • 06Select model tier per component — Opus for hard reasoning and the coordinator, Sonnet as the workhorse, Haiku for high-volume low-complexity steps — and validate empirically.
  • 07Design for idempotency and safe replay: stable keys, structured errors, and bounded loops so retries and failures degrade gracefully.
  • 08Route relaxed-SLA bulk work to the Message Batches API for ~50% cost savings; keep anything a user waits on synchronous and streamed.

Common mistakes

Building an agent for a task that is really a fixed three-step pipeline.

If you can diagram the control flow in advance, use a deterministic workflow. Run the four-gate test (complexity, value, viability, cost of error) before committing to an agent.

Using the most capable model tier for every component to be 'safe'.

Right-size per component. Put Opus only on the steps that need deep reasoning or have high cost of error; run high-volume, well-scoped sub-tasks on Sonnet or Haiku and promote only when measured quality falls short.

Letting an agent stop or hang when it can't complete a task.

Enforce a resolve-or-escalate terminal guarantee: give the agent an explicit escalation path and a bounded loop so 'unresolved' is a defined, observable outcome.

Ignoring idempotency, so retries double-charge or send duplicate side effects.

Attach a stable idempotency key to every side-effecting operation and dedupe server-side; make tool results safe to replay.

Running batch-friendly bulk workloads through the synchronous path at full price.

Route relaxed-SLA, offline jobs to the Message Batches API for roughly half the cost and higher throughput; reserve sync for interactive, user-facing work.

Frequently asked

How do I decide between a deterministic workflow and an agent?

Ask whether you can specify the control flow in advance. If the sequence of steps is knowable and fixed, a workflow gives you predictability, testability, and lower cost. If the path genuinely depends on what the model discovers mid-task — an unknown number of steps or branching you can't enumerate — an agent is justified, provided complexity, value, viability, and cost of error all support it.

When is a coordinator / hub-and-spoke design better than a single agent?

Reach for hub-and-spoke when work fans out across independent items you can process in parallel, when sub-tasks need genuinely different tool sets or personas, or when you want to run different sub-tasks on different model tiers. A single agent is simpler, easier to cache and audit, and should stay your default until one of those pressures appears. Keep delegation shallow — deep nesting makes failures untraceable.

Where should human-in-the-loop checkpoints go?

Immediately before any action that is expensive or hard to reverse: sending external communications, financial transactions, destructive data changes. Gate those behind explicit approval and let cheap, reversible, read-only actions run automatically. A gate placed too early throttles throughput; one placed after the irreversible action is useless.

What is a terminal guarantee and why does the exam emphasize it?

It is the invariant that every autonomous flow ends in a defined state — resolve the task or escalate it, never silently abandon it. Enterprise agents run unattended, so 'I couldn't finish' must be a first-class, observable outcome (a ticket, a human handoff, a structured unresolved result) rather than a hung loop. It is the property that makes an agent safe to deploy at scale.

When should I use Message Batches instead of synchronous calls?

Whenever the workload tolerates delayed results — nightly classification, bulk enrichment, offline evaluation, large-scale generation. Batches cost roughly half of synchronous per-token pricing and process asynchronously (typically within an hour). Keep anything a user is actively waiting on synchronous and streamed, and always key batch results by your own custom ID since they return in arbitrary order.

Independent, unofficial study material. Not affiliated with, endorsed by, or authorized by Anthropic. Every example is original and written to teach the public exam objectives — no real exam questions are reproduced. Technical details reflect Claude, the Anthropic API, Claude Code, and MCP as of July 25, 2026; always confirm specifics against current official documentation.

Test yourself

Turn what you just read into answers you can check.

Take the mock exam

Keep studying

All guides

These guides are free and never paywalled. Keep Claude Cert Prep free ♥