<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FA33</title>
    <description>The latest articles on DEV Community by FA33 (@fernandoabishai).</description>
    <link>https://dev.to/fernandoabishai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4143876%2F5fd02959-18c2-49e7-aed7-57f05c5f6026.jpg</url>
      <title>DEV Community: FA33</title>
      <link>https://dev.to/fernandoabishai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fernandoabishai"/>
    <language>en</language>
    <item>
      <title>AI Agents vs. Workflows: When to Use Each Architecture</title>
      <dc:creator>FA33</dc:creator>
      <pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/fernandoabishai/ai-agents-vs-workflows-when-to-use-each-architecture-3aab</link>
      <guid>https://dev.to/fernandoabishai/ai-agents-vs-workflows-when-to-use-each-architecture-3aab</guid>
      <description>&lt;p&gt;Most teams do not need an agent first.&lt;/p&gt;

&lt;p&gt;They need a reliable system that can use a model, call a few tools, and complete a bounded task without creating unnecessary uncertainty.&lt;/p&gt;

&lt;p&gt;That distinction matters because the word &lt;strong&gt;agent&lt;/strong&gt; is often used for almost any application that combines an LLM with tools. Architecturally, however, there is an important difference between a workflow and an agent.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;workflow&lt;/strong&gt; has a path that your code largely defines in advance. The model may classify, generate, extract, or choose among bounded options, but the application still controls the sequence.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;agent&lt;/strong&gt; has more authority over the sequence itself. It can inspect the current state, decide what to do next, select tools, repeat steps, recover from failures, and stop when it believes the objective is complete.&lt;/p&gt;

&lt;p&gt;Anthropic makes a similar distinction: workflows follow predefined orchestration paths, while agents dynamically direct their own processes and tool usage. OpenAI’s agent documentation likewise centers the runtime around an iterative loop of model decisions, tool execution, state, and stopping conditions.&lt;/p&gt;

&lt;p&gt;The practical question is not which architecture sounds more advanced. It is &lt;strong&gt;how much decision authority the model actually needs&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture ladder
&lt;/h2&gt;

&lt;p&gt;Think of AI systems as a ladder of increasing autonomy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single model call&lt;/strong&gt; — one input, one output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic workflow&lt;/strong&gt; — fixed steps with model calls inside them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic workflow&lt;/strong&gt; — some routing or decomposition is model-driven, but application code still constrains the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt; — the model decides the next action repeatedly until a goal, blocker, or stop condition is reached.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every step upward can increase flexibility. It can also increase latency, cost, observability requirements, and the number of failure modes.&lt;/p&gt;

&lt;p&gt;The default engineering strategy should therefore be simple: &lt;strong&gt;start at the lowest level that can solve the task reliably&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a workflow is the better architecture
&lt;/h2&gt;

&lt;p&gt;Use a workflow when the task is mostly known before execution begins.&lt;/p&gt;

&lt;p&gt;A good example is document processing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classify the document;&lt;/li&gt;
&lt;li&gt;extract required fields;&lt;/li&gt;
&lt;li&gt;validate the output;&lt;/li&gt;
&lt;li&gt;route exceptions to review;&lt;/li&gt;
&lt;li&gt;store the result.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model can still be useful at several stages, but the application already knows what the stages are.&lt;/p&gt;

&lt;p&gt;Workflows are especially strong when you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;predictable execution paths;&lt;/li&gt;
&lt;li&gt;consistent latency;&lt;/li&gt;
&lt;li&gt;bounded cost;&lt;/li&gt;
&lt;li&gt;explicit validation between steps;&lt;/li&gt;
&lt;li&gt;strong auditability;&lt;/li&gt;
&lt;li&gt;easy retries;&lt;/li&gt;
&lt;li&gt;clear ownership of failure states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several useful patterns fit this model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt chaining
&lt;/h3&gt;

&lt;p&gt;One model call produces an intermediate result that becomes input to the next step. This is useful when a complex task can be decomposed cleanly and each step can be validated separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing
&lt;/h3&gt;

