<?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: Martín Rivadavia</title>
    <description>The latest articles on DEV Community by Martín Rivadavia (@rivadaviam).</description>
    <link>https://dev.to/rivadaviam</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%2F154854%2Fdcc1bbc5-6d05-435b-bc8d-055ce3ddaf57.png</url>
      <title>DEV Community: Martín Rivadavia</title>
      <link>https://dev.to/rivadaviam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rivadaviam"/>
    <language>en</language>
    <item>
      <title>Loop Engineering on AWS: Stop Writing Prompts, Design the System That Writes Them</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Tue, 21 Jul 2026 19:00:05 +0000</pubDate>
      <link>https://dev.to/rivadaviam/loop-engineering-on-aws-stop-writing-prompts-design-the-system-that-writes-them-30jd</link>
      <guid>https://dev.to/rivadaviam/loop-engineering-on-aws-stop-writing-prompts-design-the-system-that-writes-them-30jd</guid>
      <description>&lt;p&gt;Stop being the person who writes prompts. Become the person who designs the system that writes them for you.&lt;/p&gt;

&lt;p&gt;That's the whole idea behind a phrase Addy Osmani (engineering lead on Chrome DevTools at Google) dropped on LinkedIn on June 9, 2026. He called it &lt;strong&gt;loop engineering&lt;/strong&gt;, and the post landed with 1,277 likes and 124 comments. His definition is short enough to memorize:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Loop engineering: replacing yourself as the person who prompts the agent. You design the system that does it instead. A loop is a recursive objective where AI iterates until complete."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Osmani didn't invent the practice. The best teams were already doing it. He named it, and naming is what turns a scattered practice into shared vocabulary. Once someone with his credibility gives it a word, the industry starts using that word to argue about architecture.&lt;/p&gt;

&lt;p&gt;I build agent loops every day in my own tooling. Not a demo, not a weekend toy. A running system of scheduled tasks, skills, sub-agents, and memory that runs discovery and drafting on a cron tick, then hands me decisions instead of asking me to type. So when Osmani listed the pieces of a loop, I recognized every one of them. What his post doesn't give you is the part I care about most: where does each piece actually &lt;em&gt;live&lt;/em&gt; when you run it on AWS?&lt;/p&gt;

&lt;p&gt;That's the gap this article fills. Every component, a concrete service, one minimal loop you can trace end to end. And a warning at the end that I think matters more than any of the wiring.&lt;/p&gt;




&lt;h2&gt;
  
  
  The components, and why the timing is not an accident
&lt;/h2&gt;

&lt;p&gt;Osmani lists five components: automations, worktrees, skills, plugins (MCP), and sub-agents, plus memory as what he calls the sixth thing, state that lives outside the single conversation. Read that list as an architecture. Each part answers a different question. What triggers the work. Where the work runs in isolation. What the agent knows. How it reaches tools. Who does the specialized labor. And what it remembers between runs.&lt;/p&gt;

&lt;p&gt;The reason this is worth writing &lt;em&gt;now&lt;/em&gt; is that the AWS side matured on almost the same calendar as Osmani's post. AWS MCP Server hit GA in May 2026. AgentCore Policy went GA in March, AgentCore Evaluations the same month, and the AgentCore harness reached GA in June 2026, per the &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/release-notes.html" rel="noopener noreferrer"&gt;AgentCore release notes&lt;/a&gt;. Two threads, the mental model and the infrastructure, arrived at the same knot in the same month.&lt;/p&gt;

&lt;p&gt;Here is the map I keep coming back to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8fgno9ni11uw93a09ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8fgno9ni11uw93a09ww.png" alt="Six loop components mapped to AWS services: Automations to EventBridge plus Lambda, Worktrees to AgentCore Runtime microVMs, Skills to Bedrock Knowledge Bases, Plugins (MCP) to AWS MCP Server, Sub-agents to AgentCore harness, Memory files to S3 plus DynamoDB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Osmani's six loop components on the left, the AWS service each one lives on when you run it in production on the right.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component (Osmani)&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;AWS service&lt;/th&gt;
&lt;th&gt;Key config&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scheduled discovery. The loop fires itself, no human prompt.&lt;/td&gt;
&lt;td&gt;EventBridge (scheduled rules + event bus) → Lambda&lt;/td&gt;
&lt;td&gt;Cron expression or event pattern; Lambda as dispatcher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Worktrees&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Isolated branch per agent so parallel runs don't collide&lt;/td&gt;
&lt;td&gt;AgentCore Runtime (microVM per session)&lt;/td&gt;
&lt;td&gt;Each session gets its own &lt;code&gt;/mnt/workspace&lt;/code&gt;; git stays the coordination layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reusable project knowledge the agent loads into context&lt;/td&gt;
&lt;td&gt;Bedrock Knowledge Bases (Smart Parsing)&lt;/td&gt;
&lt;td&gt;Pre-computed chunking + embeddings; structured S3 too&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugins / MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard connection to external tools&lt;/td&gt;
&lt;td&gt;AWS MCP Server (GA May 2026)&lt;/td&gt;
&lt;td&gt;The new default; replaced custom integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sub-agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Specialists orchestrated by a coordinator&lt;/td&gt;
&lt;td&gt;AgentCore harness (GA June 2026)&lt;/td&gt;
&lt;td&gt;Orchestrator harness routing to specialist agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;State that survives between sessions&lt;/td&gt;
&lt;td&gt;S3 (long-term) + DynamoDB (short-term)&lt;/td&gt;
&lt;td&gt;S3 for context files; DynamoDB for fast state&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sources: &lt;a href="https://www.linkedin.com/posts/addyosmani_ai-softwareengineering-programming-activity-7469999258658791425-cTvy" rel="noopener noreferrer"&gt;Addy Osmani, LinkedIn (June 9, 2026)&lt;/a&gt;; &lt;a href="https://aws.amazon.com/blogs/machine-learning/introducing-aws-mcp-servers-for-code-assistants/" rel="noopener noreferrer"&gt;AWS MCP Servers announcement&lt;/a&gt;; &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let me walk each row, because a table hides the interesting decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automations: the loop has to fire itself
&lt;/h2&gt;

&lt;p&gt;This is the line that separates a loop from a chatbot. If a human still has to type "go," it's not a loop. It's a prompt with extra steps.&lt;/p&gt;

&lt;p&gt;On AWS, the trigger is EventBridge. A scheduled rule handles the "run discovery every morning" case with a cron expression. An event bus handles the "react when something lands in this bucket" case with an event pattern. Either way, EventBridge doesn't run your logic. It wakes up a Lambda function, and that Lambda is your dispatcher, the thing that decides what the loop should do this cycle and calls the orchestrator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Lambda dispatcher — invoked by an EventBridge scheduled rule.
# Job: decide what this cycle's objective is, then hand it to the orchestrator.
# IAM: this function's role needs bedrock-agentcore:InvokeAgentRuntime on the runtime ARN.
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;

&lt;span class="n"&gt;agentcore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-agentcore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# EventBridge gives us the trigger; we set the recursive objective.
&lt;/span&gt;    &lt;span class="n"&gt;objective&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_objective_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# cron tick or event payload
&lt;/span&gt;    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_agent_runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;agentRuntimeArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ORCH_RUNTIME_ARN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;runtimeSessionId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;session_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;   &lt;span class="c1"&gt;# ties back to memory, see below
&lt;/span&gt;        &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;objective&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dispatched&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;objective&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;objective&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why put a Lambda between EventBridge and Bedrock at all? Because the dispatcher is where you set the objective and, later, where you'll bolt on a circuit breaker. That thin layer is cheap insurance. I'll come back to why I never skip it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Worktrees: isolation so parallel agents don't step on each other
&lt;/h2&gt;

&lt;p&gt;Osmani's "worktrees" borrows from git: each agent gets its own branch so two agents editing the same tree don't corrupt each other's state. When agents run in parallel, shared mutable state is how you get a mess that's impossible to debug.&lt;/p&gt;

&lt;p&gt;The AWS translation is isolation per agent session: AgentCore Runtime runs each session in its own microVM. Each run gets a clean, isolated environment and tears down after.&lt;/p&gt;

&lt;p&gt;I flagged this row as a seam in an early draft, and running it to ground made the map better. Osmani's worktrees are literally git worktrees inside a running coding agent, and AWS doesn't reproduce them. It replaces them. Each AgentCore session gets its own microVM with its own &lt;code&gt;/mnt/workspace&lt;/code&gt;, so the isolation that git worktrees fake at the directory level happens at the machine level, with git left in place as the coordination layer. &lt;a href="https://aws.amazon.com/blogs/machine-learning/its-safe-to-close-your-laptop-now-hosting-coding-agents-on-amazon-bedrock-agentcore/" rel="noopener noreferrer"&gt;AWS's own write-up on hosting coding agents&lt;/a&gt; is explicit: no worktree management needed, because the filesystem itself is per-session. Treat this row as "isolation, upgraded," not "git worktrees, reproduced."&lt;/p&gt;




&lt;h2&gt;
  
  
  Skills: what the agent knows before it starts
&lt;/h2&gt;

&lt;p&gt;Skills are reusable project knowledge the agent pulls into context, so it doesn't relearn your conventions every cycle. On AWS that's Bedrock Knowledge Bases with Smart Parsing: you pre-compute chunking and embeddings, and the agent retrieves against them at run time. For flatter, more structured knowledge, a well-organized S3 layout does the job without the retrieval overhead.&lt;/p&gt;

&lt;p&gt;The decision I'd surface here is &lt;em&gt;when&lt;/em&gt; Knowledge Bases earns its cost. Retrieval isn't free, and for a small, stable skill set, structured S3 files the agent reads directly can beat a vector round-trip. I default to S3 for anything the agent needs every single run, and reserve Knowledge Bases for the large, changing corpus where retrieval actually saves tokens.&lt;/p&gt;




&lt;h2&gt;
  
  
  Plugins and MCP: the part that quietly became the standard
&lt;/h2&gt;

&lt;p&gt;This is the row that changed the most in 2026. The Model Context Protocol went from "interesting" to the default way agents reach tools. The production-stack write-up from @codewithbrij (Instagram, ~May 2026, 649 likes) put it bluntly: MCP replaced custom integrations, and the whole stack stopped growing taller and instead thinned out in the middle and thickened at the edges. Fewer bespoke connectors, more standard ones.&lt;/p&gt;

&lt;p&gt;AWS MCP Server reaching GA in May 2026 is what makes this real on AWS, and per Prasad Rao (AWS Principal SA, LinkedIn, May 2026) it's pay-as-you-go with no extra charge for the server itself, which &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/05/aws-mcp-server/" rel="noopener noreferrer"&gt;AWS's GA announcement&lt;/a&gt; confirms: you pay only for the resources your agents use. Practically, MCP is how your orchestrator calls out to external tools without you writing and maintaining glue code for each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sub-agents: specialists with a coordinator
&lt;/h2&gt;

&lt;p&gt;A single agent doing everything is a single agent doing everything badly. Osmani's loop uses sub-agents: specialists, each good at one thing, orchestrated by a coordinator.&lt;/p&gt;

