<?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: Zul Mehdi</title>
    <description>The latest articles on DEV Community by Zul Mehdi (@zulmehdi).</description>
    <link>https://dev.to/zulmehdi</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%2F4053887%2F0ddca492-5cf0-4582-b130-93730932bc14.png</url>
      <title>DEV Community: Zul Mehdi</title>
      <link>https://dev.to/zulmehdi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zulmehdi"/>
    <language>en</language>
    <item>
      <title>Your Agent Does Not Need to Own Every Tool It Uses</title>
      <dc:creator>Zul Mehdi</dc:creator>
      <pubDate>Tue, 25 Aug 2026 20:21:26 +0000</pubDate>
      <link>https://dev.to/zulmehdi/your-agent-does-not-need-to-own-every-tool-it-uses-2i6c</link>
      <guid>https://dev.to/zulmehdi/your-agent-does-not-need-to-own-every-tool-it-uses-2i6c</guid>
      <description>&lt;p&gt;An ADR agent can begin with a tiny web-search function and still point toward a larger architectural decision.&lt;/p&gt;

&lt;p&gt;I built an ADR agent in Google ADK to investigate architecture options, look up past ADRs, and draft a record for review. To prove the complete loop, its original &lt;code&gt;web_search&lt;/code&gt; was deliberately small: an embedded DuckDuckGo Lite HTML parser. It supported the agent’s initial investigation before the move to MCP.&lt;/p&gt;

&lt;p&gt;It parsed returned HTML locally, retained five results, and formatted them for the ADR agent.&lt;/p&gt;

&lt;p&gt;That starting point also exposed a boundary worth making explicit. The ADR workflow keeps two workflow-specific capabilities local: looking up past ADRs, because the repository and recorded decisions provide its context, and drafting the ADR record for review.&lt;/p&gt;

&lt;p&gt;External research has a different path. Before adding a second workflow, I am moving that research into a shared MCP capability. The reason is concrete: a future review or discovery workflow should be able to use the same research capability without inheriting the ADR agent’s code.&lt;/p&gt;

&lt;p&gt;The shared integration owns the provider connection, credentials, limits, returned sources, and failures. I am using Firecrawl Cloud MCP as the provider integration for the current ADR agent. The ADR workflow can request research while keeping its decision-history lookup and ADR drafting focused on the context and output that belong there.&lt;/p&gt;




&lt;p&gt;This is a small change in where a capability lives, with a practical consequence for the next workflow. The embedded search proved the loop. The MCP capability creates a reusable starting point for external research before that next workflow arrives.&lt;/p&gt;

&lt;p&gt;That leaves each workflow with its own context while sharing the external research capability.&lt;/p&gt;

&lt;p&gt;The full post follows the ADR agent from its embedded search function to the shared capability boundary and the local capabilities that remain in the ADR workflow.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Want the complete picture?&lt;/strong&gt; Read the complete post at &lt;a href="https://zulmehdi.blog/your-agent-does-not-need-to-own-every-tool-it-uses/" rel="noopener noreferrer"&gt;zulmehdi.blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>multiagent</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Designing an Agent That Remembers Why Your System Looks This Way</title>
      <dc:creator>Zul Mehdi</dc:creator>
      <pubDate>Fri, 14 Aug 2026 16:38:32 +0000</pubDate>
      <link>https://dev.to/zulmehdi/designing-an-agent-that-remembers-why-your-system-looks-this-way-1a78</link>
      <guid>https://dev.to/zulmehdi/designing-an-agent-that-remembers-why-your-system-looks-this-way-1a78</guid>
      <description>&lt;p&gt;A lot of architecture decisions are not bad decisions. They are just badly remembered.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to explore in my latest build. Teams move fast, make the best call they can, and a few months later somebody asks why a database, platform, or tool was chosen. The answer is usually in Slack, in memory, or with the one person who happened to be in the room.&lt;/p&gt;

&lt;p&gt;I built a small ADR agent with Google ADK to test whether that reasoning could be captured and reused more cleanly. One agent, a few tools, and a simple knowledge base. Nothing fancy yet, but enough to prove the architecture, the principles, and the RICE framing in code instead of leaving them as diagrams and theory.&lt;/p&gt;




&lt;h3&gt;
  
  
  What this first build does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;drafts ADRs&lt;/li&gt;