&lt;p&gt;A classifier chooses among known downstream paths. Customer support is a common example: billing questions, account access, technical failures, and abuse reports can each enter a specialized flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parallelization
&lt;/h3&gt;

&lt;p&gt;Independent subtasks run at the same time and are combined afterward. This works well when the task can be divided without requiring each worker to know the others’ intermediate results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evaluator-optimizer loops
&lt;/h3&gt;

&lt;p&gt;One model produces an answer and another evaluates it against explicit criteria. The loop can continue until a quality threshold is reached or a maximum number of attempts is exhausted.&lt;/p&gt;

&lt;p&gt;These patterns can look sophisticated, but they remain workflows because the application still defines the operating structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  When an agent is justified
&lt;/h2&gt;

&lt;p&gt;An agent becomes useful when the important steps &lt;strong&gt;cannot be specified completely in advance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider a coding task such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find the root cause of this production regression, make the smallest safe fix, run the relevant tests, and explain what changed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system may need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect different files depending on what it discovers;&lt;/li&gt;
&lt;li&gt;search logs;&lt;/li&gt;
&lt;li&gt;choose which tests to run;&lt;/li&gt;
&lt;li&gt;revise its hypothesis after a failed test;&lt;/li&gt;
&lt;li&gt;edit one or several files;&lt;/li&gt;
&lt;li&gt;stop and ask for approval before a risky action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact path is not known when execution starts. A fixed workflow can attempt to encode every branch, but at some point the workflow becomes a hand-written imitation of the decision process the model could perform directly.&lt;/p&gt;

&lt;p&gt;Agents are strongest when the task has four characteristics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The objective is clear but the path is not.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The environment can provide feedback after each action.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The model has useful tools for changing or inspecting that environment.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The application can impose hard boundaries on what the agent is allowed to do.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last requirement is critical. Autonomy without boundaries is not an architecture advantage; it is an operational liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Prefer workflow&lt;/th&gt;
&lt;th&gt;Prefer agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Are the steps known in advance?&lt;/td&gt;
&lt;td&gt;Usually yes&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does the model need to choose the next action repeatedly?&lt;/td&gt;
&lt;td&gt;Rarely&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is predictable latency important?&lt;/td&gt;
&lt;td&gt;Strong fit&lt;/td&gt;
&lt;td&gt;Harder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is cost tightly bounded per run?&lt;/td&gt;
&lt;td&gt;Easier&lt;/td&gt;
&lt;td&gt;Harder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can the environment return useful feedback after each action?&lt;/td&gt;
&lt;td&gt;Helpful&lt;/td&gt;
&lt;td&gt;Essential&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do you need strong reproducibility?&lt;/td&gt;
&lt;td&gt;Strong fit&lt;/td&gt;
&lt;td&gt;Requires more controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can failure be contained with permissions and stop conditions?&lt;/td&gt;
&lt;td&gt;Still important&lt;/td&gt;
&lt;td&gt;Mandatory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does the task vary substantially from case to case?&lt;/td&gt;
&lt;td&gt;May become brittle&lt;/td&gt;
&lt;td&gt;Stronger fit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The hidden cost of unnecessary agents
&lt;/h2&gt;

&lt;p&gt;The largest mistake is not choosing a workflow when an agent would be better. It is building an agent where a workflow already solves the problem.&lt;/p&gt;

&lt;p&gt;Agents create additional engineering requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tool permissions;&lt;/li&gt;
&lt;li&gt;state management;&lt;/li&gt;
&lt;li&gt;loop termination;&lt;/li&gt;
&lt;li&gt;retry policy;&lt;/li&gt;
&lt;li&gt;approval checkpoints;&lt;/li&gt;
&lt;li&gt;tracing;&lt;/li&gt;
&lt;li&gt;evaluation across multi-step trajectories;&lt;/li&gt;
&lt;li&gt;recovery when intermediate actions partially succeed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single model call can be evaluated by comparing inputs and outputs. A multi-step agent must often be evaluated as a trajectory: what it observed, what it decided, which tools it called, what changed in the environment, and whether the final state was actually correct.&lt;/p&gt;