&lt;p&gt;On AWS this now lives in one place: the AgentCore harness, GA since June 2026, holds an orchestrator and its specialists together in production. (If you were about to reach for Bedrock Agents for this row, don't. That service is now &lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-classic-maintenance-mode.html" rel="noopener noreferrer"&gt;Bedrock Agents Classic&lt;/a&gt; and closes to new customers on July 30, 2026; AWS points migrations at AgentCore.) And "in production" comes with numbers you should know before you design: AgentCore's June 2026 quotas are &lt;strong&gt;200 TPS per agent&lt;/strong&gt; and &lt;strong&gt;5,000 active sessions per account&lt;/strong&gt; in us-east-1 and us-west-2, 2,500 in other Regions (&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/release-notes.html" rel="noopener noreferrer"&gt;AgentCore release notes&lt;/a&gt;). Agents hold sessions, sometimes for a long time, so the session ceiling is the one I'd model first. It's easy to blow past 5,000 concurrent sessions with a fleet of long-lived loops and never touch the TPS limit.&lt;/p&gt;

&lt;p&gt;This is also where Osmani's &lt;em&gt;other&lt;/em&gt; framing clicks into place. A month before the LinkedIn post, he wrote on O'Reilly Radar about "agent harness engineering," and the line worth taping to your monitor is: &lt;em&gt;"A decent model with an excellent harness outperforms an excellent model with a poor harness."&lt;/em&gt; The harness and the loop are the same idea named for two audiences. The AgentCore harness is AWS's answer to exactly that sentence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Memory files: state that outlives the session
&lt;/h2&gt;

&lt;p&gt;The last component is memory: what the agent carries across runs so cycle two knows what cycle one did. The seed splits this cleanly, and I agree with the split. S3 for long-term context, the files and artifacts the agent should still see next week. DynamoDB for short-term, fast state: the session pointer, the last checkpoint, the "where was I" record that every dispatch reads and writes.&lt;/p&gt;

&lt;p&gt;That session ID in the dispatcher code above is the thread. It ties EventBridge's trigger to DynamoDB's state to S3's context, and it's how a set of independent Lambda invocations becomes one continuous loop instead of six strangers.&lt;/p&gt;




&lt;h2&gt;
  
  
  The minimal viable loop, wired end to end
&lt;/h2&gt;

&lt;p&gt;Put the six together and you get a loop small enough to draw and real enough to run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge rule (cron / event)
  -&amp;gt; Lambda (dispatcher, sets objective + circuit breaker)
    -&amp;gt; AgentCore harness (orchestrator)
        |- MCP Server (external tools)
        |- Knowledge Base (context / skills)
        |- Sub-agents (specialists)
  -&amp;gt; S3 / DynamoDB (memory files)
  -&amp;gt; CloudWatch (loop observability)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The permission chain is short. EventBridge needs invoke on the Lambda, and the Lambda's role needs &lt;code&gt;bedrock-agentcore:InvokeAgentRuntime&lt;/code&gt; on the orchestrator's runtime ARN (&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-invoke-agent.html" rel="noopener noreferrer"&gt;invoke docs&lt;/a&gt;). That's the whole chain.&lt;/p&gt;

&lt;p&gt;Notice observability is on the diagram, not a footnote. The @codewithbrij write-up made the point that stuck with me: in 2026 you don't bolt observability on at day 100. It runs vertically through the whole thing from day 1, as a rail. On AWS that rail is X-Ray for distributed traces across the full loop (trigger to agent to tool to response), CloudWatch for latency and token metrics, and CloudTrail for the audit log of what the agent decided. If you're doing this for an enterprise, CloudTrail is the row compliance will ask about first.&lt;/p&gt;

&lt;p&gt;Which brings up the reason a serious team picks Bedrock at all. Per Prasad Rao, running Claude Code over Bedrock rather than straight against the model adds IAM-based access control, data residency inside your VPC and region, CloudTrail audit on every model call, and unified billing that lands in your existing AWS budget instead of a separate card. None of that is glamorous. All of it is what stands between a demo and something legal will let you ship.&lt;/p&gt;




&lt;h2&gt;
  
  
  The warning, which is the actual point
&lt;/h2&gt;

&lt;p&gt;Here's where I part ways with most of the "build agents" content. The wiring is the easy part. The hard part is not surrendering your own judgment to a system you built specifically to act without you.&lt;/p&gt;

&lt;p&gt;Osmani names three risks, and each one has an AWS-shaped answer, but the answers are guardrails, not cures. Verification stays a human job; the loop does not check itself. AWS gives you AgentCore Evaluations (13 built-in evaluators plus Ground Truth) and you can drop a checkpoint Lambda before any final output, but a human still reads the checkpoint. Comprehension debt piles up faster when the loop is automated, because you stop watching the steps; X-Ray traces and a CloudWatch decision dashboard exist so you &lt;em&gt;can&lt;/em&gt; watch, not so you don't have to. And the deepest one, what he calls &lt;strong&gt;cognitive surrender&lt;/strong&gt;, accepting outputs passively because the system sounds confident: AgentCore Policy plus Guardrails and a Step Functions human-approval step before anything irreversible are the technical brakes. The judgment behind them is still yours.&lt;/p&gt;

&lt;p&gt;I feel this one personally, because I run these loops daily. The temptation is real. When the system has been right forty times, you stop reading the forty-first output. That's the moment the engineering fails, and no service on the diagram catches it. Osmani says it better than I can, so I'll give him the close:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build the loop. But build it like someone who intends to stay the engineer, not just the person who presses go."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I'd tell you to do next
&lt;/h2&gt;

&lt;p&gt;Start smaller than the diagram. One EventBridge rule, one Lambda dispatcher, one AgentCore agent, and DynamoDB for state. Skip the sub-agents, skip the Knowledge Base, skip MCP until the two-box loop runs clean. Add each component only when the loop's actually straining without it. A loop you understand beats a loop that impresses.&lt;/p&gt;

&lt;p&gt;If you want to go deeper: take the six-row table above and, for one component, write the ADR. Automations is the easiest place to start. Why EventBridge scheduled rule over a Step Functions timer? What's your circuit breaker in the dispatcher? Write down the decision and the trade-off you rejected, because that's the artifact that makes the loop yours instead of a copy of mine.&lt;/p&gt;

&lt;p&gt;And if you build one, come tell me where the six-component map broke for you. Two seams I flagged in an early draft (worktrees, and the exact IAM chain) got run to ground during verification, and both answers made the map stronger. Find me the next one. I want the correction more than I want to be right. That's the whole point of building in public.&lt;/p&gt;

&lt;p&gt;Build the loop. Stay the engineer.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: Addy Osmani, &lt;a href="https://www.linkedin.com/posts/addyosmani_ai-softwareengineering-programming-activity-7469999258658791425-cTvy" rel="noopener noreferrer"&gt;"Loop engineering," LinkedIn (June 9, 2026)&lt;/a&gt; and &lt;a href="https://www.oreilly.com/radar/agent-harness-engineering/" rel="noopener noreferrer"&gt;"Agent Harness Engineering," O'Reilly Radar (May 2026)&lt;/a&gt;; @codewithbrij, "The AI Production Stack — May 2026 Edition" (Instagram); Prasad Rao (AWS Principal SA), Claude Code on Bedrock enterprise setup (LinkedIn, May 2026); &lt;a href="https://aws.amazon.com/blogs/machine-learning/introducing-aws-mcp-servers-for-code-assistants/" rel="noopener noreferrer"&gt;AWS MCP Servers&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-classic-maintenance-mode.html" rel="noopener noreferrer"&gt;Bedrock Agents Classic maintenance mode&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/release-notes.html" rel="noopener noreferrer"&gt;AgentCore release notes&lt;/a&gt;, &lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/agentcore-evaluations-generally-available/" rel="noopener noreferrer"&gt;AgentCore Evaluations GA&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>aiagents</category>
      <category>amazonbedrock</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The CEO of Y Combinator Open-Sourced His AI Agent Team. What Happens When You Put It on AWS Bedrock?</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Tue, 14 Jul 2026 14:56:54 +0000</pubDate>
      <link>https://dev.to/rivadaviam/the-ceo-of-y-combinator-open-sourced-his-ai-agent-team-what-happens-when-you-put-it-on-aws-bedrock-396c</link>
      <guid>https://dev.to/rivadaviam/the-ceo-of-y-combinator-open-sourced-his-ai-agent-team-what-happens-when-you-put-it-on-aws-bedrock-396c</guid>
      <description>&lt;p&gt;Garry Tan runs Y Combinator. In March he open-sourced his Claude Code setup, and it isn't a clever alias or a tidy prompt. It's a team. It picked up 10,000 GitHub stars in its first 48 hours, and four months later I still can't find anyone showing what that pattern actually costs to run in production.&lt;/p&gt;

&lt;p&gt;gstack is 23 opinionated tools acting as six roles that turn a single conversation into a pipeline. A CEO agent asks why the thing should exist before anyone writes code. An engineering manager sets the architecture. A designer generates variants and picks one. A release manager runs the ship cycle. A doc engineer and a QA close the loop. You install it in about 30 seconds, and suddenly your one-person project has a chain of command.&lt;/p&gt;

&lt;p&gt;That's the part worth sitting with. When the person running the most influential accelerator on earth ships his multi-agent workflow as a public repo, the "is multi-agent real or just demo-ware" question is settled. It's real. People do actual work this way.&lt;/p&gt;

&lt;p&gt;I run multi-agent setups in Claude Code every day, so none of this surprised me. What caught my attention was the gap nobody talks about. "Install in 30 seconds" quietly means "on your laptop, with your credentials, no audit trail, no per-role access control, no shared bill." For a solo developer that's perfect. For a company that wants the same pattern in production, it's the start of a different problem.&lt;/p&gt;

&lt;p&gt;This article is about that gap. What does gstack look like when you rebuild it on AWS Bedrock, and when is the extra work actually worth it?&lt;/p&gt;




&lt;h2&gt;
  
  
  gstack is the pattern, not the code
&lt;/h2&gt;

&lt;p&gt;Let me be precise about what I'm porting. I'm not lifting Garry Tan's files onto AWS. gstack is written for Claude Code, and it belongs there. What travels is the idea: a small set of specialized agents, each with one job, coordinated so the output of one feeds the next.&lt;/p&gt;

&lt;p&gt;The way I think about Claude Code maturity: five levels, roughly Prompt, Skill, Skill Chain, Agent, and Agent Team, with the payoff climbing at each step. Level five, the agent team, is where the big multiplier lives. gstack is a level-five artifact. A team you can install.&lt;/p&gt;

&lt;p&gt;So the real question was never "how do I copy gstack." The question is: I like level five, so how do I run it where a team of engineers, an auditor, and a finance lead can all live with it? That's the Bedrock conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mapping the six roles to AWS services
&lt;/h2&gt;

&lt;p&gt;Bedrock's answer to this shape is AgentCore: one orchestrator agent routing work to specialized sub-agents. (If you knew this pattern as Bedrock Agents multi-agent collaboration: AWS renamed that service "Classic" and closes it to new customers on July 30, 2026. AgentCore is where the pattern lives now.) That maps onto gstack's roles almost one to one. The interesting part is which AWS service backs each role, because that's where the local pattern gains its production teeth.&lt;/p&gt;

&lt;p&gt;The six roles line up like this.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;gstack role&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;AWS Bedrock equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CEO&lt;/td&gt;
&lt;td&gt;Validates the business case before any code ("why does this need to exist?")&lt;/td&gt;
&lt;td&gt;Sub-agent fronted by Bedrock Guardrails to filter requests with no business justification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering Manager&lt;/td&gt;
&lt;td&gt;Sets architecture up front&lt;/td&gt;
&lt;td&gt;Sub-agent backed by a Knowledge Base of your internal architecture, plus the Well-Architected Tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Designer&lt;/td&gt;
&lt;td&gt;Generates 4-6 variants, picks the best&lt;/td&gt;
&lt;td&gt;Parallel model invocations, scored with AgentCore evaluations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Release Manager&lt;/td&gt;
&lt;td&gt;Runs the release cycle&lt;/td&gt;
&lt;td&gt;Sub-agent with CodePipeline and CodeBuild access through an MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doc Engineer&lt;/td&gt;
&lt;td&gt;Keeps the docs in step with what shipped&lt;/td&gt;
&lt;td&gt;Sub-agent writing to the docs repo through an MCP server, grounded on the same Knowledge Base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;Tests before the release manager ships&lt;/td&gt;
&lt;td&gt;Sub-agent gated on AgentCore evaluations, running tests via CodeBuild&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(A precision note: gstack is technically 23 tools that act as these six roles. I'm mapping the roles because that's the layer that transfers.)&lt;/p&gt;

&lt;p&gt;Forget the specific service names for a second. What the table really shows is a shift in what "a role" means. On your laptop, the CEO agent is a system prompt. On Bedrock, that same agent is a system prompt plus a guardrail policy plus an IAM role that literally cannot touch your deploy pipeline. The role stops being a suggestion. It becomes an enforced boundary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzrq64rj7qkn57y2h4f1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzrq64rj7qkn57y2h4f1.png" alt="Bedrock orchestrator agent routing to CEO, Engineering Manager, Designer, and Release Manager sub-agents, with a CloudTrail, CloudWatch, and IAM audit floor underneath" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The orchestrator routes to each specialized sub-agent, and every one of them runs on top of the same audit floor: CloudTrail for decisions, CloudWatch for metrics, IAM for least-privilege access.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The architecture, in one picture
&lt;/h2&gt;

&lt;p&gt;Strip away the service logos and the Bedrock version looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User / Event
     │
     ▼
Orchestrator Agent on AgentCore  (the coordinator)
     ├── CEO Agent                  → Guardrails + Claude
     ├── Engineering Manager Agent  → internal KB + Claude
     ├── Designer Agent             → parallel invocations + evaluations
     ├── Release Manager Agent      → CodePipeline via MCP + Claude
     ├── Doc Engineer Agent          → docs repo via MCP + KB
     └── QA Agent                    → evaluations + CodeBuild
     │
     ▼
CloudTrail   → every tool call and agent decision, logged
CloudWatch   → latency and token metrics per agent
IAM          → each agent gets its own least-privilege role
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The three lines at the bottom are the whole reason to do this. On a laptop, all six agents run as &lt;em&gt;you&lt;/em&gt;. They share your credentials, your shell, your access to everything. On Bedrock, the Release Manager agent can reach CodePipeline and nothing else. The CEO agent can read the request and write a verdict, but it can't deploy. If someone asks later "why did the system approve this change," CloudTrail has the answer with a timestamp.&lt;/p&gt;

&lt;p&gt;That's not a feature you notice on day one. It's the feature you're grateful for during the incident review six months later.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually changes: local vs. Bedrock
&lt;/h2&gt;

&lt;p&gt;This is the part the migration blog posts skip. The pattern is identical. The operational reality is not.&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;gstack local (Claude Code)&lt;/th&gt;
&lt;th&gt;gstack pattern on Bedrock&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Audit&lt;/td&gt;
&lt;td&gt;No trail. You can't reconstruct what each agent decided&lt;/td&gt;
&lt;td&gt;CloudTrail logs every tool call and decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access control&lt;/td&gt;
&lt;td&gt;Everything runs with the developer's credentials&lt;/td&gt;
&lt;td&gt;Each agent gets its own IAM role, least privilege&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Billing&lt;/td&gt;
&lt;td&gt;Individual subscription&lt;/td&gt;
&lt;td&gt;Centralized in AWS, visible by team, project, environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;One developer, one session&lt;/td&gt;
&lt;td&gt;Many developers, parallel sessions, no collision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;No formal guardrails&lt;/td&gt;
&lt;td&gt;AgentCore policy plus Guardrails on each agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;The developer's local tools&lt;/td&gt;
&lt;td&gt;AWS MCP server for any AWS service&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that table as a translation of one word: &lt;em&gt;ownership&lt;/em&gt;. Local gstack is owned by a person. Bedrock gstack is owned by an organization. Everything in the right column is what "owned by an organization" costs and buys.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 30 seconds vs. the several hours
&lt;/h2&gt;

&lt;p&gt;gstack's pitch is "install in 30 seconds." That's true, and it's the right pitch for what it is.&lt;/p&gt;

&lt;p&gt;The Bedrock version has no such pitch. You're defining IAM roles, writing agent definitions, standing up a Knowledge Base, wiring MCP integrations, and turning on CloudTrail. That's not a 30-second job. Anyone who tells you otherwise is selling something.&lt;/p&gt;

&lt;p&gt;I'm not going to hand you a fake stopwatch number here, because I haven't run this exact port end to end, and inventing a duration would be the kind of thing this whole series exists to push back against. What I can tell you from running multi-agent work daily is where the time goes. It goes into IAM. It always goes into IAM. The agents are the easy part. The least-privilege role for each one, tested so it can do its job and nothing more, is the work. I'm building a scoped version of this port in my lab, meters on, and the measured numbers will get their own article.&lt;/p&gt;

&lt;p&gt;So is it worth it? That depends entirely on who's asking.&lt;/p&gt;

&lt;p&gt;If you're a solo developer or a two-person startup, almost certainly not. The audit trail protects you from a compliance question nobody is asking yet. The per-agent IAM roles guard against a blast radius that, at your size, is just your own laptop. Stay on gstack. Ship. The 30 seconds is the correct answer.&lt;/p&gt;

&lt;p&gt;If you're a team of five or more engineers, or anyone with a compliance obligation, the math flips. The moment "which agent approved this deploy" becomes a question a real human has to answer, CloudTrail stops being overhead and starts being the cheapest insurance you own. The moment two developers run the pattern at once, shared IAM and centralized billing stop being bureaucracy and start being the thing that keeps the wheels on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrt0czohu31g4uhdcjeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrt0czohu31g4uhdcjeg.png" alt="Two-column comparison: for a solo developer or early startup, Bedrock's audit, access control, billing, and scale features are overhead; for a team of five or more with compliance needs, the same features are insurance" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Same six agents, same four dimensions. On the left they read as overhead; on the right, as insurance. The scale is what flips the answer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The dishonest version of this article sells Bedrock as the universal upgrade. That's not what it is. Bedrock earns its place at a specific scale, and naming that scale out loud is more useful than another "why you should migrate everything" post.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd tell you before you start
&lt;/h2&gt;

&lt;p&gt;A few things I'd want to know before rebuilding this pattern, learned from running agent teams rather than from this specific port.&lt;/p&gt;

&lt;p&gt;The orchestrator is where your design lives or dies. gstack's magic is the handoff between roles, and on Bedrock that handoff is the orchestrator's routing logic. Get that wrong and you have six agents talking past each other. Spend your design budget there. The individual agents are the easy part.&lt;/p&gt;

&lt;p&gt;Guardrails on the CEO agent are the entire point of it. The whole reason a "business validation" agent earns its slot is that it says no. If its guardrail is loose, it's a rubber stamp with a token bill attached.&lt;/p&gt;

&lt;p&gt;And least privilege is the feature you came for. It's tempting to give every agent broad permissions to get things working, then tighten later. Later never comes. If you're going to pay the setup cost of Bedrock at all, the per-agent IAM boundary is the thing you're paying for. Don't skip it and keep the overhead.&lt;/p&gt;

&lt;p&gt;Build. Document. Share. Repeat. This series was never here to tell you Bedrock wins. It's here to show the actual trade, so you can make the call for your own team, at your own scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Three ways to take this further, pick your commitment level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low:&lt;/strong&gt; Go read gstack. It installs in 30 seconds and it'll change how you think about a single Claude Code session, whether or not you ever touch Bedrock. Then tell me in the comments which of the six roles you'd actually keep. I suspect not everyone needs all six.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medium:&lt;/strong&gt; If you've mapped a multi-agent pattern onto Bedrock AgentCore, I want the part I left out: what did the setup actually cost you in time and dollars? I skipped the stopwatch on purpose. Yours would make this article better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High:&lt;/strong&gt; Do the real port. Take the pattern, build the orchestrator plus the four documented agents on Bedrock, log every decision to CloudTrail, and write up where the design fought you. That's the article I'd read next, and if you write it, I'll link it here.&lt;/p&gt;

&lt;p&gt;The pattern is Garry Tan's. Full credit to him and to gstack for making level-five agent teams something you can install instead of theorize about. The question of where to run it is the one worth arguing over.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://github.com/garrytan/gstack" rel="noopener noreferrer"&gt;gstack&lt;/a&gt; by Garry Tan (open-sourced March 2026), covered by Charlie Hills on LinkedIn; &lt;a href="https://aws.amazon.com/bedrock/agentcore/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore&lt;/a&gt; (Bedrock Agents "Classic" &lt;a href="https://docs.aws.amazon.com/bedrock/latest/userguide/agents-multi-agent-collaboration.html" rel="noopener noreferrer"&gt;closes to new customers on July 30, 2026&lt;/a&gt;), &lt;a href="https://aws.amazon.com/cloudtrail/" rel="noopener noreferrer"&gt;CloudTrail&lt;/a&gt;, and &lt;a href="https://aws.amazon.com/iam/" rel="noopener noreferrer"&gt;IAM&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  BuildToLearn #AWSCommunity #LearnInPublic
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>aiagents</category>
      <category>amazonbedrock</category>
      <category>learninpublic</category>
    </item>
    <item>
      <title>AWS Runs Kiro and Amazon Q on Strands. Why Isn't It in Your Stack Evaluation?</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Wed, 08 Jul 2026 19:05:56 +0000</pubDate>
      <link>https://dev.to/rivadaviam/aws-runs-kiro-and-amazon-q-on-strands-why-isnt-it-in-your-stack-evaluation-53hp</link>
      <guid>https://dev.to/rivadaviam/aws-runs-kiro-and-amazon-q-on-strands-why-isnt-it-in-your-stack-evaluation-53hp</guid>
      <description>&lt;p&gt;Open any "which agent framework should I use" post from the last six months. You'll see LangGraph. You'll see CrewAI. Maybe LlamaIndex, maybe OpenAI's Agents SDK. You almost never see Strands.&lt;/p&gt;

&lt;p&gt;That's odd, because Strands is the framework AWS trusts with its own products. Kiro runs on it. So do Amazon Q, AWS Glue, and AWS Transform for .NET (&lt;a href="https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/" rel="noopener noreferrer"&gt;AWS's own announcement&lt;/a&gt; names them). It crossed &lt;a href="https://aws.amazon.com/blogs/opensource/" rel="noopener noreferrer"&gt;25 million downloads&lt;/a&gt; by its one-year anniversary in May 2026, hit v1.7.0 on June 25, and sits at 6.4k GitHub stars. Cox Automotive runs 17 production agents on it. This is not a science project.&lt;/p&gt;

&lt;p&gt;So the gap isn't coverage anymore. A year ago you could barely find a tutorial. Now a Medium series, an InfoQ writeup, and YouTube playlists all exist. The gap moved. It's an &lt;em&gt;evaluation&lt;/em&gt; gap. Everyone benchmarks LangGraph against CrewAI and quietly leaves out the framework AWS runs Kiro on. If you're picking an agent framework on AWS and Strands isn't even on your shortlist, that's worth a second look.&lt;/p&gt;

&lt;p&gt;Full disclosure before we go further. I have not shipped a production system on Strands. I have run every code example in this article against Bedrock Nova (they work as printed; 2-3 seconds per agent call, under a cent total), read the documentation, and pulled together what the adopter evidence actually shows so you don't start from a blank page. When I'm guessing, I'll say so.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Strands actually is
&lt;/h2&gt;

&lt;p&gt;Strands is an open-source SDK from AWS for building AI agents. The pitch, once you strip the marketing, is model-driven agents: you give the model a set of tools and a prompt, and the model itself decides how to plan, when to call a tool, and when it's done. You are not hand-wiring a state machine of "if the model says X, call Y." The loop that connects the model to its tools is the framework's job.&lt;/p&gt;

&lt;p&gt;That framing matters because it's the opposite of how a lot of people first build agents. My own instinct, and probably yours, is to reach for something explicit. Step Functions. A big orchestration graph. Nodes and edges you can point at. Strands bets that the model is good enough now that most of that scaffolding is wasted effort.&lt;/p&gt;

&lt;p&gt;The core of a Strands agent is small enough to fit in your head:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;calculator&lt;/span&gt;

&lt;span class="c1"&gt;# The agent is: a model + a set of tools + a prompt.
# You don't write the plan-act-observe loop. The SDK runs it,
# and the MODEL decides which tools to call and when to stop.
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is 3111696 divided by 48?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole thing. No graph. No explicit routing. Defining your own tool is a decorator on a Python function, which is the part that clicked for me. The docstring and type hints become the tool's contract that the model reads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_invoice_total&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Return the current month&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s invoice total for an AWS account.

    Args:
        account_id: the 12-digit AWS account number
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Your real logic goes here. The docstring above is what the
&lt;/span&gt;    &lt;span class="c1"&gt;# model actually reads to decide when to call this tool, so the
&lt;/span&gt;    &lt;span class="c1"&gt;# docstring IS the interface. Write it for the model, not just for humans.
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mf"&gt;1284.50&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_invoice_total&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How much did account 123456789012 spend this month?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interesting design choice is that the docstring is not documentation sitting next to the code. It &lt;em&gt;is&lt;/em&gt; the interface the model sees. Sloppy docstring, sloppy tool use. That single detail tells you the whole framework leans on the model's judgment instead of your control flow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AWS built this instead of pointing you at Bedrock Agents
&lt;/h2&gt;

&lt;p&gt;This was my first real question. AWS already has Bedrock Agents, a managed service where you define an agent in the console, attach action groups, and let Bedrock run it. So why ship a separate SDK?&lt;/p&gt;

&lt;p&gt;The honest answer, from what I can piece together, is that they solve different problems. Bedrock Agents is managed and console-first. It's great until you want your agent logic to live in your codebase, in version control, tested like the rest of your application, running wherever your code runs. Strands is code-first and model-agnostic. It works with Bedrock and Nova, but the SDK is not locked to a single model provider.&lt;/p&gt;

&lt;p&gt;Here's the mental model, and this one I can back with AWS's own words. Think of it the way infrastructure tooling splits. The runtime that executes your workload is one layer. The framework you write to define that workload is another. Strands is the framework you write. AgentCore is the managed runtime that hosts and scales it. The &lt;a href="https://aws.amazon.com/bedrock/agentcore/faqs/" rel="noopener noreferrer"&gt;AgentCore FAQ&lt;/a&gt; says it directly: AgentCore Runtime deploys and scales agents built with "any open-source framework (such as CrewAI, LangGraph, LlamaIndex, Google ADK, OpenAI Agents SDK, or Strands Agents)." You author with Strands. You deploy and run at scale with AgentCore.&lt;/p&gt;

&lt;p&gt;That split explains why the two names keep showing up together. You author with the framework, then deploy with the runtime. It also explains why "Strands vs. AgentCore" is the wrong question. They're not competing. One writes the agent, the other runs it at scale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m4bjfwrx5ru92atfiw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m4bjfwrx5ru92atfiw2.png" alt="Layered diagram: Bedrock models at the bottom, Strands SDK as the authoring layer you write, AgentCore as the managed runtime that runs it" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The split that makes "Strands vs. AgentCore" the wrong question: you write one, the other runs it.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting to a first agent
&lt;/h2&gt;

&lt;p&gt;The setup path is standard Python, and standard AWS credentials, which is a relief after some agent frameworks that ask you to adopt a whole platform first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Strands is just a Python package. No console clicking to get started.&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;strands-agents strands-agents-tools

&lt;span class="c"&gt;# It talks to Bedrock through your normal AWS credentials.&lt;/span&gt;
&lt;span class="c"&gt;# Same profile, same region, same IAM you already use for boto3.&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-profile
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One detail will save you a confused hour. Most tutorials still tell you to go enable model access in the Bedrock console first. That advice is stale. Since &lt;a href="https://aws.amazon.com/about-aws/whats-new/2025/10/amazon-bedrock-automatic-enablement-serverless-foundation-models/" rel="noopener noreferrer"&gt;October 2025&lt;/a&gt;, Bedrock enables serverless foundation models automatically in every commercial region. The manual "Model access" page is gone. The one exception: Anthropic models still ask for a one-time usage form before first use. Nova models need nothing. If a guide sends you hunting for a console page that no longer exists, that's the guide's age showing, not your mistake.&lt;/p&gt;

&lt;p&gt;With credentials sorted, pointing the agent at a specific model is explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BedrockModel&lt;/span&gt;

&lt;span class="c1"&gt;# Being explicit about the model is a cost and capability decision,
# not a detail. Nova Pro is AWS's own model and is cheaper per token
# than the top-tier Claude models; a strong Claude model reasons harder
# but costs more. For an agent that loops and calls tools many times
# per task, that per-call cost multiplies fast.
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BedrockModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us.amazon.nova-pro-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# US cross-region inference profile
&lt;/span&gt;    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# lower temp: more deterministic tool selection,
&lt;/span&gt;                      &lt;span class="c1"&gt;# which is usually what you want for agents that act
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_invoice_total&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;temperature=0.3&lt;/code&gt; is a deliberate choice worth explaining. For a chatbot you might want warmth and variety, so you run it hot. For an agent that picks tools and takes actions, you want it boring and repeatable. High temperature means the model might improvise a different tool sequence run to run, and non-determinism in something that touches your systems is a debugging nightmare. Lower temperature, more predictable actions.&lt;/p&gt;

&lt;p&gt;Pairing Strands with Nova Pro is the same kind of decision made at the model layer. Nova is AWS's own model family, and it tends to cost less per token than the premium models. When your agent loops, plans, calls a tool, reads the result, and plans again, you pay for every hop. A model that's marginally smarter but several times more expensive can quietly turn a cheap task into a real bill. Running the agent on Nova reads as an intentional cost posture, not just AWS promoting its own model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where I got skeptical
&lt;/h2&gt;

&lt;p&gt;I don't want to write the breathless "this changes everything" piece, because that's exactly the content this topic doesn't need. So let me lay out my honest doubt.&lt;/p&gt;

&lt;p&gt;Model-driven control flow is elegant right up until you need to know &lt;em&gt;why&lt;/em&gt; the agent did something. When the model owns the plan, your debugging surface changes. You are no longer reading a state machine. You are reading a transcript of what the model decided, and asking why it decided that. That's a real trade-off, and the docs are understandably optimistic about it. I'd want to see observability and tracing in a genuine multi-tool workload before I trusted it with anything that spends money or mutates data.&lt;/p&gt;

&lt;p&gt;The other open question is what kind of production evidence exists. There's plenty of it now, and that's the good news. Smartsheet presented a Strands session at re:Invent 2025 (BIZ210). Cox Automotive runs 17 production agents on it. Jit, Landchecker, and Verisk show up in &lt;a href="https://aws.amazon.com/blogs/machine-learning/enabling-customers-to-deliver-production-ready-ai-agents-at-scale/" rel="noopener noreferrer"&gt;AWS's own writeup&lt;/a&gt; on delivering production agents at scale. And AWS runs Kiro, Amazon Q, and Glue on it, which is about as strong a bet as a vendor can place on its own tooling.&lt;/p&gt;

&lt;p&gt;One caveat belongs front and center. Almost all of that evidence is AWS-authored. It's the vendor telling you its framework works, which is exactly what a vendor does. The independent post-mortem, the "we picked Strands over LangGraph for these reasons and this is where it hurt," barely exists yet. Setup tutorials, yes. Marketing vignettes, yes. A neutral engineer walking through six months of running it in anger, no. So the coverage gap closed, but a depth gap opened in its place. Being early to that depth still cuts both ways. You get the clean runway. You also get to find the sharp edges first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this belongs in your evaluation
&lt;/h2&gt;

&lt;p&gt;Step back from the code for a second. The reason to put Strands on your shortlist isn't that it beats LangGraph. I haven't run that comparison honestly enough to claim it, and neither has most of the internet yet. That's the part worth sitting with.&lt;/p&gt;

&lt;p&gt;Frameworks are consolidating fast in 2026. AutoGen already got absorbed into Microsoft's Agent Framework. The market clearly wants fewer, cloud-native options. A first-party AWS framework with 25M downloads, a year of releases, and AWS running its own flagship products on it is a strong candidate to be one of the survivors. Leaving it out of a framework comparison because you hadn't heard of it a year ago is a decision you're making by accident.&lt;/p&gt;

&lt;p&gt;Documentation isn't overhead. It's thinking made visible. Right now the thinking that's visible about Strands is AWS's own. Nobody outside the vendor has weighed it honestly against the frameworks everyone already benchmarks. That's the messy middle, and the messy middle is where learning lives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it, then tell me where I'm wrong
&lt;/h2&gt;

&lt;p&gt;If you have ten minutes: &lt;code&gt;pip install strands-agents&lt;/code&gt;, run the calculator example, and watch the model pick the tool on its own. That's the whole "aha" in one command.&lt;/p&gt;

&lt;p&gt;If you have an afternoon: build one real tool for something you actually use, an internal API, a cost lookup, a status check, and see how far the docstring-as-interface idea carries you before it strains.&lt;/p&gt;

&lt;p&gt;If you have a weekend and you already run agents in production: put Strands next to LangGraph or CrewAI on a task you actually care about, and write down where each one hurt. That comparison is the missing artifact. Every framework roundup skips Strands, and every Strands writeup skips the comparison. Whoever publishes an honest head-to-head fills the one hole in the whole conversation.&lt;/p&gt;

&lt;p&gt;I'll be doing the same, in the open, wrong turns included. If you've already built something on Strands, or you think my framework-versus-runtime read of the AgentCore relationship is off, tell me in the comments. I'd rather be corrected early than confident and wrong. Build. Document. Share. Repeat.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/" rel="noopener noreferrer"&gt;Introducing Strands Agents, an open-source AI agents SDK&lt;/a&gt; (AWS, names Kiro, Amazon Q, Glue, Transform for .NET) · &lt;a href="https://aws.amazon.com/blogs/machine-learning/enabling-customers-to-deliver-production-ready-ai-agents-at-scale/" rel="noopener noreferrer"&gt;Enabling customers to deliver production-ready AI agents at scale&lt;/a&gt; (AWS ML Blog, named adopters) · &lt;a href="https://strandsagents.com/" rel="noopener noreferrer"&gt;Strands Agents documentation&lt;/a&gt; · &lt;a href="https://github.com/strands-agents/sdk-python" rel="noopener noreferrer"&gt;Strands Agents SDK on GitHub&lt;/a&gt; · &lt;a href="https://aws.amazon.com/bedrock/agentcore/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore&lt;/a&gt; · &lt;a href="https://aws.amazon.com/ai/generative-ai/nova/" rel="noopener noreferrer"&gt;Amazon Nova&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>aiagents</category>
      <category>generativeai</category>
      <category>learninpublic</category>
    </item>
    <item>
      <title>From Demo to Production: What GA Actually Means for AWS AI Agents</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:42:12 +0000</pubDate>
      <link>https://dev.to/rivadaviam/from-demo-to-production-what-ga-actually-means-for-aws-ai-agents-11f</link>
      <guid>https://dev.to/rivadaviam/from-demo-to-production-what-ga-actually-means-for-aws-ai-agents-11f</guid>
      <description>&lt;p&gt;Two days. ~$363. That was my Knowledge Base lesson.&lt;/p&gt;

&lt;p&gt;I was re-syncing a Bedrock Knowledge Base over and over, tuning it, watching it fail, fixing it, syncing again. Every sync re-embedded the documents. Every re-embed spent tokens. The tokens stacked up quietly in the background while I stared at retrieval quality, not the meter. The bill showed up two days later and taught me a rule I still use: ask about cost &lt;em&gt;before&lt;/em&gt; the invoice, not after.&lt;/p&gt;

&lt;p&gt;I bring that up because the AWS story in 2026 is no longer about picking a model. It's about running agents in production, for hours, sometimes days, on their own. And production is exactly where quiet meters, hidden quotas, and "we'll figure out cost later" turn into real money. The demo is free. Production sends you a bill.&lt;/p&gt;

&lt;p&gt;So let me look at what "GA" actually means this year, using the specifics AWS published, not the keynote adjectives.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pitch changed from "try this model" to "put agents to work"
&lt;/h2&gt;

&lt;p&gt;At re:Invent 2025, the framing shifted. AWS stopped leading with "try this better model" and started leading with agents that operate as an extension of your team: Kiro, a Security Agent, a DevOps Agent, described as "frontier agents" that work for hours or days at a time (&lt;a href="https://www.aboutamazon.com/news/aws/aws-re-invent-2025-ai-news-updates" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That's a bigger claim than it sounds. A model call returns in seconds and you eyeball the result. An agent that runs for a day makes hundreds of decisions you never see, spends tokens you didn't budget line-by-line, and holds sessions open while it works. The moment an agent runs unattended, every question I learned to ask the hard way stops being optional. What does this cost? What are the limits? How do I know it's behaving?&lt;/p&gt;

&lt;p&gt;The model catalog exploded in parallel. Bedrock went from roughly 60 to nearly 100 models, adding Mistral, Google, NVIDIA, OpenAI, MiniMax, Moonshot, and Qwen (&lt;a href="https://aws.amazon.com/blogs/aws/" rel="noopener noreferrer"&gt;AWS News Blog&lt;/a&gt;). That includes GPT-5.5, GPT-5.4, and Codex running on Bedrock (&lt;a href="https://www.aboutamazon.com/news/aws/bedrock-openai-models" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;). Amazon's own Nova 2 line went multimodal end to end. Nova 2 Omni handles text, image, video, and voice, and Nova 2 Sonic does speech-to-speech (&lt;a href="https://aws.amazon.com/blogs/aws/top-announcements-of-aws-reinvent-2025/" rel="noopener noreferrer"&gt;AWS re:Invent 2025 top announcements&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The model count hides the real question. None of it matters if you can't operate the thing safely, which is why the announcements I actually care about aren't models at all.&lt;/p&gt;




&lt;h2&gt;
  
  
  The GA list nobody puts on a slide
&lt;/h2&gt;

&lt;p&gt;The interesting graduations this year are the boring-sounding ones. The plumbing that separates a prototype from something you'd let touch production data.&lt;/p&gt;

&lt;p&gt;Three pieces of Amazon Bedrock AgentCore reached general availability:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore &lt;strong&gt;harness&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Takes you from idea to a running agent without writing your own orchestration&lt;/td&gt;
&lt;td&gt;GA, June 2026 (&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-bedrock-agentcore-harness-generally-available/" rel="noopener noreferrer"&gt;AWS What's New&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore &lt;strong&gt;Evaluations&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;13 built-in evaluators plus Ground Truth to score agent behavior&lt;/td&gt;
&lt;td&gt;GA (&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/agentcore-evaluations-generally-available/" rel="noopener noreferrer"&gt;AWS What's New&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore &lt;strong&gt;Policy&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fine-grained control over which tools an agent can call, plus Guardrails&lt;/td&gt;
&lt;td&gt;GA, March 2026 (&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/policy-amazon-bedrock-agentcore-generally-available/" rel="noopener noreferrer"&gt;AWS What's New&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that table again. Evaluation, policy, and guardrails going GA is the real signal — not another model. A market that's still doing demos doesn't ship evaluation frameworks. A market that's putting agents in front of customers does. AWS is telling you where it thinks the field is: past the "look, it works" phase and into "prove it works, and prove it stays inside the lines."&lt;/p&gt;

&lt;p&gt;The harness matters because orchestration is where hand-rolled agents rot. You start with a clean loop: call model, run tool, feed result back. Six weeks later you're maintaining retry logic, session state, and timeout handling you never meant to own. A managed harness moves that burden to AWS. The trade-off, and I'll come back to this, is that you now depend on AWS's harness instead of your own.&lt;/p&gt;

&lt;p&gt;Evaluations is the piece I'd reach for first, because it answers the question my $363 bill was really about: &lt;em&gt;how do you know?&lt;/em&gt; Thirteen built-in evaluators plus Ground Truth means you can score an agent's output against expected answers instead of vibes. If you've ever shipped a RAG pipeline and "tested" it by asking it three questions you already knew the answers to, you know why this exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  The specifics that decide whether you can afford it
&lt;/h2&gt;

&lt;p&gt;Now the part the keynote skips. Running an agent in production runs into limits, and the limits have numbers.&lt;/p&gt;

&lt;p&gt;Two quotas stand out. AgentCore raised per-agent throughput from 25 to 200 TPS, and set the default for active session workloads at 5,000 per account. That 5,000 only applies in US East (N. Virginia) and US West (Oregon). Every other region gets 2,500 (&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/release-notes.html" rel="noopener noreferrer"&gt;AgentCore release notes&lt;/a&gt;). Both are adjustable through Service Quotas, which changes the failure mode: you won't hit a wall, you'll hit a support ticket you didn't know you needed to file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6z7hkkau9ldcmbazv9sf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6z7hkkau9ldcmbazv9sf.png" alt="Bar chart: AgentCore active session quota is 5,000 per account in US East and US West, but 2,500 in every other region" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The session cap nobody mentions in the keynote: deploy outside the two big US regions and you start with half the ceiling.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sit with those for a second. 200 transactions per second per agent is generous for most workloads. But if you're fanning out parallel tool calls, it's a ceiling you can hit. The active-sessions default is the one that bites quietly. An agent that "works for hours or days" holds a session the whole time. If your design spins up long-lived agents per user, per job, or per document, 5,000 concurrent isn't a lot. And if you deploy outside the two big US regions, you're working with half that. That's an architecture input, not a footnote. It's exactly the kind of number you want to know at design time — either you size under the default, or the quota-increase request goes in your launch checklist, not your incident retro.&lt;/p&gt;

&lt;p&gt;This is where my near-miss from an earlier lab keeps echoing. In lab-01, my first design used one S3 bucket with two prefixes: input and output in the same bucket. Clean. Simple. Catastrophic. Lambda would have triggered on its own output, looped, and billed me into the thousands before I noticed. The docs saved me. I read the trigger scope carefully and split the buckets before I deployed. The lesson wasn't "S3 is dangerous." It was that autonomous systems find the failure mode you didn't design against. An agent running unattended for a day is that same class of problem, scaled up. It won't loop on an S3 event — it'll loop on a reasoning step, or hold sessions it never releases, or retry a failing tool 400 times. Same shape, bigger blast radius.&lt;/p&gt;

&lt;p&gt;The cost picture is where I have to be honest with you, because the seed I built this from raised a question I can't fully answer yet: &lt;strong&gt;what does an AgentCore agent actually cost in production versus a hand-rolled Lambda plus Bedrock call?&lt;/strong&gt; I don't have a real bill to show you. Anyone who hands you a confident number right now is guessing. What I &lt;em&gt;can&lt;/em&gt; tell you is which meters are running: model tokens, session time, tool invocations, and any egress. The managed convenience of the harness is not free. If you take one thing from my Knowledge Base story: find the meters before you find the bill.&lt;/p&gt;

&lt;p&gt;One data-residency angle is worth flagging too. AgentCore's Web Search runs with zero data egress from your AWS environment (&lt;a href="https://aws.amazon.com/blogs/machine-learning/new-in-amazon-bedrock-agentcore-build-agents-with-broader-knowledge-and-continuous-learning/" rel="noopener noreferrer"&gt;AWS ML Blog&lt;/a&gt;), which matters if you're in a regulated shop and "the agent googled it" is not an acceptable data path.&lt;/p&gt;




&lt;h2&gt;
  
  
  A minimum path from idea to production
&lt;/h2&gt;

&lt;p&gt;If I were starting an agent on this stack today (and I'll be doing exactly that in an upcoming lab), here's the order I'd follow. Not because it's the only way, but because it front-loads the questions that cost me money when I ignored them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gt9cvz6y8ih3z2il0be.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gt9cvz6y8ih3z2il0be.png" alt="Flow diagram: the minimum path from idea to production — idea, harness, evaluate, policy, deploy, with the cost question asked at every gate" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Five gates, one recurring question. The order matters: evaluation before scale, policy while the surface is small.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Start with the idea and the harness. Get a single agent running with the managed harness before you touch anything fancy. One agent, one tool, one clear job. Prove the loop closes.&lt;/p&gt;

&lt;p&gt;Then wire up Evaluations &lt;em&gt;before&lt;/em&gt; you scale, not after. This is the reversal of how I did RAG the first time. Define your Ground Truth (the answers you expect) and let the 13 evaluators score the agent against them. If you can't measure it, you can't trust it running unattended.&lt;/p&gt;

&lt;p&gt;Next, set Policy and Guardrails while the surface is small. Decide which tools the agent may call and what it may never do. Locking down tool access on a two-tool agent is a five-minute job. Retrofitting it onto a sprawling one is a project.&lt;/p&gt;

&lt;p&gt;Only then think about deploy and scale. When you do, check your session math against that 5,000 cap and your throughput against 200 TPS &lt;em&gt;before&lt;/em&gt; you turn on real traffic. Ask the cost question at this step, out loud, with numbers. Model tokens, session duration, tool calls, egress. Write them down.&lt;/p&gt;

&lt;p&gt;That's the whole path: idea → harness → evaluation → policy → deploy, with the cost question asked at every gate instead of after the invoice. It's the Build-to-Learn loop applied to agents: build the smallest real thing, document the decisions, share what broke, repeat. Documentation isn't overhead. It's thinking made visible, and it's the thing that saved me in lab-01.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd measure in six months
&lt;/h2&gt;

&lt;p&gt;So is this real infrastructure or another hype cycle? Honestly — both, and the split is the interesting part.&lt;/p&gt;

&lt;p&gt;The plumbing is real. Evaluations, Policy, and Guardrails going GA is a market growing up. That's not marketing; that's AWS admitting the demo phase is over and betting on governance. I believe that part.&lt;/p&gt;

&lt;p&gt;The claims I'd hold at arm's length are the autonomy claims. Nova Act is quoted at 90% reliability for browser automation (&lt;a href="https://www.aboutamazon.com/news/aws/aws-re-invent-2025-ai-news-updates" rel="noopener noreferrer"&gt;About Amazon&lt;/a&gt;). Ninety percent sounds great until you ask ninety percent &lt;em&gt;of what&lt;/em&gt;. I dug into it: the figure comes from Amazon's own internal evals of specific hard UI actions (date pickers, dropdowns, popups) plus early-customer workflows (&lt;a href="https://labs.amazon.science/blog/nova-act" rel="noopener noreferrer"&gt;Amazon Science&lt;/a&gt;). Not an independent public benchmark. That doesn't make it fake; it makes it a number Amazon graded on Amazon's homework. And either way, a 10% failure rate on an agent that runs unattended for a day is a lot of failures nobody's watching.&lt;/p&gt;

&lt;p&gt;There are open questions I genuinely can't answer yet, and I'd rather hand them to you than fake an answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does an AgentCore agent cost in production versus a Lambda-plus-Bedrock build you wire yourself?&lt;/li&gt;
&lt;li&gt;How does AgentCore compare to LangGraph, CrewAI, or the equivalents on Azure and Vertex, and what does choosing the AWS agent stack lock you into?&lt;/li&gt;
&lt;li&gt;Where are the &lt;em&gt;customer&lt;/em&gt; case studies, not the launch posts?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a real bill or a real deployment on any of these, I want to hear it. That's not a rhetorical close. Those numbers are the content I don't have yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your move
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Low commitment:&lt;/strong&gt; drop a comment with the one AgentCore quota or cost you wish AWS documented more clearly. I'll compile what comes back into a follow-up. Community-sourced FinOps beats guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medium commitment:&lt;/strong&gt; if you've run AgentCore, LangGraph, or CrewAI in anything resembling production, tell me one thing that surprised you about the bill or the limits. One number is enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High commitment:&lt;/strong&gt; build the minimum path above (one agent, evaluated, policy-locked) and write up what broke. Tag it and I'll link to it. The best answer to "is this real?" is a runnable repo, not another opinion.&lt;/p&gt;

&lt;p&gt;I'll be putting an agent through this exact path in the next lab and publishing the meter readings, good or bad. Build. Document. Share. Repeat.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonbedrock</category>
      <category>aiagents</category>
      <category>generativeai</category>
    </item>
    <item>
      <title>I Spent ~$363 in Two Days on Bedrock — Cheap Lesson or Expensive One?</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Tue, 24 Mar 2026 16:48:50 +0000</pubDate>
      <link>https://dev.to/rivadaviam/i-spent-363-in-two-days-on-bedrock-cheap-lesson-or-expensive-one-3l48</link>
      <guid>https://dev.to/rivadaviam/i-spent-363-in-two-days-on-bedrock-cheap-lesson-or-expensive-one-3l48</guid>
      <description>&lt;p&gt;The pricing page told me embeddings were "per thousand tokens." The &lt;strong&gt;bill&lt;/strong&gt; told me what that actually means when you sync a corpus more than once while you are still learning.&lt;/p&gt;

&lt;p&gt;This is the story of a &lt;strong&gt;two-day spike&lt;/strong&gt; on my AWS account — mostly &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; — and what I took away from it. Spoiler: I do not think it was only money down the drain.&lt;/p&gt;




&lt;h2&gt;
  
  
  The receipt (literally)
&lt;/h2&gt;

&lt;p&gt;I pulled up &lt;strong&gt;Cost Explorer&lt;/strong&gt; after a weekend of experiments. Two consecutive days in December looked like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m04uwkccyx5hcdboj0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m04uwkccyx5hcdboj0p.png" alt="AWS billing breakdown: Bedrock and OpenSearch over two days" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Roughly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Total (two days)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;All services (shown)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$363&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon Bedrock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$353&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon OpenSearch Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of that was &lt;strong&gt;not&lt;/strong&gt; me chatting with Claude in the playground. It was &lt;strong&gt;Knowledge Base work&lt;/strong&gt;: pointing Bedrock at data in S3, running &lt;strong&gt;ingestion / sync jobs&lt;/strong&gt;, and &lt;strong&gt;re-running&lt;/strong&gt; them while I changed chunking, parsers, and paths — before I had a clear picture of how &lt;strong&gt;embedding tokens&lt;/strong&gt; accumulate across &lt;strong&gt;retries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I had expected "some cost." I had not internalized how fast &lt;strong&gt;repeat syncs&lt;/strong&gt; turn into &lt;strong&gt;repeat embeddings&lt;/strong&gt; for the same underlying text.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I thought I was doing
&lt;/h2&gt;

&lt;p&gt;I was building a &lt;strong&gt;RAG-style pipeline&lt;/strong&gt; over &lt;strong&gt;technical PDFs&lt;/strong&gt;: extract text, get it into a &lt;strong&gt;Bedrock Knowledge Base&lt;/strong&gt;, run &lt;strong&gt;retrieval&lt;/strong&gt;, and eventually wire that into an application.&lt;/p&gt;

&lt;p&gt;That sounds linear. In practice my early loop looked more like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload or point at objects in S3.&lt;/li&gt;
&lt;li&gt;Start a sync.&lt;/li&gt;
&lt;li&gt;Notice something wrong — layout, chunk boundaries, metadata, or retrieval quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change the preprocessing&lt;/strong&gt;, upload again, &lt;strong&gt;sync again&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Repeat step 4 until I understood what "good" looked like.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every pass felt like "fixing configuration." In billing terms, many passes looked like &lt;strong&gt;new embedding work&lt;/strong&gt;. The console does not always feel like spending money; &lt;strong&gt;Cost Explorer&lt;/strong&gt; does.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the invoice taught me (that the docs had not fully sunk in yet)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GenAI on AWS is not one line item.&lt;/strong&gt; For Knowledge Bases, the mental model that finally stuck:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion / embedding&lt;/strong&gt; is where large PDFs hurt — you pay for &lt;strong&gt;tokens processed into the vector store&lt;/strong&gt;, not for "having a PDF on disk."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval&lt;/strong&gt; and &lt;strong&gt;downstream model calls&lt;/strong&gt; are &lt;strong&gt;additional&lt;/strong&gt; meters. Separating "sync cost" from "query cost" matters when you debug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-syncing the same corpus&lt;/strong&gt; while you tune chunking is not a free redo. You are often paying for &lt;strong&gt;another full pass&lt;/strong&gt; over the same content unless you have designed for &lt;strong&gt;incremental&lt;/strong&gt; or &lt;strong&gt;diff-aware&lt;/strong&gt; updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is a secret — it is all in the documentation. &lt;strong&gt;The bill was the tutorial that actually stuck.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Lección cara o barata?
&lt;/h2&gt;

&lt;p&gt;If you judge only by the number on the screen, it was an &lt;strong&gt;expensive&lt;/strong&gt; lesson.&lt;/p&gt;

&lt;p&gt;If you judge by what I would pay for the same misunderstanding &lt;strong&gt;in production&lt;/strong&gt;, under deadline, with a team and customer trust on the line — &lt;strong&gt;learning it on my own lab account&lt;/strong&gt; starts to look &lt;strong&gt;cheap&lt;/strong&gt;. I paid once in dollars and once in humility. I would rather do that &lt;strong&gt;before&lt;/strong&gt; I ever optimize someone else's budget.&lt;/p&gt;

&lt;p&gt;So my answer: &lt;strong&gt;it was both.&lt;/strong&gt; Painful in the moment, &lt;strong&gt;valuable&lt;/strong&gt; in context — and only "wasteful" if I pretended nothing needed to change afterward.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I changed in how I build
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Measure before sync.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I stopped treating "upload and sync" as the first step. I added &lt;strong&gt;local&lt;/strong&gt; steps: approximate &lt;strong&gt;token counts&lt;/strong&gt;, &lt;strong&gt;preview chunk boundaries&lt;/strong&gt;, and sanity-check &lt;strong&gt;file sizes&lt;/strong&gt; &lt;em&gt;before&lt;/em&gt; triggering another full ingestion. That mindset is documented in &lt;strong&gt;&lt;a href="https://github.com/rivadaviam/aws-genai-cert-learning-journey/tree/main/labs/lab-02-kb-ingestion-basics" rel="noopener noreferrer"&gt;Lab 02: KB Ingestion — Foundations First&lt;/a&gt;&lt;/strong&gt; in the learning-journey repo — small CLI helpers, no cloud required for the first pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Separate "pipeline quality" from "vector store plumbing."&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I invested in a clearer &lt;strong&gt;PDF → clean text → intentional chunks → S3&lt;/strong&gt; path in &lt;strong&gt;&lt;a href="https://github.com/rivadaviam/aws-pdf-rag-mr" rel="noopener noreferrer"&gt;aws-pdf-rag-mr&lt;/a&gt;&lt;/strong&gt; — the companion repo with the &lt;strong&gt;full pipeline code&lt;/strong&gt; (Terraform, Lambda processor, Bedrock KB, S3 Vectors) that matches what Lab 02 points you toward &lt;em&gt;after&lt;/em&gt; the foundations. That way Bedrock sees &lt;strong&gt;stable, deliberate&lt;/strong&gt; chunks instead of whatever the default path produced on raw PDFs while I was still iterating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Use the cloud bill as a design review.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Billing alerts&lt;/strong&gt; and &lt;strong&gt;Cost Explorer&lt;/strong&gt; by service are now part of my &lt;strong&gt;definition of done&lt;/strong&gt; for experiments, not something I check when I get curious.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you are about to do the same experiment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with tiny files&lt;/strong&gt; — one short text, one sync, one retrieve — until the &lt;strong&gt;numbers&lt;/strong&gt; make sense.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read embedding and KB pricing&lt;/strong&gt; as &lt;strong&gt;token math&lt;/strong&gt;, then estimate &lt;strong&gt;tokens × price × number of sync attempts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat re-sync as a budget line&lt;/strong&gt;, not a config tweak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document decisions&lt;/strong&gt; (I use ADRs) so the next you does not repeat the same loop "just one more time."&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;I did not write this to scare anyone away from Bedrock or Knowledge Bases. I still use them. I write it because &lt;strong&gt;the messy middle&lt;/strong&gt; — including an invoice that made me stare at the screen — is part of &lt;strong&gt;learning in public&lt;/strong&gt; honestly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation is not overhead. It is thinking made visible.&lt;/strong&gt; So is a cost breakdown when it forces you to redraw your architecture.&lt;/p&gt;

&lt;p&gt;If this story saved you one accidental &lt;strong&gt;full re-embedding&lt;/strong&gt; of a giant PDF, it was worth more than those two days of spend.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Repos:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/rivadaviam/aws-genai-cert-learning-journey" rel="noopener noreferrer"&gt;aws-genai-cert-learning-journey&lt;/a&gt;&lt;/strong&gt; — learning path, ADRs, and &lt;strong&gt;Lab 02&lt;/strong&gt; docs (&lt;code&gt;labs/lab-02-kb-ingestion-basics/&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/rivadaviam/aws-pdf-rag-mr" rel="noopener noreferrer"&gt;aws-pdf-rag-mr&lt;/a&gt;&lt;/strong&gt; — &lt;strong&gt;implementation code&lt;/strong&gt; for the PDF → KB pipeline (the “after Lab 02” stack).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tags I'll use when I share:&lt;/strong&gt; &lt;code&gt;#BuildToLearn&lt;/code&gt; &lt;code&gt;#AWSGenAI&lt;/code&gt; &lt;code&gt;#AmazonBedrock&lt;/code&gt; &lt;code&gt;#LearnInPublic&lt;/code&gt; &lt;code&gt;#RAG&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you had a GenAI bill that taught you something the docs alone did not? I would genuinely like to hear what changed in your process afterward.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonbedrock</category>
      <category>generativeai</category>
      <category>learninpublic</category>
    </item>
    <item>
      <title>The Exam That Felt Like a Project Backlog: Passing AWS Certified Generative AI Developer – Professional</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Thu, 12 Mar 2026 18:05:35 +0000</pubDate>
      <link>https://dev.to/rivadaviam/the-exam-that-felt-like-a-project-backlog-passing-aws-certified-generative-ai-developer--2ljo</link>
      <guid>https://dev.to/rivadaviam/the-exam-that-felt-like-a-project-backlog-passing-aws-certified-generative-ai-developer--2ljo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part of my &lt;a href="https://dev.to/rivadaviam/the-build-to-learn-framework-how-a-near-disaster-taught-me-to-learn-in-public-c2e"&gt;Build-to-Learn with AWS GenAI&lt;/a&gt; series — where I share the messy middle of building production-grade GenAI systems on AWS, including the wrong turns.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Question 67. Beta exam. Eighty-five total questions. I almost lost it right there.&lt;/p&gt;

&lt;p&gt;Not my composure, exactly — more like my thread. The kind of focused engagement you need to hold through a complex orchestration scenario when your cognitive reserves have been running for two-plus hours. For a moment, I felt the concentration starting to slip. And then something unexpected happened instead: my brain stopped trying to answer the question and started designing it. &lt;em&gt;What if the routing layer worked this way? What if I extended this to handle the insurance claim pipeline I built?&lt;/em&gt; I caught myself, selected the answer, and kept moving. But the moment stayed with me.&lt;/p&gt;

&lt;p&gt;That involuntary drift wasn't a lapse in focus. It was evidence. Evidence that the way I'd prepared had taken root at the right level — not as recall, but as judgment. I almost lost my thread at question 67. What I found instead was proof that months of building had encoded something harder to shake than concentration. And at the Professional tier, that kind of judgment is the only thing being tested.&lt;/p&gt;

&lt;p&gt;I'd spent months preparing for this exam. More accurately: I'd spent months building, and the exam happened to follow.&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://www.credly.com/badges/7446afbf-7fa1-4450-be74-7e34e5454192" rel="noopener noreferrer"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Frivadaviam%2Faws-genai-cert-learning-journey%2Fmain%2F_bmad-output%2Fblog-articles%2Fgenai-badge.png" alt="AWS Certified Generative AI Developer – Professional"&gt;
  &lt;/a&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;
  &lt;a href="https://www.credly.com/earner/earned/badge/c4bf319f-af9f-468a-a8c3-127712f2e2f1" rel="noopener noreferrer"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Frivadaviam%2Faws-genai-cert-learning-journey%2Fmain%2F_bmad-output%2Fblog-articles%2Fgenai-early-adopter-badge.png" alt="AWS Early Adopter"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://www.credly.com/badges/7446afbf-7fa1-4450-be74-7e34e5454192" rel="noopener noreferrer"&gt;AWS Certified Generative AI Developer – Professional&lt;/a&gt;
  &amp;nbsp;·&amp;nbsp;
  &lt;a href="https://www.credly.com/earner/earned/badge/c4bf319f-af9f-468a-a8c3-127712f2e2f1" rel="noopener noreferrer"&gt;Early Adopter&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Certification, Why Now
&lt;/h2&gt;

&lt;p&gt;The AWS Certified Generative AI Developer – Professional is new enough that when I signed up, there were no public pass rates to anchor expectations. No community wisdom about which topics showed up most. No data on what the difficulty curve felt like. I was taking it as a Beta, which meant I was part of the cohort helping AWS calibrate the exam itself — and it meant 85 questions instead of the standard 75.&lt;/p&gt;

&lt;p&gt;That extra 10 is not trivial. By question 75 on an exam of this depth, your cognitive reserves have been running for hours. The later questions tend to be the more architecturally complex ones — multi-service integrations, guardrail trade-offs, agent orchestration patterns that require you to hold several moving parts in your head simultaneously. Adding 10 questions at the back end is a meaningful stamina tax, not just a scheduling footnote.&lt;/p&gt;

&lt;p&gt;I signed up anyway, because it was the right next step in this series. If I'm building production GenAI systems on AWS and documenting every decision publicly, the Professional certification closes the loop. It says: I understand this domain deeply enough to reason through novel scenarios I've never seen before — not just reproduce patterns from documentation I've read.&lt;/p&gt;

&lt;p&gt;There was a bonus I didn't know about when I registered: Beta cohort participants who pass receive an Early Adopter badge from AWS — a second credential recognizing that you helped define the exam itself. I didn't sign up for that badge. I signed up because the exam was there and the timing was right. But it's an accurate description of what taking a Beta actually means: you go in without a map, and if you make it through, you helped draw the map for everyone who comes after.&lt;/p&gt;

&lt;p&gt;What I didn't fully appreciate until exam day was how much the work I'd already done would matter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Starting With Skill Builder (And Why I Pivoted)
&lt;/h2&gt;

&lt;p&gt;My first instinct was &lt;a href="https://skillbuilder.aws" rel="noopener noreferrer"&gt;AWS Skill Builder&lt;/a&gt;. Official source. Authoritative. Comprehensive. The right instinct in principle.&lt;/p&gt;

&lt;p&gt;Here's what I didn't anticipate: the material is genuinely good, and it is genuinely heavy. Skill Builder covers the conceptual foundations of foundation models, the architecture of Amazon Bedrock, the nuances of RAG pipelines, evaluation frameworks, responsible AI — all of it with the depth you'd expect from the people who built the services. For someone building their knowledge base from scratch, it's excellent. For someone who's already been building with these services and needs to sharpen scenario reasoning, reading through it sequentially felt like re-reading a reference manual.&lt;/p&gt;

&lt;p&gt;I didn't abandon it. I still used Skill Builder as a reference layer — when a practice exam question surfaced a concept I couldn't fully explain, I went back to Skill Builder for the deep read. But it stopped being my primary study method about a month in, and I switched to two Udemy courses that fit how I actually learn.&lt;/p&gt;

&lt;p&gt;The first — &lt;a href="https://www.udemy.com/course/ultimate-aws-certified-generative-ai-developer-professional/" rel="noopener noreferrer"&gt;Ultimate AWS Certified Generative AI Developer Professional&lt;/a&gt; — gave me a more accessible conceptual ramp. Good structure, practical framing, the kind of explanations that build a mental model you can reason with rather than recall from. The second — &lt;a href="https://www.udemy.com/course/practice-exams-aws-certified-generative-ai-developer-pro/" rel="noopener noreferrer"&gt;Practice Exams AWS Certified Generative AI Developer Pro&lt;/a&gt; — I treated as a diagnostic tool rather than a score-chaser. Every wrong answer was a prompt for genuine investigation: not "why was I wrong" but "what would I build differently, and why?"&lt;/p&gt;

&lt;p&gt;The combination worked. But neither was the real differentiator.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Thing That Actually Mattered
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/rivadaviam/the-build-to-learn-framework-how-a-near-disaster-taught-me-to-learn-in-public-c2e"&gt;In my previous article&lt;/a&gt;, I wrote about how a near-disaster — an infinite loop that would have cost thousands in AWS bills — crystallized the Build-to-Learn Framework. The lab that came out of that experience was Lab 01: an automated insurance claim document processing pipeline built on Amazon Bedrock, Lambda, and S3.&lt;/p&gt;

&lt;p&gt;I built that lab months before finishing my certification prep. On purpose. That decision came with a risk I documented explicitly at the time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ADR-002: Build Lab 01 Before Completing Certification Prep

Status: Accepted

Context:
  Conventional wisdom says finish studying before building.
  The Build-to-Learn thesis says building is the studying.
  Taking the Professional exam before completing all formal modules
  means entering with gaps in coverage.

Decision:
  Build Lab 01 now. Ship it. Write the ADR. Then return to formal study.

Rationale:
  Professional-level exams test scenario reasoning, not recall.
  Reasoning is built through decisions with real consequences.
  A production-adjacent lab creates those consequences in a way
  no module can replicate.

Consequences:
  - Risk: Formal knowledge gaps may surface on exam
  - Benefit: Implementation judgment built before exam; scenarios will feel familiar
  - Accepted tradeoff: depth of experience &amp;gt; breadth of coverage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The consequences played out exactly as written. There were moments on the exam where I wished I'd read one more Skill Builder module. There were far more moments where I recognized a pattern because I'd lived it.&lt;/p&gt;

&lt;p&gt;The Build-to-Learn thesis is that building real systems before the exam encodes judgment, not just knowledge. And Professional-level exams don't test knowledge — they test judgment. They present scenarios you've never seen before and ask you to reason about what the right architecture would be, given a specific set of constraints and trade-offs. That kind of reasoning doesn't come from reading. It comes from having been in the situation.&lt;/p&gt;

&lt;p&gt;When a question presented a multi-agent orchestration scenario, I recognized the architectural patterns because I'd designed one. When a question asked about guardrail configuration trade-offs, I'd made those decisions in code and felt the consequences. When a question surfaced the cost implications of different model invocation strategies, I'd worried about that in production. The hours spent debugging Lambda triggers, writing Architecture Decision Records, and arguing with IAM policies translated directly into the ability to reason through novel scenarios under pressure.&lt;/p&gt;

&lt;p&gt;That's not a coincidence. That's the Framework, working.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Beta Exam Actually Feels Like
&lt;/h2&gt;

&lt;p&gt;No study guide can prepare you for question 75 on an 85-question exam.&lt;/p&gt;

&lt;p&gt;The experience is layered. The first 30 questions feel manageable — you're fresh, the cognitive load is still within capacity, and the scenarios are challenging but readable. By question 50, you're aware that you've been concentrating hard for a while. By question 70, your brain is doing something slightly different than it was at the start: it's working harder for the same output.&lt;/p&gt;

&lt;p&gt;The Beta format adds its own texture. There's no score at the end. You complete the exam, submit, and walk out not knowing. AWS collects results from the Beta cohort, calibrates the difficulty model against how candidates performed, and notifies you later. The wait is a specific kind of uncomfortable — you can't iterate on what you don't know, so you just wait.&lt;/p&gt;

&lt;p&gt;What I didn't expect was the moment at question 67 where my brain started drifting toward building rather than answering. It felt, in that moment, like distraction. In retrospect, it was a signal. The exam scenarios are written by people who think about these services the way builders think — as implementation decisions, not as trivia. When you've built with these tools, you speak the same language as the people writing the questions. The exam stops feeling like a test and starts feeling like a design discussion.&lt;/p&gt;

&lt;p&gt;I passed. The score came through later, along with something I hadn't expected: an Early Adopter badge from AWS, issued to the Beta cohort who helped define the exam before it was publicly available. I didn't sign up for that badge — I signed up for the challenge. But it's a fitting symbol. Being early meant no benchmarks, no pass-rate data, no community notes to fall back on. It meant the only preparation that counted was the preparation you'd actually done.&lt;/p&gt;

&lt;p&gt;The pass was less surprising than that moment at question 67 — because by then, the Framework had already proved its point. The Early Adopter badge just confirmed which cohort had been there first.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Study Stack, Honestly Ranked
&lt;/h2&gt;

&lt;p&gt;If you're preparing for this certification, here's what I'd actually recommend:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Build Something First
&lt;/h3&gt;

&lt;p&gt;Not a tutorial. Not a sandbox. A real system with real architecture decisions, real trade-offs, and documentation that forces you to articulate &lt;em&gt;why&lt;/em&gt; you made each choice. Write ADRs. Deploy it. Break it. Fix it. The judgment you build doing this is the single most transferable skill for a Professional-level exam.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Udemy Practice Exams — Scenario Reasoning Engine
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/practice-exams-aws-certified-generative-ai-developer-pro/" rel="noopener noreferrer"&gt;Practice Exams AWS Certified Generative AI Developer Pro&lt;/a&gt; — Use these to find your gaps, then investigate the gaps with genuine curiosity. The questions are scenario-based at the right level of complexity. Don't chase scores. Chase understanding.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Udemy Course — Conceptual Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.udemy.com/course/ultimate-aws-certified-generative-ai-developer-professional/" rel="noopener noreferrer"&gt;Ultimate AWS Certified Generative AI Developer Professional&lt;/a&gt; — Good for building the mental model. More accessible than Skill Builder for daily study. Use it to cover the conceptual landscape before stress-testing it with practice exams.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. AWS Skill Builder — Reference Layer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://skillbuilder.aws" rel="noopener noreferrer"&gt;skillbuilder.aws&lt;/a&gt; — Use it for depth, not breadth. When something comes up in practice exams that you can't fully explain, this is where you go for the authoritative version. Don't try to read it front to back unless that's genuinely how you learn — treat it as a reference library.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Certification Actually Means
&lt;/h2&gt;

&lt;p&gt;The certification isn't the story. The certification is the receipt.&lt;/p&gt;

&lt;p&gt;What the receipt is for: months of building real systems, making architecture decisions with real stakes, documenting wrong turns, and learning in public. The exam measured the output of that process. It didn't create it.&lt;/p&gt;

&lt;p&gt;I've said before that certifications are starting points, not destinations. Passing the Professional tier for GenAI development confirms that the domain knowledge is there — but it also clarifies what the next layer of questions looks like. The questions my brain was designing during the exam aren't going away. They're the next labs.&lt;/p&gt;

&lt;p&gt;Build. Document. Share. Repeat.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The GitHub repo for this series lives at &lt;a href="https://github.com/rivadaviam/aws-genai-cert-learning-journey" rel="noopener noreferrer"&gt;github.com/rivadaviam/aws-genai-cert-learning-journey&lt;/a&gt;. Lab 01 is there with full code, architecture diagrams, and ADRs.&lt;/p&gt;

&lt;p&gt;If you're preparing for this certification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low commitment:&lt;/strong&gt; Star the repo and follow along as I build the next lab&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium commitment:&lt;/strong&gt; Try building your own version of Lab 01 before your exam. Document one decision with an ADR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High commitment:&lt;/strong&gt; Share what you build publicly. The accountability changes everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The messy middle is where learning lives. Welcome to it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you taken this certification? What surprised you most about the exam? Drop it in the comments — I'd genuinely like to know.&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  BuildToLearn #AWSCommunity #LearnInPublic #AmazonBedrock
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>amazonbedrock</category>
      <category>generativeai</category>
      <category>learninpublic</category>
    </item>
    <item>
      <title>The Build-to-Learn Framework: How a Near-Disaster Taught Me to Learn in Public</title>
      <dc:creator>Martín Rivadavia</dc:creator>
      <pubDate>Wed, 04 Feb 2026 22:20:47 +0000</pubDate>
      <link>https://dev.to/rivadaviam/the-build-to-learn-framework-how-a-near-disaster-taught-me-to-learn-in-public-c2e</link>
      <guid>https://dev.to/rivadaviam/the-build-to-learn-framework-how-a-near-disaster-taught-me-to-learn-in-public-c2e</guid>
      <description>&lt;p&gt;I almost created an infinite loop that would have cost me thousands in AWS bills.&lt;/p&gt;

&lt;p&gt;And I'm grateful it almost happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;When I decided to pursue the &lt;strong&gt;AWS Certified Generative AI Developer&lt;/strong&gt; certification, I made myself a promise: I wouldn't just study for an exam. I would build real systems, make real mistakes, and share everything publicly—including the wrong turns.&lt;/p&gt;

&lt;p&gt;The AWS Skill Builder course has these "Bonus Assignments" scattered throughout. Most people skip them or treat them as quick checkboxes.&lt;/p&gt;

&lt;p&gt;I saw something different: each one was an invitation to build something &lt;strong&gt;production-ready&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My first assignment: an automated insurance claim processing pipeline using Amazon Bedrock.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jw01yuea3xn1w0q5xka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jw01yuea3xn1w0q5xka.png" alt="Architecture Diagram"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;User uploads to S3 → Lambda orchestrates 3-step Bedrock pipeline → Results saved to output bucket&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Near-Disaster
&lt;/h2&gt;

&lt;p&gt;My initial architecture was elegant. One S3 bucket, two prefixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/input&lt;/code&gt; for uploaded documents&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/output&lt;/code&gt; for processed results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clean. Simple. &lt;strong&gt;Catastrophic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what happens with that design:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Document lands in /input
2. Lambda triggers, processes document
3. Result written to /output (same bucket)
4. S3 event triggers Lambda again
5. Lambda processes the output file...
6. → Infinite loop. Infinite cost.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I caught this because I was writing an &lt;strong&gt;Architecture Decision Record&lt;/strong&gt;—ADR-002—explaining my bucket strategy.&lt;/p&gt;

&lt;p&gt;The act of documenting forced me to think through the consequences. Mid-sentence, I realized what would happen in production.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ADR-002: Separate S3 Buckets for Input and Output&lt;/span&gt;

&lt;span class="gu"&gt;## Decision&lt;/span&gt;
Use separate S3 buckets for input and output

&lt;span class="gu"&gt;## Consequences&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Prevents infinite loop scenarios
&lt;span class="p"&gt;-&lt;/span&gt; Better security isolation
&lt;span class="p"&gt;-&lt;/span&gt; Different lifecycle policies per bucket
&lt;span class="p"&gt;-&lt;/span&gt; Slight increase in bucket management complexity

&lt;span class="gu"&gt;## Why This Choice&lt;/span&gt;
Following AWS best practices prevents production issues.
The slight complexity increase is worth avoiding infinite loops.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That ADR saved me real money. But more importantly, it taught me something:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Documentation isn't overhead. It's thinking made visible.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Build-to-Learn Framework
&lt;/h2&gt;

&lt;p&gt;That near-miss crystallized into a methodology I now follow for every lab: build real things, document every decision, and share the messy middle.&lt;/p&gt;

&lt;p&gt;Not tutorials. Not sandboxes. Production-grade systems with real constraints — the kind where a wrong architecture choice costs actual money. For every significant decision, I write an Architecture Decision Record capturing the &lt;em&gt;why&lt;/em&gt;, not just the &lt;em&gt;what&lt;/em&gt;. And when I share the work, I don't polish away the wrong turns. The trade-offs, the moments of doubt, the diagrams I scrapped at midnight — those are the parts that actually help someone else learn.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Implementation
&lt;/h2&gt;

&lt;p&gt;Instead of one monolithic prompt, I designed a &lt;strong&gt;three-step AI pipeline&lt;/strong&gt; where each step uses the optimal model:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Document Understanding&lt;/td&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;Complex reasoning needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Information Extraction&lt;/td&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;Precision for structured JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Summary Generation&lt;/td&gt;
&lt;td&gt;Claude 3 Haiku&lt;/td&gt;
&lt;td&gt;Cost-efficient for simple output&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Step 1: Document Understanding
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_document_understanding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Analyze and understand the document structure and content.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;document_understanding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;document_text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;document_text&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;invoke_bedrock_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Low temperature for accuracy
&lt;/span&gt;        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Why this step?&lt;/strong&gt; Complex documents need context before extraction. Understanding the document type (auto claim vs. health expense) improves downstream accuracy.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Information Extraction
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_information&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Extract structured information from the document.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extract_info&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;document_text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;document_text&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;invoke_bedrock_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Zero temperature for deterministic output
&lt;/span&gt;        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Using &lt;code&gt;temperature=0.0&lt;/code&gt; ensures consistent, deterministic extraction. This matters when downstream systems depend on specific JSON fields.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Summary Generation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extracted_info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Generate a concise summary of the claim.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;template_manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;generate_summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;extracted_info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;extracted_info&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;invoke_bedrock_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Higher temperature for natural language
&lt;/span&gt;        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Why Haiku here?&lt;/strong&gt; The heavy lifting is done. We're just formatting extracted data into prose. Claude 3 Haiku does this well at &lt;strong&gt;~10x lower cost&lt;/strong&gt; than Sonnet.&lt;/p&gt;

&lt;p&gt;This decision is captured in ADR-005:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ADR-005: Use Claude 3 Haiku for Summary Generation&lt;/span&gt;

&lt;span class="gu"&gt;## Decision&lt;/span&gt;
Use Claude 3 Haiku for summary generation (not Sonnet)

&lt;span class="gu"&gt;## Rationale&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Summaries are the final step - context is already extracted
&lt;span class="p"&gt;-&lt;/span&gt; Haiku is ~10x cheaper than Sonnet
&lt;span class="p"&gt;-&lt;/span&gt; Quality is sufficient for 2-3 sentence summaries
&lt;span class="p"&gt;-&lt;/span&gt; Maintains on-demand throughput support

&lt;span class="gu"&gt;## Trade-off&lt;/span&gt;
Slight quality reduction for significant cost savings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Model Selection: The Certification Question
&lt;/h2&gt;

&lt;p&gt;If you're preparing for AIP-C01, model selection is a core exam topic — and this project gave me a real-world taste of the trade-offs involved.&lt;/p&gt;

&lt;p&gt;One decision surprised me. Claude 3.5 Sonnet v2 is newer and, on paper, "better" than v1. But when I dug into availability, I discovered that on-demand throughput isn't guaranteed in all regions and might require Provisioned Throughput. For a learning project that other developers will clone and deploy in their own accounts, availability matters more than marginal quality improvements. So I chose v1 — a stable, widely available model that anyone can spin up without provisioning headaches. It was a small decision, but exactly the kind of reasoning the certification expects you to articulate.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Infrastructure
&lt;/h2&gt;

&lt;p&gt;The entire stack is defined in Terraform, which means anyone can deploy it with a single &lt;code&gt;terraform apply&lt;/code&gt;. Here's the Lambda at the heart of it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_lambda_function"&lt;/span&gt; &lt;span class="s2"&gt;"processor"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;function_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"${var.project_name}-processor"&lt;/span&gt;
  &lt;span class="nx"&gt;runtime&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"python3.12"&lt;/span&gt;
  &lt;span class="nx"&gt;handler&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"lambda_handler.handler"&lt;/span&gt;
  &lt;span class="nx"&gt;timeout&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;   &lt;span class="c1"&gt;# 5 minutes&lt;/span&gt;
  &lt;span class="nx"&gt;memory_size&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;   &lt;span class="c1"&gt;# MB&lt;/span&gt;

  &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;variables&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;OUTPUT_BUCKET&lt;/span&gt;               &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_s3_bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
      &lt;span class="nx"&gt;BEDROCK_MODEL_UNDERSTANDING&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"anthropic.claude-3-5-sonnet-20240620-v1:0"&lt;/span&gt;
      &lt;span class="nx"&gt;BEDROCK_MODEL_EXTRACTION&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"anthropic.claude-3-5-sonnet-20240620-v1:0"&lt;/span&gt;
      &lt;span class="nx"&gt;BEDROCK_MODEL_SUMMARY&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"anthropic.claude-3-haiku-20240307-v1:0"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The numbers tell a story. A typical run — three sequential Bedrock calls — takes 30 to 90 seconds, but I set the timeout to 5 minutes to absorb cold starts, larger documents, and network latency. Memory sits at 512 MB: enough headroom for boto3 and JSON processing without overpaying for capacity the function will never touch. Both values came from testing, not guessing — another benefit of building before theorizing.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I Learned (Beyond the Tech)
&lt;/h2&gt;

&lt;p&gt;The biggest surprise wasn't technical — it was how much the act of &lt;em&gt;writing things down&lt;/em&gt; changed my engineering decisions. ADRs forced me to justify every choice, and several times I reversed course mid-sentence because explaining a decision out loud revealed the flaw in it. Documentation isn't a chore you do after the code works; it's a design tool you use while the code is still taking shape.&lt;/p&gt;

&lt;p&gt;Building locally first saved me real money, too. The system supports running the full pipeline on your own machine (&lt;code&gt;python main.py --input claim.txt --output result.json&lt;/code&gt;), so I processed dozens of test documents before a single Lambda invocation or Bedrock API call ever hit my AWS bill.&lt;/p&gt;

&lt;p&gt;And here's what connected everything back to the certification: every core topic from the Skill Builder course — model selection criteria, prompt engineering, cost optimization, security best practices, serverless patterns — showed up organically in this one project. I didn't have to memorize them. I had to &lt;em&gt;use&lt;/em&gt; them, and that made them stick.&lt;/p&gt;


&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is just the beginning. I'm continuing to build through the AWS GenAI certification curriculum, turning each challenge into a production-ready implementation. More labs are coming — each one following the same Build-to-Learn principles: production-ready code you can actually deploy, every decision documented with ADRs, and the messy middle shared so you learn from my mistakes too.&lt;/p&gt;

&lt;p&gt;Want to follow along? Star the repo or &lt;a href="https://www.linkedin.com/in/martin-rivadavia/" rel="noopener noreferrer"&gt;connect with me on LinkedIn&lt;/a&gt; to get notified when the next lab drops.&lt;/p&gt;


&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;The entire project is open source. Clone it, read the ADRs, poke around the Terraform — and if you find a flaw in my implementation, &lt;a href="https://github.com/rivadaviam/aws-genai-cert-learning-journey/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt;. If you have a better approach, propose it.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rivadaviam" rel="noopener noreferrer"&gt;
        rivadaviam
      &lt;/a&gt; / &lt;a href="https://github.com/rivadaviam/aws-genai-cert-learning-journey" rel="noopener noreferrer"&gt;
        aws-genai-cert-learning-journey
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Public learning journey for the AWS Generative AI Certification. Hands-on labs, bonus assignments, and real-world experiments designed to help others learn and build with AWS GenAI services.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;AWS Generative AI Learning Journey&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Learn in public, build in production.&lt;/strong&gt; This repository is a hands-on journey through AWS Generative AI services, focusing on Amazon Bedrock and real-world use cases. Each lab is production-ready, well-documented, and designed to teach you not just &lt;em&gt;what&lt;/em&gt; to build, but &lt;em&gt;why&lt;/em&gt; we made these choices.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why This Journey Exists&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Generative AI is transforming how we build applications, but learning it can feel overwhelming. This repository breaks down complex AWS AI services into practical, reproducible labs. You'll build real systems, understand architectural trade-offs, and learn from decisions documented in Architecture Decision Records (ADRs).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes this different:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Production-ready code&lt;/strong&gt; - Not just demos, but real implementations&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Decision transparency&lt;/strong&gt; - Every architectural choice is documented with rationale&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Learn from mistakes&lt;/strong&gt; - We share what worked, what didn't, and why&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Community-first&lt;/strong&gt; - Built to help others learn and contribute&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Certification Context&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;This repository…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rivadaviam/aws-genai-cert-learning-journey" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone and explore&lt;/span&gt;
git clone https://github.com/rivadaviam/aws-genai-cert-learning-journey.git
&lt;span class="nb"&gt;cd &lt;/span&gt;labs/lab-01-claims-doc-processing

&lt;span class="c"&gt;# Read the full guide&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;README.md

&lt;span class="c"&gt;# Deploy with Terraform&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;infra/terraform
terraform init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Invitation
&lt;/h2&gt;

&lt;p&gt;If you're preparing for a certification, don't just study. Build something real. Document your decisions. Share your journey. And if you build something using this framework, tell me about it — I want to see what you create.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certifications prove you can learn.&lt;br&gt;
Projects prove you can build.&lt;br&gt;
Documentation proves you can teach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Build-to-Learn Framework asks: why not do all three?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Have questions? &lt;a href="https://www.linkedin.com/in/martin-rivadavia/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt; or drop a comment below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build. Document. Share. Repeat.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#BuildToLearn&lt;/code&gt; &lt;code&gt;#AWSCommunity&lt;/code&gt; &lt;code&gt;#LearnInPublic&lt;/code&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonbedrock</category>
      <category>generativeai</category>
      <category>learninpublic</category>
    </item>
  </channel>
</rss>