&lt;li&gt;looks up earlier decisions&lt;/li&gt;
&lt;li&gt;saves them into a simple knowledge base&lt;/li&gt;
&lt;li&gt;answers follow-up questions from what was already decided&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This is also the step before the multi-agent system. I wanted to make the first useful single-agent version real before splitting the workflow across multiple agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want the full walkthrough?&lt;/strong&gt; Read the complete post at &lt;a href="https://zulmehdi.blog/designing-an-agent-that-remembers-why-your-system-looks-this-way/" rel="noopener noreferrer"&gt;zulmehdi.blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>adk</category>
      <category>agents</category>
    </item>
    <item>
      <title>The 4-Layer Architecture Every Multi-Agent System Needs</title>
      <dc:creator>Zul Mehdi</dc:creator>
      <pubDate>Mon, 03 Aug 2026 22:03:30 +0000</pubDate>
      <link>https://dev.to/zulmehdi/the-4-layer-architecture-every-multi-agent-system-needs-2i87</link>
      <guid>https://dev.to/zulmehdi/the-4-layer-architecture-every-multi-agent-system-needs-2i87</guid>
      <description>&lt;p&gt;&lt;em&gt;Every multi-agent system I've built started as a monolith: one agent, one runtime, one set of tools. It works for the demo. Then you add a second agent, then a third, and suddenly every failure brings everything down.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The instinct is to fix the agents. Better prompts, more compute, smarter models. But the real issue isn't the agents. It's the architecture underneath them.&lt;/p&gt;

&lt;p&gt;After building production multi-agent systems that actually survive contact with real workloads, I landed on a four-layer model that keeps the pieces independent and the failures contained.&lt;/p&gt;




&lt;h2&gt;
  
  
  The four layers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt; orchestrate the work. Each agent has a harness (instructions and tools), a runtime (where it runs), an owner (who maintains it), and a clear definition of its role and boundaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Models&lt;/strong&gt; provide intelligence. Not every agent needs the most expensive model. A coordinator that plans complex tasks might use a frontier model, while a reporter that formats output does not. Model routing and fallback chains cut costs by an order of magnitude.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt; extend what agents can do. Built-in tools give agents basic capabilities. External tools on MCP servers give them access to databases, APIs, and services. Tool governance ensures agents only call what they're authorized to call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt; is the memory. Each agent owns its own state partition. No agent writes to another agent's partition. Shared-nothing ownership means failures stay isolated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The layers connect through protocols like A2A (Agent2Agent) for inter-agent communication and MCP for tool discovery. On Azure, Foundry combines the runtime, harness, tools, and orchestration into a single managed service, but the architecture itself is platform-agnostic.&lt;/p&gt;

&lt;p&gt;The key insight: not every system needs all four layers. Some solutions use two. Some use three. Patterns are what combine the components into something that works in real life.&lt;/p&gt;