&lt;p&gt;This is why agent reliability is not only a model-quality problem. It is a &lt;strong&gt;systems problem&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hybrid architecture is often the right answer
&lt;/h2&gt;

&lt;p&gt;The choice is not binary.&lt;/p&gt;

&lt;p&gt;A strong production system often uses a deterministic workflow around a bounded agent.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;validate the request;&lt;/li&gt;
&lt;li&gt;classify risk;&lt;/li&gt;
&lt;li&gt;create a sandbox;&lt;/li&gt;
&lt;li&gt;let an agent solve the task inside that sandbox;&lt;/li&gt;
&lt;li&gt;run deterministic checks;&lt;/li&gt;
&lt;li&gt;require approval for sensitive actions;&lt;/li&gt;
&lt;li&gt;persist the result and audit trail.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workflow controls the system boundary. The agent handles the part where the path is genuinely dynamic.&lt;/p&gt;

&lt;p&gt;This structure keeps autonomy where it creates value without giving the model authority over everything around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five questions before adding an agent loop
&lt;/h2&gt;

&lt;p&gt;Before implementing an agent, answer these questions:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What decision cannot be encoded reliably in normal application logic?
&lt;/h3&gt;

&lt;p&gt;If you cannot identify that decision, you may not need an agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What ground truth can the system observe after each action?
&lt;/h3&gt;

&lt;p&gt;Agents need feedback. Tests, API responses, file state, database results, browser state, and human approvals can all provide evidence about whether progress is real.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What is the maximum authority the agent needs?
&lt;/h3&gt;

&lt;p&gt;Do not expose ten tools when the task needs three. Do not grant write access when read access is sufficient. Do not allow irreversible actions without a checkpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. How does the run stop?
&lt;/h3&gt;

&lt;p&gt;Define success conditions, iteration limits, budget limits, timeouts, and escalation paths before production.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. How will you evaluate the trajectory?
&lt;/h3&gt;

&lt;p&gt;Measure more than the final answer. Track tool choice, unnecessary steps, retries, latency, token usage, cost, human interventions, and task completion.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design rule
&lt;/h2&gt;

&lt;p&gt;Workflows optimize for &lt;strong&gt;control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agents optimize for &lt;strong&gt;adaptability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most production systems need both, but not in equal amounts.&lt;/p&gt;

&lt;p&gt;If the task has a stable path, encode that path. If the task requires runtime discovery, let the model make the decisions that genuinely cannot be predetermined. Then surround that autonomy with deterministic checks, permissions, observability, and stop conditions.&lt;/p&gt;

&lt;p&gt;The goal is not to build the most agentic system.&lt;/p&gt;

&lt;p&gt;The goal is to build the &lt;strong&gt;least autonomous system that can reliably solve the real problem&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/engineering/building-effective-agents" rel="noopener noreferrer"&gt;Anthropic — Building effective agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/agents" rel="noopener noreferrer"&gt;OpenAI — Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/agents/running-agents" rel="noopener noreferrer"&gt;OpenAI — Running agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/discover/agentic-workflows" rel="noopener noreferrer"&gt;Google Cloud — What are agentic workflows?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>workflows</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Evaluate AI Agents: Reliability, Cost, Latency, and Failure Modes</title>
      <dc:creator>FA33</dc:creator>
      <pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/fernandoabishai/how-to-evaluate-ai-agents-reliability-cost-latency-and-failure-modes-2bb1</link>
      <guid>https://dev.to/fernandoabishai/how-to-evaluate-ai-agents-reliability-cost-latency-and-failure-modes-2bb1</guid>
      <description>&lt;p&gt;An AI agent can produce an impressive demo and still be a poor production system.&lt;/p&gt;

&lt;p&gt;The reason is simple: a demo usually proves that the agent &lt;strong&gt;can&lt;/strong&gt; complete a task. Production requires evidence that it can complete the task &lt;strong&gt;reliably, repeatedly, at an acceptable cost, within an acceptable time, and without unsafe side effects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That changes how agents should be evaluated.&lt;/p&gt;

&lt;p&gt;A single final answer is not enough. An agent acts across multiple steps, calls tools, changes state, encounters partial failures, and can reach the same result through different paths. The evaluation target is therefore not only the output. It is the &lt;strong&gt;whole trajectory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;OpenAI’s current agent evaluation guidance emphasizes traces, graders, datasets, and repeatable eval runs. Anthropic similarly describes agent evaluation as a multi-turn problem in which the transcript, tool calls, intermediate state, and final outcome all matter.&lt;/p&gt;

&lt;p&gt;The practical objective is to answer four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Did the agent complete the task?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Did it complete the task consistently?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How much time and money did it consume?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What kinds of failures does it produce when it does not succeed?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Start with task success, not model quality
&lt;/h2&gt;

&lt;p&gt;Do not begin by asking whether the model is intelligent.&lt;/p&gt;

&lt;p&gt;Begin by defining what success means in the environment where the agent operates.&lt;/p&gt;

&lt;p&gt;For a coding agent, success may mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the requested behavior is implemented;&lt;/li&gt;
&lt;li&gt;the relevant tests pass;&lt;/li&gt;
&lt;li&gt;existing tests do not regress;&lt;/li&gt;
&lt;li&gt;no unrelated files are modified;&lt;/li&gt;
&lt;li&gt;the final explanation matches the actual diff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a support agent, success may mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the customer’s issue is resolved;&lt;/li&gt;
&lt;li&gt;the correct policy was applied;&lt;/li&gt;
&lt;li&gt;the correct backend state was changed;&lt;/li&gt;
&lt;li&gt;escalation happened when required;&lt;/li&gt;
&lt;li&gt;no unauthorized action was executed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a research agent, success may mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the answer addresses the question;&lt;/li&gt;
&lt;li&gt;factual claims are supported by sources;&lt;/li&gt;
&lt;li&gt;the sources are relevant and sufficiently authoritative;&lt;/li&gt;
&lt;li&gt;citations resolve to the claims they support;&lt;/li&gt;
&lt;li&gt;the agent does not fabricate evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The evaluator should verify the real outcome whenever possible.&lt;/p&gt;

&lt;p&gt;That is stronger than asking another model whether the response ‘looks good.’&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate the final state and the trajectory separately
&lt;/h2&gt;

&lt;p&gt;Two agents can arrive at the same correct result through very different processes.&lt;/p&gt;

&lt;p&gt;One may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;select the right tool immediately;&lt;/li&gt;
&lt;li&gt;make one valid call;&lt;/li&gt;
&lt;li&gt;verify the result;&lt;/li&gt;
&lt;li&gt;stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;call three irrelevant tools;&lt;/li&gt;
&lt;li&gt;retry the same failed action;&lt;/li&gt;
&lt;li&gt;expose unnecessary data;&lt;/li&gt;
&lt;li&gt;eventually stumble into the correct final state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you grade only the final output, both runs may pass.&lt;/p&gt;

&lt;p&gt;In production, they are not equivalent.&lt;/p&gt;

&lt;p&gt;A useful evaluation therefore has at least two layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outcome evaluation
&lt;/h3&gt;

&lt;p&gt;Check whether the environment ended in the correct state.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expected database values;&lt;/li&gt;
&lt;li&gt;passing tests;&lt;/li&gt;
&lt;li&gt;correct ticket status;&lt;/li&gt;
&lt;li&gt;correct file contents;&lt;/li&gt;
&lt;li&gt;correct generated artifact;&lt;/li&gt;
&lt;li&gt;valid structured output.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trajectory evaluation
&lt;/h3&gt;

&lt;p&gt;Inspect how the agent reached that state.&lt;/p&gt;