&lt;p&gt;Want the complete architecture? Read the complete post at zulmehdi.blog (&lt;a href="https://zulmehdi.blog/4-layer-multi-agent-enterprise-architecture-azure/" rel="noopener noreferrer"&gt;https://zulmehdi.blog/4-layer-multi-agent-enterprise-architecture-azure/&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>multiagent</category>
    </item>
    <item>
      <title>12 Enterprise Architecture Principles for Multi-Agent Systems</title>
      <dc:creator>Zul Mehdi</dc:creator>
      <pubDate>Wed, 29 Jul 2026 20:51:04 +0000</pubDate>
      <link>https://dev.to/zulmehdi/12-enterprise-architecture-principles-for-multi-agent-systems-5338</link>
      <guid>https://dev.to/zulmehdi/12-enterprise-architecture-principles-for-multi-agent-systems-5338</guid>
      <description>&lt;p&gt;Most multi-agent systems start as a monolith: one agent, one runtime, one set of tools. It works for the demo. Then you add a second agent, then a third, and suddenly every failure brings everything down.&lt;/p&gt;

&lt;p&gt;I've seen this pattern repeat across teams and projects. The instinct is to fix the agents, add better prompts, or throw more compute at the problem. But the real issue isn't the agents. It's the architecture underneath them.&lt;/p&gt;

&lt;p&gt;The same principles that have kept enterprise software reliable for decades apply to multi-agent systems. Separation of concerns. Loose coupling. Shared-nothing state. Independent deployability. They're not glamorous, but they're the reason some systems survive production and others don't.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 12 principles
&lt;/h2&gt;

&lt;p&gt;I wrote down the 12 principles that matter most when building multi-agent systems that actually work in production:&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture fundamentals:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separation of Concerns&lt;/strong&gt;: each agent does one thing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loose Coupling&lt;/strong&gt;: agents communicate through protocols, not shared code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared-Nothing State&lt;/strong&gt;: no shared conversation record to lock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent Deployability&lt;/strong&gt;: no coordinated release schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Operational maturity:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observability by Default&lt;/strong&gt;: you can't fix what you can't see&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful Degradation&lt;/strong&gt;: the system keeps working when components fail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency&lt;/strong&gt;: duplicate messages don't break anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Awareness&lt;/strong&gt;: not every agent needs the most expensive model&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise reality:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Defense in Depth&lt;/strong&gt;: never trust a single security control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least Privilege for Agents&lt;/strong&gt;: minimal permissions, maximal isolation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol Over Product&lt;/strong&gt;: A2A and MCP beat vendor lock-in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for Evolution&lt;/strong&gt;: new agents join without touching existing ones&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The real lesson
&lt;/h2&gt;

&lt;p&gt;These principles aren't theoretical. They come from building production systems where failures have real consequences. The architecture isn't the hard part. The hard part is convincing teams to invest in it before the incident, not after.&lt;/p&gt;

&lt;p&gt;Want the full breakdown with Azure mappings, diagrams, and the reasoning behind each choice?&lt;/p&gt;

&lt;p&gt;Read the complete post at &lt;a href="https://zulmehdi.blog/12-enterprise-architecture-principles-for-multi-agent-systems/" rel="noopener noreferrer"&gt;zulmehdi.blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>principles</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>RICE Framework for AI Prompting</title>
      <dc:creator>Zul Mehdi</dc:creator>
      <pubDate>Wed, 29 Jul 2026 20:42:50 +0000</pubDate>
      <link>https://dev.to/zulmehdi/rice-framework-for-ai-prompting-59fo</link>
      <guid>https://dev.to/zulmehdi/rice-framework-for-ai-prompting-59fo</guid>
      <description>&lt;p&gt;I used to think AI was unreliable. I'd write a prompt, get something vaguely in the right direction, tweak it, get closer, tweak it again, and after three or four rounds I'd finally have something usable. It worked, but it was expensive and exhausting. The model hadn't changed between attempts. My goal hadn't changed. So why did the same prompt produce brilliant architecture one day and useless fluff the next?&lt;/p&gt;

&lt;p&gt;That question bugged me enough to start studying not just the outputs, but the thought processes behind them. I traced how the model reasoned its way from my instructions to its response, and compared the prompts that landed with the ones that didn't. After a while, the pattern became impossible to ignore. It wasn't the model's fault. It was how I was talking to it.&lt;/p&gt;

&lt;p&gt;The same way I learned to write clearly for humans through years of reading and writing, I needed to learn to articulate for machines, not in code, but in structure, in clarity, in intent. Four elements kept surfacing in the prompts that worked consistently: Role, Intent, Context, and Expectations. I called it RICE.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why RICE works
&lt;/h2&gt;

&lt;p&gt;RICE forces you to articulate what you actually want at a level of detail a machine can act on, and the side effect is that it makes you think more clearly about what you're asking for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It saves money.&lt;/strong&gt; Every vague prompt means more iterations, more tokens, more time spent refining an output that could have been right the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It prevents the AI from making its own decisions.&lt;/strong&gt; Without clear articulation, the model fills the gaps with guesses, and those guesses compound into a result that's close to what you wanted but never quite there. RICE closes those gaps so the AI executes what you intended, not what it assumed. In other words: RICE reduces variance rather than guarantees correctness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works everywhere.&lt;/strong&gt; RICE is not a strict checklist. You choose and combine the elements and attributes that fit your specific ask. Some prompts need deep context and minimal expectations. Others need a precise role and a clear intent. The framework adapts to what you're building, and scales from quick prompts to long-running projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works for everyone.&lt;/strong&gt; Engineers get precise, reproducible outputs. Executives get faster results without needing to understand how the underlying technology works. Organizations can share effective prompt patterns instead of everyone reinventing their own approach.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Want the full framework?&lt;/strong&gt; Read the complete post about RICE elements and their attributes at &lt;a href="https://zulmehdi.blog/rice-framework-for-ai-prompting/" rel="noopener noreferrer"&gt;zulmehdi.blog&lt;/a&gt;, or explore the framework at &lt;a href="https://riceframe.work/" rel="noopener noreferrer"&gt;riceframe.work&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>rice</category>
      <category>framework</category>
      <category>ai</category>
      <category>prompts</category>
    </item>
  </channel>
</rss>