&lt;p&gt;Questions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did it choose the right tools?&lt;/li&gt;
&lt;li&gt;Were arguments correct?&lt;/li&gt;
&lt;li&gt;Did it perform unnecessary actions?&lt;/li&gt;
&lt;li&gt;Did it respect permissions?&lt;/li&gt;
&lt;li&gt;Did it recover correctly from errors?&lt;/li&gt;
&lt;li&gt;Did it stop once the task was complete?&lt;/li&gt;
&lt;li&gt;Did it hand off or ask for approval at the right point?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI’s trace-grading guidance is designed for exactly this type of workflow-level inspection: traces capture model calls, tool calls, guardrails, and handoffs so they can be graded for regressions and behavioral failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability requires repeated trials
&lt;/h2&gt;

&lt;p&gt;Agent behavior is non-deterministic.&lt;/p&gt;

&lt;p&gt;A task that succeeds once may fail on the next run even when the input is identical.&lt;/p&gt;

&lt;p&gt;That means a single successful run tells you very little about reliability.&lt;/p&gt;

&lt;p&gt;Run each important task multiple times.&lt;/p&gt;

&lt;p&gt;Two useful metrics described by Anthropic are &lt;strong&gt;pass@k&lt;/strong&gt; and &lt;strong&gt;pass^k&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pass@k&lt;/strong&gt; asks whether at least one of k attempts succeeds.&lt;/p&gt;

&lt;p&gt;This is useful when the product can tolerate retries or generate multiple candidates and choose one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pass^k&lt;/strong&gt; asks whether all k attempts succeed.&lt;/p&gt;

&lt;p&gt;This is closer to the reliability requirement of customer-facing systems where the user expects the same task to work every time.&lt;/p&gt;

&lt;p&gt;For production agents, consistency is usually more important than the best run the system can occasionally produce.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure cost per successful task
&lt;/h2&gt;

&lt;p&gt;Raw token cost is not enough.&lt;/p&gt;

&lt;p&gt;Suppose Agent A costs $0.08 per run and succeeds 60% of the time. Agent B costs $0.12 per run and succeeds 95% of the time.&lt;/p&gt;

&lt;p&gt;Looking only at cost per run makes Agent A appear cheaper.&lt;/p&gt;

&lt;p&gt;Looking at &lt;strong&gt;cost per successful task&lt;/strong&gt; can reverse that conclusion.&lt;/p&gt;

&lt;p&gt;The same principle applies to tool usage.&lt;/p&gt;

&lt;p&gt;Track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model input/output tokens;&lt;/li&gt;
&lt;li&gt;number of model turns;&lt;/li&gt;
&lt;li&gt;number of tool calls;&lt;/li&gt;
&lt;li&gt;paid external API usage;&lt;/li&gt;
&lt;li&gt;retry count;&lt;/li&gt;
&lt;li&gt;sandbox or compute cost;&lt;/li&gt;
&lt;li&gt;human-review cost where applicable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then normalize those numbers by successful completion.&lt;/p&gt;

&lt;p&gt;An agent that is slightly more expensive per turn may be cheaper operationally if it reaches correct outcomes with fewer retries and less human intervention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency is part of product quality
&lt;/h2&gt;

&lt;p&gt;Agents often trade latency for quality because they plan, call tools, observe results, and iterate.&lt;/p&gt;

&lt;p&gt;Measure more than total wall-clock time.&lt;/p&gt;

&lt;p&gt;Useful latency metrics include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;time to first useful action;&lt;/li&gt;
&lt;li&gt;model latency per turn;&lt;/li&gt;
&lt;li&gt;tool latency;&lt;/li&gt;
&lt;li&gt;number of sequential steps;&lt;/li&gt;
&lt;li&gt;total task latency;&lt;/li&gt;
&lt;li&gt;p50, p95, and p99 completion time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tail latency matters.&lt;/p&gt;

&lt;p&gt;An agent that usually finishes in eight seconds but occasionally takes three minutes may create a worse product experience than one that consistently finishes in fifteen seconds.&lt;/p&gt;

&lt;p&gt;Measure latency on the real environment, not only against mocked tools. Network behavior, rate limits, browser operations, cold starts, and external APIs can dominate total execution time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a failure taxonomy
&lt;/h2&gt;

&lt;p&gt;A useful eval suite does more than produce a score.&lt;/p&gt;

&lt;p&gt;It tells you &lt;strong&gt;how the system fails&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Create explicit failure categories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Planning failures
&lt;/h3&gt;

&lt;p&gt;The agent chooses a poor strategy or decomposes the task incorrectly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool-selection failures
&lt;/h3&gt;

&lt;p&gt;It uses the wrong tool or misses a tool it should have used.&lt;/p&gt;

&lt;h3&gt;
  
  
  Argument failures
&lt;/h3&gt;

&lt;p&gt;It chooses the correct tool but supplies invalid, incomplete, or dangerous arguments.&lt;/p&gt;

&lt;h3&gt;
  
  
  State-understanding failures
&lt;/h3&gt;

&lt;p&gt;It misreads the environment, stale data, previous tool output, or current task state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recovery failures
&lt;/h3&gt;

&lt;p&gt;A tool returns an error, but the agent retries blindly, loops, or abandons a recoverable task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Completion failures
&lt;/h3&gt;

&lt;p&gt;The work is already correct, but the agent continues acting and introduces regressions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Permission failures
&lt;/h3&gt;

&lt;p&gt;The agent attempts an action beyond the authority required for the task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication failures
&lt;/h3&gt;

&lt;p&gt;The underlying work is correct, but the user-facing answer misrepresents what happened or omits an important limitation.&lt;/p&gt;

&lt;p&gt;Once failures are categorized, improvements become much more targeted.&lt;/p&gt;

&lt;p&gt;A tool-selection problem may require clearer tool descriptions. A recovery problem may require explicit retry policy. A permission problem may require architecture changes rather than better prompting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use deterministic graders wherever possible
&lt;/h2&gt;

&lt;p&gt;LLM-as-a-judge is useful, but it should not replace deterministic checks when the environment offers a source of truth.&lt;/p&gt;

&lt;p&gt;For coding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run tests;&lt;/li&gt;
&lt;li&gt;run type checks;&lt;/li&gt;
&lt;li&gt;run linters;&lt;/li&gt;
&lt;li&gt;inspect changed files;&lt;/li&gt;
&lt;li&gt;verify expected outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For transactional systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect database state;&lt;/li&gt;
&lt;li&gt;verify ledger entries;&lt;/li&gt;
&lt;li&gt;check authorization state;&lt;/li&gt;
&lt;li&gt;confirm idempotency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For structured tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate JSON schemas;&lt;/li&gt;
&lt;li&gt;check required fields;&lt;/li&gt;
&lt;li&gt;compare exact values;&lt;/li&gt;
&lt;li&gt;run business rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use model-based graders for dimensions that are genuinely semantic or difficult to encode, such as explanation quality, research synthesis, or conversational quality.&lt;/p&gt;

&lt;p&gt;The strongest evals often combine deterministic, model-based, and human grading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the dataset from real failures
&lt;/h2&gt;

&lt;p&gt;Do not create an eval set composed only of clean examples.&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real production failures;&lt;/li&gt;
&lt;li&gt;edge cases found during development;&lt;/li&gt;
&lt;li&gt;ambiguous requests;&lt;/li&gt;
&lt;li&gt;malformed tool outputs;&lt;/li&gt;
&lt;li&gt;permission boundaries;&lt;/li&gt;
&lt;li&gt;adversarial or conflicting instructions;&lt;/li&gt;
&lt;li&gt;tasks where previous versions regressed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every meaningful production failure should become a candidate regression test.&lt;/p&gt;

&lt;p&gt;Over time, the eval set becomes an operational memory of what the system has learned not to break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate capability from policy
&lt;/h2&gt;

&lt;p&gt;An agent can be capable of completing a task and still be unacceptable because it violates a policy constraint.&lt;/p&gt;

&lt;p&gt;Measure both.&lt;/p&gt;

&lt;p&gt;For example, an agent may successfully issue a refund but fail because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it skipped required approval;&lt;/li&gt;
&lt;li&gt;the amount exceeded a configured limit;&lt;/li&gt;
&lt;li&gt;it exposed sensitive account information;&lt;/li&gt;
&lt;li&gt;it used a tool outside its permitted scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Task success and policy compliance should be distinct metrics.&lt;/p&gt;

&lt;p&gt;Otherwise a system can appear to improve by becoming more aggressive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare changes against a baseline
&lt;/h2&gt;

&lt;p&gt;Every significant change should run against the same evaluation set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model upgrade;&lt;/li&gt;
&lt;li&gt;prompt change;&lt;/li&gt;
&lt;li&gt;new tool;&lt;/li&gt;
&lt;li&gt;new retrieval layer;&lt;/li&gt;
&lt;li&gt;changed tool description;&lt;/li&gt;
&lt;li&gt;routing change;&lt;/li&gt;
&lt;li&gt;memory change;&lt;/li&gt;
&lt;li&gt;permission change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;task success;&lt;/li&gt;
&lt;li&gt;consistency across repeated trials;&lt;/li&gt;
&lt;li&gt;cost per success;&lt;/li&gt;
&lt;li&gt;total latency;&lt;/li&gt;
&lt;li&gt;tool-call count;&lt;/li&gt;
&lt;li&gt;policy violations;&lt;/li&gt;
&lt;li&gt;failure categories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids a common pattern in agent development: fixing one visible failure while silently degrading another part of the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimum production scorecard
&lt;/h2&gt;

&lt;p&gt;Before shipping an agent, I would want at least this scorecard:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Task success&lt;/td&gt;
&lt;td&gt;% of tasks reaching verified correct state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;repeated-trial success / pass^k where relevant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;average and p95 cost per successful task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;p50 / p95 / p99 task completion time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool quality&lt;/td&gt;
&lt;td&gt;correct tool and argument rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Efficiency&lt;/td&gt;
&lt;td&gt;turns and tool calls per successful task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safety&lt;/td&gt;
&lt;td&gt;permission/policy violation rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery&lt;/td&gt;
&lt;td&gt;success rate after injected tool or environment failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;change vs. previous production baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single number summarizes an agent well.&lt;/p&gt;

&lt;p&gt;A benchmark score can tell you something about model capability. It does not tell you whether your specific agent, tools, prompts, permissions, data, and environment form a reliable product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design rule
&lt;/h2&gt;

&lt;p&gt;Evaluate agents as systems.&lt;/p&gt;

&lt;p&gt;Measure the final outcome, the trajectory, the operational cost, and the failure distribution.&lt;/p&gt;

&lt;p&gt;Use deterministic ground truth whenever it exists. Run repeated trials. Keep real failures in the eval set. Compare every meaningful change against a stable baseline.&lt;/p&gt;

&lt;p&gt;The goal is not to prove that an agent can succeed.&lt;/p&gt;

&lt;p&gt;The goal is to know &lt;strong&gt;how often it succeeds, how it fails, what each success costs, and whether the system remains inside its intended boundaries while doing the work&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/agent-evals" rel="noopener noreferrer"&gt;OpenAI — Evaluate agent workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/agents-api/tracing" rel="noopener noreferrer"&gt;OpenAI — Tracing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/guides/agent-builder-safety" rel="noopener noreferrer"&gt;OpenAI — Safety in building agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic — Demystifying evals for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/engineering/infrastructure-noise" rel="noopener noreferrer"&gt;Anthropic — Quantifying infrastructure noise in agentic coding evals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>evals</category>
      <category>reliability</category>
    </item>
  </channel>
</rss>
