<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.5">Jekyll</generator><link href="https://www.ozkary.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.ozkary.dev/" rel="alternate" type="text/html" /><updated>2026-09-04T09:07:14-04:00</updated><id>https://www.ozkary.dev/feed.xml</id><title type="html">Ozkary Technologies</title><subtitle>A site with technology topics</subtitle><author><name>Oscar D. Garcia - Ozkary</name></author><entry><title type="html">The Dark Side of Autonomous Agents - How to Stop Them</title><link href="https://www.ozkary.dev/the-dark-side-of-autonomous-agents/" rel="alternate" type="text/html" title="The Dark Side of Autonomous Agents - How to Stop Them" /><published>2026-08-26T00:00:00-04:00</published><updated>2026-08-26T09:00:00-04:00</updated><id>https://www.ozkary.dev/the-dark-side-of-autonomous-agents</id><content type="html" xml:base="https://www.ozkary.dev/the-dark-side-of-autonomous-agents/"><![CDATA[<h1 id="overview">Overview</h1>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-ai-agents.png" alt="The Dark Side of Autonomous Agents - How to Stop Them" title="The Dark Side of Autonomous Agents - How to Stop Them" /></p>

<p>Recent headlines have exposed a critical vulnerability in modern AI: autonomous agents are becoming a prime target for remote execution exploits and data supply-chain attacks. When we define an agent’s runtime behavior using external, unprotected Markdown files, while leaving static credentials exposed in plain text, we inadvertently create a powerful insider threat. The leap from a helpful AI assistant to a rogue execution vector that can corrupt a data warehouse or leak security keys is alarmingly short.</p>

<p>Welcome to the detailed summary and narrative of our latest presentation on AI engineering and security. In this session, we dive deep into the security vulnerabilities of modern autonomous AI agents, demonstrating how easily a helpful assistant can turn into a malicious actor, and laying out the blueprints for securing them using zero-trust architecture.</p>

<p>Below is the complete story, workflow, and code demonstration discussed during the live presentation.</p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="-ai-agents">🤖 <a href="https://github.com/ozkary/ai-engineering/adk">AI Agents</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Introduction to machine learning<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="-related-repository-ai-agents-for-data-engineering">🔗 Related Repository: AI Agents for Data Engineering</h2>
<p>To explore the implementation code shown in this presentation, visit the repository: <a href="https://github.com/ozkary/ai-engineering/tree/main/adk">AI Engineering - Agent Development Kit (ADK)</a></p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/JUbGHkzbkHw?si=Tew7C2KNSjzPqQ7B" title="The Dark Side of Autonomous Agents - How to Stop Them" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notify on new events!</p>
</blockquote>

<hr />

<h2 id="the-presentation-narrative-the-dark-side-of-autonomous-agents">The Presentation Narrative: The Dark Side of Autonomous Agents</h2>

<h3 id="introduction-the-sealed-illusion">Introduction: The Sealed Illusion</h3>

<p>The presentation begins with a reality check about how AI models and agents are deployed in enterprise environments. Platforms like Hugging Face have democratized access to models, acting as repositories similar to how GitHub hosts code. Hugging Face also provides sandboxes where developers can run containers hosting their agent workflows.</p>

<p>However, this deployment model introduces what we call the <strong>Sealed Illusion</strong>. Developers often believe that because an agent is running inside an isolated Docker container sandbox, restricted by environment variables and standard access tokens, the application is secure.</p>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-autonomous-agents-docker-container.jfif" alt="The Dark Side of Autonomous Agents - Docker Containers" title="The Dark Side of Autonomous Agents - Docker Containers" /></p>

<p>The flaw in this thinking is that sandboxing only protects against <em>external network intrusion</em>. It does not safeguard against <em>internal prompt manipulation</em>. In modern agent architectures, the instructions governing an agent’s behavior are often loaded dynamically from external markdown files, XML configurations, or block storage. If an attacker manages to modify these instruction files, the container’s perimeter security becomes useless. The attack occurs in-process, shifting the agent’s behavior from the inside out.</p>

<h3 id="the-attack-vector-how-agents-turn-rogue">The Attack Vector: How Agents Turn Rogue</h3>

<p>When an agent’s dynamic specification is altered, its personality changes. An agent designed to act as a helpful Data Analyst can instantly be reprogrammed to act as a <strong>Dark Agent</strong>. Once the prompt is poisoned, the agent will execute the attacker’s commands using the privileges it has inside the container.</p>

<p>In a typical exploit:</p>
<ol>
  <li>The agent reads the poisoned markdown specification.</li>
  <li>It executes commands to exfiltrate sensitive environment variables, API tokens, and credentials, posting them to a remote hackers’ URL.</li>
  <li>It crafts and executes destructive actions, such as dropping database tables or wiping out data lakes.</li>
</ol>

<p>Because the agent is running in-process and has legitimate credentials to access databases or GCS buckets, traditional firewall rules do not stop these queries. The threat is an insider execution exploit triggered by untrusted input.</p>

<hr />

<h2 id="architectural-remedy-policy-enforcement-points-pep-architecture">Architectural Remedy: Policy Enforcement Points (PEP) Architecture</h2>

<p>To stop these vulnerabilities, we must establish a zero-trust model using multiple layers of security. We introduce <strong>Policy Enforcement Points (PEP)</strong> to inspect and validate instructions and tool executions at every stage of the lifecycle.</p>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-autonomous-agents-policy-enforcement-points.jfif" alt="The Dark Side of Autonomous Agents - Policy Enforcement Points" title="The Dark Side of Autonomous Agents - Policy Enforcement Points" /></p>

<h3 id="layer-1-context-ingress">Layer 1: Context Ingress</h3>
<p>Before the agent loads its personality, the incoming prompt specifications must be validated. We implement build-time <strong>cryptographic file signatures (<code class="language-plaintext highlighter-rouge">.signed.md</code>)</strong> using keys retrieved from a cloud vault service. When the agent boots, it checks the cryptographic signature of the specification file. If the file has been modified or the signature is missing, the file is immediately quarantined, and the process halts before the model can ingest it.</p>

<h3 id="layer-2-semantic-validation">Layer 2: Semantic Validation</h3>
<p>Once specifications are retrieved, the runtime performs in-process semantic validation. It inspects the structure and contents of the instructions to ensure they have not been hijacked or injected with system overrides before compiling the prompt into active memory.</p>

<h3 id="layer-3-pre-tool-execution-hooks-allow--deny--warn">Layer 3: Pre-Tool Execution Hooks (Allow / Deny / Warn)</h3>
<p>Every action an agent performs happens through a tool call (such as a database query or an API call). Before a tool is allowed to execute, we intercept it using pre-tool hooks. These hooks check the requested verbs against security policies:</p>
<ul>
  <li><strong>ALLOW:</strong> The action is safe (e.g., standard SQL selects) and is executed.</li>
  <li><strong>DENY:</strong> The action is malicious (e.g., <code class="language-plaintext highlighter-rouge">DROP TABLE</code>) and is blocked instantly with a hard permission exception.</li>
  <li><strong>WARN (Human-in-the-Loop):</strong> The action is sensitive (e.g., <code class="language-plaintext highlighter-rouge">CREATE TABLE</code> or bulk updates) and requires human authorization.</li>
</ul>

<h3 id="layer-4-sidecar-out-of-process-proxy">Layer 4: Sidecar Out-of-Process Proxy</h3>
<p>As an additional layer of process isolation, we run a sidecar proxy alongside the agent container. If the agent’s internal codebase is compromised, the sidecar proxy intercepts all external communication (e.g., database sockets, GCS queries) and validates the commands against strict network-level policies.</p>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-autonomous-agents-sidecar.jfif" alt="The Dark Side of Autonomous Agents - Sidecar" title="The Dark Side of Autonomous Agents - Sidecar" /></p>

<h3 id="comparison-of-enforcement-layers">Comparison of Enforcement Layers</h3>

<table>
  <thead>
    <tr>
      <th>Layer</th>
      <th>Name</th>
      <th>Description</th>
      <th>Policy Actions</th>
      <th>Implementation Method</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Layer 1</strong></td>
      <td>Context Ingress</td>
      <td>Validates prompt specifications at startup/ingest</td>
      <td>Verification &amp; Quarantine</td>
      <td>Cryptographic signatures (<code class="language-plaintext highlighter-rouge">.signed.md</code>) &amp; vault retrieval</td>
    </tr>
    <tr>
      <td><strong>Layer 2</strong></td>
      <td>Semantic Validation</td>
      <td>Checks loaded specifications in-process</td>
      <td>Parse &amp; Validate</td>
      <td>In-process checking against semantic overrides</td>
    </tr>
    <tr>
      <td><strong>Layer 3</strong></td>
      <td>Pre-Tool Hooks</td>
      <td>Intercepts tool calls before execution</td>
      <td>ALLOW / DENY / WARN</td>
      <td>Callbacks on tools to check verbs (e.g., SQL commands)</td>
    </tr>
    <tr>
      <td><strong>Layer 4</strong></td>
      <td>Sidecar Proxy</td>
      <td>Out-of-process inspection of outbound requests</td>
      <td>Socket-level block/allow</td>
      <td>Isolated sidecar proxy intercepting network traffic</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="human-in-the-loop-hitl-workflow">Human-in-the-Loop (HITL) Workflow</h2>

<p>When a sensitive action triggers a warning policy (Layer 3), we route the request through a secure Human-in-the-Loop approval workflow using an asynchronous semaphore pattern:</p>

<ol>
  <li><strong>Halts on Warning:</strong> The agent’s execution halts using a semaphore lock.</li>
  <li><strong>State Persistence:</strong> The agent’s current conversation state is persisted to storage.</li>
  <li><strong>Webhook Notification:</strong> An outbound notification (like a Slack webhook) is sent to an administrator with the details of the request.</li>
  <li><strong>Resumes on Approval:</strong> The administrator reviews the action and clicks <strong>Approve</strong> or <strong>Decline</strong>, which triggers an inbound API callback to the host process. The host process retrieves the agent state, updates the semaphore, and resumes the agent.</li>
</ol>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-autonomous-agents-human-in-the-loop.jfif" alt="The Dark Side of Autonomous Agents - Human in the loop (HITL)" title="The Dark Side of Autonomous Agents - Human in the loop" /></p>

<hr />

<h2 id="hands-on-implementation--remediation-adk">Hands-On Implementation &amp; Remediation (ADK)</h2>

<h3 id="vulnerable-agent-vs-hardened-agent">Vulnerable Agent vs. Hardened Agent</h3>

<p>In a typical Agent Development Kit (ADK) setup, the security posture of the system depends on the validation and hook layers built into the agent class:</p>

<ul>
  <li><strong>Basic/Tool Agent:</strong> Registers standard tools (such as BigQuery or Cloud Storage) but relies on external specifications and environment files without verification.</li>
  <li><strong>Secure Tool Agent:</strong> Extends the base agent using object-oriented principles to register cryptographic validation tools, retrieve configuration secrets from cloud vaults, and attach callbacks for pre-tool execution intercept.</li>
</ul>

<p><img src="../../assets/2026/ozkary-the-dark-side-of-autonomous-agents-process.png" alt="The Dark Side of Autonomous Agents - Rogue vs. Secured process" title="Rogue vs. Secured process" /></p>

<h3 id="cryptographic-verification-secret-isolation-and-quarantine">Cryptographic Verification, Secret Isolation, and Quarantine</h3>

<ol>
  <li><strong>Cryptographic Verification (<code class="language-plaintext highlighter-rouge">.signed.md</code>):</strong> Before parsing any prompt, the agent retrieves the validation signature for the file and checks it against the vault’s cryptographic hashes.</li>
  <li><strong>Vault Secret Isolation:</strong> Secrets are migrated out of local environment files, resolved out-of-scope, and accessed dynamically to prevent active process memory exfiltration.</li>
  <li><strong>Quarantine States:</strong> Files with signature mismatches or missing signatures are quarantined immediately. The agent halts and logs the failure (e.g., <code class="language-plaintext highlighter-rouge">fail to load safe asset validation fail. This is a quarantine prompt.</code>), preventing execution.</li>
</ol>

<h3 id="the-secured-agent-journey-walkthrough-of-the-live-code-demonstration">The Secured Agent Journey: Walkthrough of the Live Code Demonstration</h3>

<p>To validate these architectural layers, the ADK provides a local web testing harness that replicates real-world interactions using a web-based chat interface. Although enterprise agents run in headless serverless environments, this harness acts as a crucial debugger for tracing agent execution step-by-step:</p>

<h4 id="1-establishing-the-baseline-the-unprotected-tool-agent">1. Establishing the Baseline: The Unprotected Tool Agent</h4>
<p>We initialize the system by loading the standard <strong>Tool Agent</strong> inside the harness. This agent is registered with standard MCP tools, including Google Cloud Storage (GCS) and BigQuery integration.</p>
<ul>
  <li><strong>The Query:</strong> We ask the agent: <em>“Tell us about your governance rules and directives.”</em></li>
  <li><strong>The Execution:</strong> The agent parses a local markdown specification file (<code class="language-plaintext highlighter-rouge">tool_agent_instructions.md</code>), maps its operational focus, bucket names, and dataset permissions, and returns a clean, structured overview of its constraints.</li>
  <li><strong>The Vulnerability:</strong> The agent assumes the local specification is pristine and trusted. It has no mechanisms to detect if the underlying instructions have been tampered with.</li>
</ul>

<h4 id="2-executing-the-breach-the-dark-agent-exploit">2. Executing the Breach: The Dark Agent Exploit</h4>
<p>Next, we load the <strong>Dark Agent</strong> to simulate a prompt injection exploit.</p>
<ul>
  <li><strong>The Attack:</strong> The Dark Agent is configured with an exploit tool designed to override the system specification. When executed, it silently rewrites <code class="language-plaintext highlighter-rouge">tool_agent_instructions.md</code> with a malicious payload.</li>
  <li><strong>The Payload:</strong> The modified instructions direct the agent to exfiltrate the container’s environment variables to an external URL and execute destructive <code class="language-plaintext highlighter-rouge">DROP TABLE</code> commands in BigQuery.</li>
  <li><strong>The Proof:</strong> A Git diff check on the workspace confirms the clean governance rules are replaced with a system override. If the standard Tool Agent runs again, it blindly parses these overrides, shifting its personality to act on behalf of the attacker.</li>
</ul>

<h4 id="3-cryptographic-verification--spec-quarantine">3. Cryptographic Verification &amp; Spec Quarantine</h4>
<p>To address this threat, we transition to the <strong>Secure Tool Agent</strong>, which extends the standard agent’s capabilities with zero-trust validation.</p>
<ul>
  <li><strong>Signature Check:</strong> This agent retrieves the specification file’s signature and compares it with the public keys loaded from a secure vault.</li>
  <li><strong>Quarantine:</strong> When initialized with the poisoned configuration, it immediately catches the mismatch. The file signature fails validation, the agent halts, quarantines the compromised document, and outputs: <code class="language-plaintext highlighter-rouge">fail to load safe asset validation fail. This is a quarantine prompt.</code></li>
  <li><strong>Recovery:</strong> We restore the instructions from our repository history and perform a system reset. The Secure Agent validates the signature successfully and safely boots.</li>
</ul>

<h4 id="4-hardening-mcp-tools-with-pre-tool-hooks">4. Hardening MCP Tools with Pre-Tool Hooks</h4>
<p>Even with file-level security, a compromised memory boundary or prompt bypass could allow malicious commands to reach active tools. We mitigate this using pre-tool-use hooks to intercept all execution requests:</p>
<ul>
  <li><strong>DENY (SQL Injection Mitigation):</strong> When the agent attempts to run a query containing destructive commands (such as <code class="language-plaintext highlighter-rouge">DROP TABLE</code>), the hook catches the command in-process, denies execution, and raises a permission exception before the call reaches BigQuery.</li>
  <li><strong>WARN &amp; HITL (Schema Modifications):</strong> For sensitive but potentially valid commands (such as <code class="language-plaintext highlighter-rouge">CREATE TABLE</code>), the pre-tool hook raises a warning. The runner intercepts this warning, halts execution under a semaphore lock, persists the session context, and alerts administrators via a Slack webhook. Once the administrator approves, the inbound API webhook updates the semaphore state, retrieves the session, and resumes execution safely.</li>
</ul>

<hr />

<h2 id="conclusion-security-must-be-applied">Conclusion: Security Must Be Applied</h2>

<p>This presentation highlights a fundamental truth in the era of generative AI: <strong>even for autonomous AI agents, security must be applied.</strong> Security is not a feature we can delegate entirely to container sandboxes or baseline model boundaries.</p>

<p>The main points of this session underscore that:</p>
<ul>
  <li><strong>The perimeter is not enough:</strong> Dynamic file access and runtime prompt loading create a massive surface area for internal exploits and data exfiltration.</li>
  <li><strong>Verification is essential:</strong> Every configuration, specification, and instruction file must be cryptographically signed and verified to establish a secure chain of custody.</li>
  <li><strong>Granular tool policies protect the data plane:</strong> Intercepting agent tool calls using pre-tool hooks and Policy Enforcement Points (PEP) allows us to enforce strict ALLOW, DENY, and WARN policies.</li>
  <li><strong>Human-in-the-Loop is a core safety pattern:</strong> Persistent state semaphores ensure that sensitive database changes or system modifications remain under human supervision.</li>
</ul>

<p>Securing AI agents requires the same zero-trust discipline we apply to microservices, APIs, and cloud architecture. By building cryptographic boundaries and semantic safeguards directly into the agent runtime, we can safely unlock the power of agentic automation.</p>

<hr />

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://www.ozkary.com/newsletter/">News Letter</a></strong>: Sign-up for the newsletter.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="security" /><category term="cloud" /><category term="python" /><category term="ai-agents" /><category term="architecture" /><summary type="html"><![CDATA[Learn how autonomous agents can be hijacked via prompt injections in specification files and how to build zero-trust security boundaries using cryptographic signatures, vault secret isolation, and Policy Enforcement Points.]]></summary></entry><entry><title type="html">Azure Static Web Apps Login Redirects: How to Stop It</title><link href="https://www.ozkary.dev/azure-static-web-apps-login-redirects/" rel="alternate" type="text/html" title="Azure Static Web Apps Login Redirects: How to Stop It" /><published>2026-08-20T00:00:00-04:00</published><updated>2026-08-20T16:00:00-04:00</updated><id>https://www.ozkary.dev/azure-static-web-apps-login-redirects</id><content type="html" xml:base="https://www.ozkary.dev/azure-static-web-apps-login-redirects/"><![CDATA[<h1 id="overview">Overview</h1>

<p>Integrating custom Microsoft Entra ID (Azure AD) authentication with an Azure Static Web App (SWA) on the Standard tier should be straightforward, but subtle misconfigurations can lead to a frustrating infinite redirect loop.</p>

<p>Typically, you log in, complete MFA, and watch the browser bounce repeatedly between Entra ID and your application until Microsoft halts the flow with <strong>Error 50074</strong> (<em>“We couldn’t sign you in”</em>). When you check <code class="language-plaintext highlighter-rouge">/.auth/me</code>, you find that <code class="language-plaintext highlighter-rouge">clientPrincipal</code> is <code class="language-plaintext highlighter-rouge">null</code>.</p>

<p><img src="../../assets/2026/ozkary-azure-static-web-apps-login-redirects.png" alt="Azure Static Web Apps Login Redirects: How to Stop It" title="Azure Static Web Apps Login Redirects: How to Stop It" /></p>

<p>Here is a breakdown of why this happens and the exact checklist to fix it.</p>

<hr />

<h3 id="the-problem-why-does-the-app-loop">The Problem: Why Does the App Loop?</h3>

<p>The infinite loop occurs when the interactive user login succeeds in Entra ID, but SWA’s backend proxy fails the subsequent <strong>token exchange</strong>.</p>

<p>When the token exchange fails:</p>
<ol>
  <li>SWA cannot establish the <code class="language-plaintext highlighter-rouge">StaticWebAppsAuthCookie</code>.</li>
  <li>The user lands back on the app unauthenticated (<code class="language-plaintext highlighter-rouge">clientPrincipal: null</code>).</li>
  <li>SWA evaluates the catch-all route guard (<code class="language-plaintext highlighter-rouge">/*</code>), issues a <code class="language-plaintext highlighter-rouge">401</code>, and <code class="language-plaintext highlighter-rouge">responseOverrides</code> immediately redirects the user back to <code class="language-plaintext highlighter-rouge">/.auth/login/aad</code>.</li>
  <li>The cycle repeats until Entra ID detects the loop and blocks access.</li>
</ol>

<p>Two common triggers for this failure are explicitly passing OAuth parameters (like <code class="language-plaintext highlighter-rouge">response_type=code</code> or <code class="language-plaintext highlighter-rouge">scope</code>) inside <code class="language-plaintext highlighter-rouge">login.loginParameters</code>—which breaks SWA’s built-in token negotiation—and using internal <code class="language-plaintext highlighter-rouge">rewrite</code> rules instead of explicit <code class="language-plaintext highlighter-rouge">redirect</code> routes.</p>

<hr />

<h3 id="what-to-check">What to Check</h3>

<ul>
  <li><strong>SWA Hosting Plan:</strong> Ensure your Azure Static Web App is running on the <strong>Standard SKU</strong>. Custom OpenID Connect / Entra ID identity providers are ignored on the Free tier.</li>
  <li><strong>Platform Type:</strong> Configured strictly as <strong>Web</strong> (not Single-page application) under <strong>App registrations</strong> &gt; <strong>Authentication</strong>.</li>
  <li><strong>Redirect URI:</strong> Registered under the Web platform as <code class="language-plaintext highlighter-rouge">https://&lt;your-domain&gt;/.auth/login/aad/callback</code>.</li>
  <li><strong>ID Tokens Enabled:</strong> In Entra ID &gt; <strong>Authentication</strong> &gt; <strong>Platform configurations</strong> &gt; <strong>Web</strong> &gt; <strong>Implicit grant and hybrid flows</strong>, ensure the checkbox for <strong>ID tokens (used for implicit and hybrid flows)</strong> is enabled.</li>
  <li><strong>OpenID Issuer Tenant ID:</strong> The <code class="language-plaintext highlighter-rouge">openIdIssuer</code> URL must use your actual <strong>Directory (Tenant) ID</strong> (not an Azure Subscription ID), ending with <code class="language-plaintext highlighter-rouge">/v2.0</code> and no trailing slash.</li>
  <li><strong>Client ID Setting:</strong> The Application (Client) ID matches the exact environment variable name referenced in <code class="language-plaintext highlighter-rouge">clientIdSettingName</code>.</li>
  <li><strong>Client Secret Value:</strong> The SWA configuration setting referenced by <code class="language-plaintext highlighter-rouge">clientSecretSettingName</code> must hold the <strong>Secret Value</strong> (the plaintext string generated on creation), not the Secret ID GUID.</li>
  <li><strong>API Permissions:</strong> Ensure <code class="language-plaintext highlighter-rouge">Microsoft Graph</code> &gt; <code class="language-plaintext highlighter-rouge">User.Read</code> (Delegated) is added and granted <strong>Admin Consent</strong>.</li>
  <li><strong>Enterprise App Assignment:</strong> If <strong>Assignment required?</strong> is set to <code class="language-plaintext highlighter-rouge">Yes</code> under Enterprise applications &gt; Properties, confirm the test user or security group is explicitly added under <strong>Users and groups</strong>.</li>
  <li><strong>No <code class="language-plaintext highlighter-rouge">loginParameters</code> Overrides:</strong> Omit <code class="language-plaintext highlighter-rouge">login.loginParameters</code> entirely from your JSON config. Do not manually pass <code class="language-plaintext highlighter-rouge">response_type</code> or <code class="language-plaintext highlighter-rouge">scope</code>, as SWA handles Authorization Code negotiation out of the box.</li>
  <li><strong>Route Actions:</strong> Set the <code class="language-plaintext highlighter-rouge">/login</code> route to an explicit <code class="language-plaintext highlighter-rouge">redirect</code> with <code class="language-plaintext highlighter-rouge">post_login_redirect_uri=/</code> rather than an internal <code class="language-plaintext highlighter-rouge">rewrite</code> to <code class="language-plaintext highlighter-rouge">/.auth/login/aad</code>.</li>
  <li><strong>Clean System Endpoints:</strong> Do not define custom route rules in <code class="language-plaintext highlighter-rouge">routes</code> for SWA system paths like <code class="language-plaintext highlighter-rouge">/.auth/login/aad/callback</code> or <code class="language-plaintext highlighter-rouge">/.auth/complete</code>.</li>
</ul>

<hr />

<h3 id="working-staticwebappconfigjson-baseline">Working <code class="language-plaintext highlighter-rouge">staticwebapp.config.json</code> Baseline</h3>

<p>Use this base configuration to validate that the login process works properly. You can then make additional changes for your configuration.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"auth"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"identityProviders"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"azureActiveDirectory"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"registration"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"openIdIssuer"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[https://login.microsoftonline.com/](https://login.microsoftonline.com/)&lt;TENANT_ID&gt;/v2.0"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"clientIdSettingName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"AZURE_CLIENT_ID"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"clientSecretSettingName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"AZURE_CLIENT_SECRET"</span><span class="w">
        </span><span class="p">}</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"routes"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"route"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/login"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"redirect"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/.auth/login/aad?post_login_redirect_uri=/"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"statusCode"</span><span class="p">:</span><span class="w"> </span><span class="mi">302</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"route"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/logout"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"redirect"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/.auth/logout?post_logout_redirect_uri=/"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"statusCode"</span><span class="p">:</span><span class="w"> </span><span class="mi">302</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w">
      </span><span class="nl">"route"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/*"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"allowedRoles"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"authenticated"</span><span class="p">]</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"responseOverrides"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"401"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"redirect"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/.auth/login/aad?post_login_redirect_uri=/"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"statusCode"</span><span class="p">:</span><span class="w"> </span><span class="mi">302</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<hr />

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>

<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="web" /><category term="azure" /><category term="Static Web Apps" /><category term="cloud" /><category term="github" /><category term="vscode" /><summary type="html"><![CDATA[Fix the Azure Static Web Apps Entra ID infinite redirect loop and null clientPrincipal issue. Learn how to properly configure routes, and OpenID settings on the SWA Standard tier.]]></summary></entry><entry><title type="html">Beyond the Prompt: Building Enterprise Solutions with AI &amp;amp; Specification-Driven Design</title><link href="https://www.ozkary.dev/beyond-the-prompt-building-enterprise-solutions-with-ai-specification-driven-design/" rel="alternate" type="text/html" title="Beyond the Prompt: Building Enterprise Solutions with AI &amp;amp; Specification-Driven Design" /><published>2026-07-23T00:00:00-04:00</published><updated>2026-07-23T17:33:00-04:00</updated><id>https://www.ozkary.dev/beyond-the-prompt-building-enterprise-solutions-with-ai-specification-driven-design</id><content type="html" xml:base="https://www.ozkary.dev/beyond-the-prompt-building-enterprise-solutions-with-ai-specification-driven-design/"><![CDATA[<h1 id="overview">Overview</h1>

<p>Relying on raw prompt engineering or conversational text interfaces alone will not deliver a production-ready, enterprise-grade AI solution. To build resilient, secure, and compliant software in the age of AI assistants, developers must move past chaotic “vibe coding” and adopt a structured, process-oriented architectural workflow.</p>

<p>This session delivers a blueprint for Specification-Driven Design (SDD), demonstrating how disciplined discovery and modular markdown specifications enable a project assistant to successfully manage and execute multiple phases of the software development lifecycle. By treating AI as an execution engine governed by rigorous technical guardrails, rather than a black-box chatbot, engineers can drastically accelerate velocity while maintaining absolute system integrity. We walk through a real-world case study of a decoupled, zero-trust enterprise quality healthcare risk-assessment engine to show this methodology in action.</p>

<p><img src="../../assets/2026/ozkary-beyond-the-prompt-building-enterprise-solutions-with-ai-specification-driven-design.png" alt="Beyond the Prompt: Building Enterprise Solutions with AI &amp; Specification-Driven Design" title="Beyond the Prompt: Building Enterprise Solutions with AI &amp; Specification-Driven Design" /></p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue and be part of the open source project.</p>

<h2 id="-related-repository-ai-engineering">🔗 Related Repository: AI Engineering</h2>
<p>Explore the full implementation of the AI specifications and code used in this workflow:
<strong>https://github.com/ozkary/ai-engineering</strong></p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Bk9y4nS4RL8" title="Beyond the Prompt: Building Enterprise Solutions with AI &amp; Specification-Driven Design" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notified on new events!</p>
</blockquote>

<h2 id="-agenda">📅 Agenda</h2>

<ul>
  <li><strong>The Purpose: Understanding the Toolchain &amp; Vibe Coding</strong> – Defining the real-world roles of code assistants (like GitHub Copilot and Google Antigravity) and what “vibe coding” actually means for an enterprise workflow.</li>
  <li><strong>The Chaos: The Pitfalls of Planless Execution</strong> – The fallout when launching straight into terminal commands without a design baseline: monolithic files, bypassed architectural patterns, and untracked requirements.</li>
  <li><strong>The Discovery &amp; Specification Process: System Decomposition</strong> – How to properly break down a complex problem before writing code—identifying distinct system areas, modular boundaries, UI/UX input definitions, core system requirements, and downstream DevOps needs.</li>
  <li><strong>The Blueprint: Establishing Governance &amp; Guardrails</strong> – Putting your specifications and governance rules together into a structured, unified layout that forces the AI assistant to strictly follow your target design patterns.</li>
  <li><strong>The Iterative SDLC: Continuous Gap Analysis &amp; Adaptive Specifications</strong> – Embracing an Agile approach to handle missing requirements by starting small, continuously feeding refinements to the assistant, and leveraging it to run live gap analyses and solution summaries.</li>
</ul>

<hr />

<h2 id="the-purpose-understanding-the-toolchain--vibe-coding">The Purpose: Understanding the Toolchain &amp; Vibe Coding</h2>

<p>Modern software development has been dramatically reshaped by AI code assistants like GitHub Copilot and Google Antigravity. As developers, these tools offer immense power, but they require a clear understanding of their role in the developer toolchain. Often, developers fall into the trap of “vibe coding”—sitting down in front of an AI chat interface and typing conversational prompts to generate code on the fly without a predefined plan.</p>

<p>While vibe coding is fast and can yield functional prototypes in a couple of hours, it lacks the structure needed for enterprise-grade applications. For enterprise software, we must treat AI assistants not as autonomous magic boxes that build everything, but as <strong>peer programmers</strong>. They operate best when provided with clear, contextual instructions, and when their scope is constrained to specific, manageable files or tasks.</p>

<p>By integrating these tools into Visual Studio Code or as command-line interfaces (like the Antigravity CLI), we can work side-by-side with the AI. However, this interaction must be deliberate. We must set guardrails so the AI does not scan unrelated files, dilute its focus, or make arbitrary architectural decisions on our behalf.</p>

<h2 id="chaos-vs-aistorming">Chaos vs. AIStorming</h2>
<p><img src="../../assets/2026/ozkary-beyond-the-prompt-building-enterprise-solutions-with-specification-driven-design.png" alt="Beyond the Prompt: Building Enterprise Solutions with AI &amp; Specification-Driven Design" title="Beyond the Prompt: Building Enterprise Solutions with AI &amp; Specification-Driven Design" /></p>

<h2 id="the-chaos-the-pitfalls-of-planless-execution">The Chaos: The Pitfalls of Planless Execution</h2>

<p>What happens when we dive straight into terminal commands or prompt-driven code generation without a design baseline? We enter a state of planless execution, or <strong>chaos</strong>.</p>

<p>When you prompt an AI to “build a React application with a product form” without constraints:</p>
<ol>
  <li><strong>Monolithic Files:</strong> The AI tends to generate a single, massive file containing state, logic, rendering, and styles because that is the most direct path to satisfy the prompt.</li>
  <li><strong>Bypassed Architecture:</strong> Common enterprise architectural patterns, such as separating components, containers, and services, are completely ignored.</li>
  <li><strong>Untracked Requirements &amp; Lost Context:</strong> As the chat history grows, the AI starts losing context. Crucial design constraints, accessibility needs, and security protocols are forgotten, forcing the developer to repeatedly restate them.</li>
  <li><strong>Untraceability:</strong> The final codebase becomes difficult to maintain or trace back to original business requirements. There is no documentation or specifications explaining why decisions were made.</li>
</ol>

<p>To avoid this chaos, we must establish a rigorous design baseline before writing or generating a single line of code.</p>

<h2 id="ai-storming-the-framework-for-structured-discovery">AI Storming: The Framework for Structured Discovery</h2>

<p>To combat the chaos of planless execution, developers must transition from simple vibe coding to a structured methodology known as <strong>AI Storming</strong>. Similar to traditional brainstorming sessions where developers sketch out designs and architectural workflows, AI Storming leverages the AI assistant as a cognitive partner to explore the domain model, synthesize requirements, and identify hidden edge cases before a single line of application code is written.</p>

<p>By engaging in this process-oriented framework, you use the AI’s vast knowledge base to analyze project feasibility, perform system decomposition, and quickly get up to speed on unfamiliar technologies or industry standards. Rather than letting the AI write the application directly from conversational chat, you use the AI to draft the specifications that will ultimately govern the build process.</p>

<p>💡 <strong>Learn More:</strong> To dive deeper into this methodology, read about the <a href="/aistorming-a-process-oriented-framework-for-ai-assisted-discovery-analysis-and-specification/">AI Storming Framework</a>.</p>

<h2 id="the-discovery--specification-process-system-decomposition">The Discovery &amp; Specification Process: System Decomposition</h2>

<p>Enterprise software development begins with <strong>discovery</strong> and <strong>system decomposition</strong>. Instead of executing a “big bang” implementation, we break down a complex problem statement into modular, logical boundaries.</p>

<p>For example, when building a real-world healthcare risk-assessment engine:</p>
<ol>
  <li><strong>Identify System Areas:</strong> Segment the project into distinct areas such as the database, DevOps pipelines, API endpoints, and the user interface (UI/UX).</li>
  <li><strong>Define Requirements &amp; Compliance:</strong> In healthcare, security, accessibility, and zero-PII (Personally Identifiable Information) compliance are paramount. We must explicitly define these constraints up front.</li>
  <li><strong>Draft Modular Specifications:</strong> Create dedicated markdown specifications for each area (e.g., UI specs, API specs, security specs, database schema specs).</li>
</ol>

<p>By structuring our discovery process and outputting markdown specifications, we create a clear, traceably documented source of truth. This modular approach ensures that both human developers and AI assistants have a clear boundary of work, preventing scope creep and design drift.</p>

<h2 id="the-blueprint-establishing-governance--guardrails">The Blueprint: Establishing Governance &amp; Guardrails</h2>

<p>Once the modular specifications are drafted, they are unified into a <strong>Solution Blueprint</strong>. This blueprint serves as the master driver for the AI assistant.</p>

<p>To enforce guardrails and governance:</p>
<ol>
  <li><strong>Specify Coding Standards:</strong> Define naming conventions (e.g., PascalCase for React components, camelCase for services), CSS libraries (e.g., Tailwind), and state management patterns.</li>
  <li><strong>Structure the Project Layout:</strong> Define the exact directory structure (e.g., <code class="language-plaintext highlighter-rouge">/app</code> for React, <code class="language-plaintext highlighter-rouge">/api</code> for Python backend, <code class="language-plaintext highlighter-rouge">/assets</code> for media) so the AI knows where to locate and create files.</li>
  <li><strong>Provide Contextual Libraries:</strong> If a library is updated or has specific usage guidelines, write those down or pass the official documentation directly to the AI to prevent it from using outdated code patterns.</li>
</ol>

<p>By feeding these structured specifications to the AI assistant, we establish governance. The AI is forced to work within our design patterns, ensuring that the generated code is consistent, maintainable, and complies with enterprise standards.</p>

<h2 id="the-iterative-sdlc-continuous-gap-analysis--adaptive-specifications">The Iterative SDLC: Continuous Gap Analysis &amp; Adaptive Specifications</h2>

<p>Specification-Driven Design is not a static, “one-and-done” process. It is an <strong>agile, iterative lifecycle</strong>.</p>

<ol>
  <li><strong>Start with an MVP:</strong> Begin with the minimum viable requirements and a baseline specification.</li>
  <li><strong>Execute and Review:</strong> Let the AI generate code based on the specifications. Run the application, review the code structure, and test the features.</li>
  <li><strong>Conduct Gap Analysis:</strong> As implementation progresses, you will inevitably identify missing requirements (e.g., “How do we handle user authentication on Cloud Run?” or “How do we implement voice-to-text hotkeys for accessibility?”).</li>
  <li><strong>Update the Specs, Not Just the Code:</strong> When a gap is found, document the new requirements in the markdown specifications first. Rerun the specs through the AI assistant to let it update the implementation.</li>
  <li><strong>Traceability &amp; Summaries:</strong> Leverage the AI to perform solution summaries and next-step analyses to keep project tracking up-to-date.</li>
</ol>

<p>This feedback loop ensures absolute traceability. Your documentation and your codebase remain in lockstep, eliminating technical debt and delivering a secure, high-quality, production-ready enterprise solution.</p>

<h2 id="conclusion">Conclusion</h2>

<p>Can we build enterprise-grade, high-quality solutions using generative AI and “vibe coding”? The short answer is yes—but only if we transition from a chaotic conversational interface to a disciplined, process-oriented workflow.</p>

<p>The main highlights of this methodology include:</p>
<ul>
  <li><strong>Specifications Drive Results:</strong> The quality of the AI’s output is directly proportional to the structure of the input. Drafting specifications properly is the most effective way to guide an assistant.</li>
  <li><strong>Process Over Chat:</strong> Avoid relying on temporary chat windows where context is easily lost. Maintain permanent, adaptive specs in your repository for absolute traceability.</li>
  <li><strong>AI as a Peer Programmer:</strong> Treat AI tools as assistants that execute tasks within clear, modular guardrails rather than a magic wand that does the planning for you.</li>
  <li><strong>Continuous Refinement:</strong> Embrace the agile loop of gap analysis, updating specifications, and regenerating code to ensure your code and documentation stay aligned.</li>
</ul>

<p>Ultimately, by learning how to use AI code assistants properly and wrapping them in rigorous technical governance, developers can achieve massive velocity increases without compromising system integrity or security.</p>

<hr />

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="ai" /><summary type="html"><![CDATA[Relying on raw prompt engineering or conversational text interfaces alone will not deliver a production-ready, enterprise-grade AI solution. To build resilient, secure, and compliant software, developers must move past chaotic vibe coding and adopt a structured, process-oriented architectural workflow. In this post, we walk through the blueprint for Specification-Driven Design (SDD).]]></summary></entry><entry><title type="html">AIStorming: A Process-Oriented Framework for AI-Assisted Discovery, Analysis, and Specification</title><link href="https://www.ozkary.dev/aistorming-a-process-oriented-framework-for-ai-assisted-discovery-analysis-and-specification/" rel="alternate" type="text/html" title="AIStorming: A Process-Oriented Framework for AI-Assisted Discovery, Analysis, and Specification" /><published>2026-07-11T00:00:00-04:00</published><updated>2026-07-11T09:00:00-04:00</updated><id>https://www.ozkary.dev/aistorming-a-process-oriented-framework-for-ai-assisted-discovery-analysis-and-specification</id><content type="html" xml:base="https://www.ozkary.dev/aistorming-a-process-oriented-framework-for-ai-assisted-discovery-analysis-and-specification/"><![CDATA[<h1 id="abstract">Abstract</h1>

<p>As the software development lifecycle shifts toward autonomous <strong>vibe coding</strong>, rapid AI prototyping, and <strong>Software Design Description (SDD)</strong> driven workflows, engineering teams face a critical structural bottleneck: <strong>the discovery and analysis gap</strong>. Generative AI tools excel at emitting syntactically valid code, yet they consistently fail when handed vague, ungrounded, or fragmented domain specifications.</p>

<p>To bridge the gap between initial domain exploration and deterministic engineering execution, I introduce <strong>AIStorming</strong>—a process-oriented framework born out of my engineering practice and foundational work in enterprise data pipelines and cloud-native application architectures.</p>

<p>Throughout my career designing high-scale cloud-native solutions, event-driven microservices, and modern data platforms, domain research, requirement validation, and exploratory design depended heavily on manual web searches, static documentation reviews, and disconnected whiteboarding sessions. Over years of hands-on practice, my workflow naturally evolved from manual research into AI-driven, interactive, and code-centric discovery. By leveraging AI coding assistants directly inside the development workspace to profile sample datasets, stress-test business rules, probe API interfaces, and validate system constraints in real time, I transformed traditional brainstorming into an active, deterministic engineering phase: <strong>AIStorming</strong>.</p>

<p>AIStorming formalizes the process of using AI coding tools (e.g., GitHub Copilot, Google Antigravity) to conduct real-time domain discovery, exploratory analysis, and system boundary mapping across both cloud-native software and data engineering domains. Rather than relying on abstract, non-executable IT discovery frameworks, AIStorming anchors domain analysis directly in executable code, version control, and data validation. This yields structured problem statements, refined use cases, quantifiable technical requirements, and machine-readable specifications optimized for vibe coding, cloud-native design, and automated SDD execution.</p>

<p><img src="../../assets/2026/ozkary-aistorming-process-oriented-framework.png" alt="AIStorming: A Process-Oriented Framework for AI-Assisted Discovery, Analysis, and Specification" title="AIStorming: A Process-Oriented Framework for AI-Assisted Discovery, Analysis, and Specification" /></p>

<hr />

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Introduction to machine learning<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<hr />

<h2 id="1-the-core-engineering-challenge-the-discovery-to-implementation-gap">1. The Core Engineering Challenge: The Discovery-to-Implementation Gap</h2>

<p>In traditional enterprise software engineering, product discovery is often disconnected from actual system implementation. Product managers, business analysts, and architects spend weeks producing static requirements documents, wireframes, or text-heavy stories. When these artifacts are passed down to software engineers—or fed as prompt context into AI coding tools—the implementation breaks down due to implicit assumptions, unverified data schemas, unexpected edge cases, and missing operational constraints.</p>

<p>In an era dominated by AI-assisted synthesis, <strong>garbage context in results in garbage execution out</strong>.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>+-----------------------------------------------------------------------------------+
|                            TRADITIONAL DISCOVERY GAP                              |
|                                                                                   |
|  [ Domain &amp; Business ] ---&gt; ( Static Docs / Whiteboards ) ---&gt; [ AI Assistant ]   |
|  Ideation &amp; Concepts          Unverified Context                 Hallucinated     |
|                                                                  Implementation   |
+-----------------------------------------------------------------------------------+
                                        VS.
+-----------------------------------------------------------------------------------+
|                             AISTORMING FRAMEWORK                                  |
|                                                                                   |
|  [ Domain Input ]  ---&gt; { AIStorming: Code-Centric Analysis } ---&gt; [ SDD &amp; Vibe ] |
|  Raw Data / Rules /     Exploratory Scripts, Profiling,         Deterministic     |
|  API Contracts          &amp; Requirement Synthesis in IDE             Builds         |
+-----------------------------------------------------------------------------------+
</code></pre></div></div>

<p>To leverage AI coding assistants safely and at enterprise quality, the <strong>Discovery Phase</strong> must be reinvented. It can no longer be a passive ideation exercise; it must become an active, <strong>code-centric discovery engine</strong> that validates domain facts, data structures, and service behaviors <em>before</em> full-scale software architecture and implementation begin.</p>

<hr />

<h2 id="2-what-is-aistorming">2. What is AIStorming?</h2>

<p><strong>AIStorming</strong> is the process-oriented methodology of conducting domain discovery, exploratory data/logic analysis, and system boundary definition by pairing human engineering expertise with AI coding tools inside an Integrated Development Environment (IDE).</p>

<p>The objective of AIStorming is not to generate production application code or deploy live systems immediately. Instead, its primary output is a structured set of verified, code-grounded engineering artifacts:</p>
<ol>
  <li><strong>Grounded Problem Statements:</strong> Unambiguous scope boundaries, operational objectives, and domain invariants.</li>
  <li><strong>Exploratory Data &amp; Logic Findings:</strong> Code-verified insights into payload structures, edge cases, integration contracts, API behaviors, and processing constraints.</li>
  <li><strong>Formal Functional &amp; Technical Requirements:</strong> Explicit inputs, state behaviors, domain events, security boundaries, and non-functional targets (throughput, latency, reliability).</li>
  <li><strong>Machine-Readable Specifications (SDD):</strong> Domain models, schemas, contract interfaces, and prompt-context files tailored for downstream vibe coding, agentic orchestration, and automated pipeline execution.</li>
</ol>

<hr />

<h2 id="3-foundational-principles-of-aistorming">3. Foundational Principles of AIStorming</h2>

<p>Derived from the universal tenets of my <em>Data Engineering Process Fundamentals (DEP)</em> and expanded across cloud-native software architecture, AIStorming adapts proven discovery mechanics to AI-driven developer tooling.</p>

<h3 id="i-the-code-centric-paradigm">I. The Code-Centric Paradigm</h3>
<p>Traditional discovery relies on prose descriptions that fail upon first contact with compiler logic, schema validation, or streaming engines. AIStorming dictates that <strong>discovery must be code-centric from day one</strong>.</p>
<ul>
  <li>Exploratory data analysis (EDA), API probing, schema validation, and domain logic simulations are written as executable scripts (Python, TypeScript, SQL, Go, Jupyter Notebooks) inside the IDE workspace.</li>
  <li>AI tools are forced to interact with concrete execution outputs, stack traces, and SDK responses rather than abstract concepts.</li>
</ul>

<h3 id="ii-dataset--domain-grounding">II. Dataset &amp; Domain Grounding</h3>
<p>AI models hallucinate when operating in an isolated context vacuum. AIStorming requires immediate grounding against real-world sample datasets, schema definitions, domain models, and API interfaces.</p>
<ul>
  <li>Evaluates data quality, structural variance, integration frequencies (batch vs. streaming event-driven), and service boundaries.</li>
  <li>Uses AI assistants to parse, profile, and transform sample payloads and domain entities live during the discovery window.</li>
</ul>

<h3 id="iii-source-control-and-auditable-iteration">III. Source Control and Auditable Iteration</h3>
<p>Prompt histories floating in web interfaces are disposable, non-reproducible, and unmaintainable. AIStorming enforces that every discovery artifact—exploratory notebooks, schema models, interface definitions, and context files—is checked directly into a <strong>Git repository (e.g., GitHub)</strong>.</p>
<ul>
  <li>Enables collaboration between software engineers, data architects, and AI agents.</li>
  <li>Maintains a versioned, auditable history of how business domain rules evolved into formal technical specifications.</li>
</ul>

<h3 id="iv-bridge-to-vibe-coding-and-sdd">IV. Bridge to Vibe Coding and SDD</h3>
<p>AIStorming serves as the explicit precursor to <strong>Vibe Coding</strong> (rapid, intent-driven application development using AI models) and <strong>Software Design Description (SDD)</strong> generation. By translating loose ideas into code-verified constraints during AIStorming, downstream AI models receive high-fidelity, hallucination-free prompts during full-scale development.</p>

<hr />

<h2 id="4-the-4-universal-steps-of-the-aistorming-process">4. The 4 Universal Steps of the AIStorming Process</h2>

<p>Whether applied to cloud-native microservices, event-driven streaming applications, serverless architectures, or modern enterprise data platforms, the AIStorming framework executes across four process-oriented phases.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>+-------------------+      +-------------------+      +-------------------+      +-------------------+
|  STEP 1:          | ---&gt; |  STEP 2:          | ---&gt; |  STEP 3:          | ---&gt; |  STEP 4:          |
|  Problem          |      |  Exploratory      |      |  Use Case &amp;       |      |  SDD &amp; Vibe       |
|  Framing &amp;        |      |  Data &amp; Domain    |      |  Requirement      |      |  Specification    |
|  Context Prime    |      |  Analysis         |      |  Synthesis        |      |  Output           |
+-------------------+      +-------------------+      +-------------------+      +-------------------+
</code></pre></div></div>

<h3 id="step-1-problem-framing--context-priming">Step 1: Problem Framing &amp; Context Priming</h3>
<ul>
  <li><strong>Objective:</strong> Establish domain boundaries and prime the AI workspace with domain context.</li>
  <li><strong>Process:</strong>
    <ol>
      <li>Initialize a dedicated discovery branch in the code repository.</li>
      <li>Create a core workspace context file (<code class="language-plaintext highlighter-rouge">CONTEXT.md</code> or system prompt boundaries) containing raw business objectives, domain rules, SLA requirements, and target application guidelines.</li>
      <li>Engage the AI coding assistant to challenge the problem scope, identifying missing assumptions, unstated edge cases, or domain contradictions.</li>
    </ol>
  </li>
</ul>

<h3 id="step-2-exploratory-data--domain-logic-analysis">Step 2: Exploratory Data &amp; Domain Logic Analysis</h3>
<ul>
  <li><strong>Objective:</strong> Verify domain facts and data behaviors using runnable code inside the IDE.</li>
  <li><strong>Process:</strong>
    <ol>
      <li>Load representative data samples, schema models, domain event payloads, or third-party API contracts into VS Code or Jupyter Notebooks.</li>
      <li>Pair with the AI assistant to write exploratory scripts using standard manipulation libraries, data frames, or contract interfaces (Pandas, Pydantic, Zod, Spark/PySpark, SQL).</li>
      <li>Perform data profiling, test payload transformations, inspect edge cases, validate event structures, and evaluate performance/throughput assumptions.</li>
      <li>Commit all exploratory scripts, test executions, and output traces to Git.</li>
    </ol>
  </li>
</ul>

<h3 id="step-3-use-case--requirement-synthesis">Step 3: Use Case &amp; Requirement Synthesis</h3>
<ul>
  <li><strong>Objective:</strong> Extract structured engineering requirements from discovery findings.</li>
  <li><strong>Process:</strong>
    <ol>
      <li>Prompt the AI assistant to analyze the commit history, exploratory scripts, and execution outputs generated in Step 2.</li>
      <li>Synthesize findings into formalized <strong>Use Cases</strong> (actor/system interactions, event triggers, preconditions, happy path flows, failover behaviors).</li>
      <li>Categorize non-negotiable <strong>Technical Requirements</strong>:
        <ul>
          <li>Data Integration &amp; Schema Transformation rules</li>
          <li>Cloud-Native Application Patterns (Event-driven, REST/GraphQL APIs, Pub/Sub boundaries)</li>
          <li>Performance, Scalability &amp; Latency SLA targets</li>
          <li>Security, Identity, Governance, and Compliance boundaries</li>
        </ul>
      </li>
    </ol>
  </li>
</ul>

<h3 id="step-4-sdd--vibe-coding-specification-output">Step 4: SDD &amp; Vibe Coding Specification Output</h3>
<ul>
  <li><strong>Objective:</strong> Produce machine-readable software specifications for autonomous AI execution.</li>
  <li><strong>Process:</strong>
    <ol>
      <li>Compile discovery outputs into a standardized <strong>Software Design Description (<code class="language-plaintext highlighter-rouge">SPEC.md</code> / <code class="language-plaintext highlighter-rouge">ARCHITECTURE.md</code>)</strong>.</li>
      <li>Generate baseline interface contracts, schemas, and domain types (TypeScript interfaces, OpenAPI specs, Pydantic data models, Avro/Protobuf schemas, ERD models).</li>
      <li>Define precise context prompts and agent instructions to drive subsequent implementation phases (Vibe Coding, Automated Test Generation, and CI/CD development).</li>
    </ol>
  </li>
</ul>

<hr />

<h2 id="5-architectural-deliverables-matrix">5. Architectural Deliverables Matrix</h2>

<p>To maintain enterprise quality, an AIStorming session must terminate in a concrete set of repository artifacts:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Deliverable Phase</th>
      <th style="text-align: left">File Artifact</th>
      <th style="text-align: left">Content &amp; Purpose</th>
      <th style="text-align: left">Target Consumer</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>Problem Definition</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">PROBLEM.md</code></td>
      <td style="text-align: left">Domain boundaries, business goals, explicit out-of-scope declarations</td>
      <td style="text-align: left">Lead Engineers &amp; Architects</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Exploratory Analysis</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">analysis/*.ipynb</code>, <code class="language-plaintext highlighter-rouge">scripts/*</code></td>
      <td style="text-align: left">Executable data profiling, edge-case tests, API contract probes</td>
      <td style="text-align: left">Engineering Team &amp; AI Agents</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Use Cases</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">USE_CASES.md</code></td>
      <td style="text-align: left">System interactions, domain event triggers, failure modes, retry logic</td>
      <td style="text-align: left">Product Owners &amp; Testing Engines</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Technical Specs</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">REQUIREMENTS.md</code>, <code class="language-plaintext highlighter-rouge">SPEC.md</code></td>
      <td style="text-align: left">Data models, storage schemas, security boundaries, SLA performance targets</td>
      <td style="text-align: left">Vibe Coding AI Tools (Cursor, Copilot, Claude)</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Architecture Contract</strong></td>
      <td style="text-align: left"><code class="language-plaintext highlighter-rouge">ARCHITECTURE.md</code>, <code class="language-plaintext highlighter-rouge">schemas/*</code></td>
      <td style="text-align: left">System topology, ERD models, OpenAPI/AsyncAPI specs, CI/CD pipeline rules</td>
      <td style="text-align: left">SDD Generators &amp; Developers</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="6-practical-application-enterprise-cloud-native--data-platform-build">6. Practical Application: Enterprise Cloud-Native &amp; Data Platform Build</h2>

<p>To demonstrate the versatility of AIStorming across cloud-native microservices and high-scale data platforms, consider the execution path of a modern enterprise solution:</p>

<ol>
  <li><strong>The Human Intent:</strong> An architect needs to design a high-throughput, event-driven data ingestion platform that processes live streaming payloads into an analytical data lake.</li>
  <li><strong>The AIStorming Phase:</strong>
    <ul>
      <li>Instead of asking an AI tool to “write a real-time data ingestion application,” the team opens the IDE and loads representative stream logs and target schemas.</li>
      <li>The architect uses AIStorming to draft and run exploratory Python/PySpark scripts inside the IDE, testing deserialization speed, schema drift, and payload validation rules.</li>
      <li>The AI assistant identifies that 6% of incoming event payloads contain missing nested timestamp attributes and schema variations that would break downstream parquet writes.</li>
    </ul>
  </li>
  <li><strong>Requirement Synthesis:</strong> The team updates <code class="language-plaintext highlighter-rouge">REQUIREMENTS.md</code> via AIStorming to explicitly mandate upstream payload sanitization, dead-letter routing (DLQ), and a strict contract enforcement layer.</li>
  <li><strong>SDD &amp; Vibe Implementation:</strong> The resulting <code class="language-plaintext highlighter-rouge">SPEC.md</code>, Pydantic models, and OpenAPI/AsyncAPI specs are fed into coding agents. The agents write production-grade microservices and pipeline code on the first pass because the domain edge cases were caught during AIStorming.</li>
</ol>

<hr />

<h2 id="7-conclusion-aistorming-as-an-enterprise-engineering-standard">7. Conclusion: AIStorming as an Enterprise Engineering Standard</h2>

<p>As artificial intelligence shifts software and data engineering from manual syntax writing to high-level system orchestration, the role of the engineer evolves from code writer to <strong>system architect and discovery strategist</strong>.</p>

<p>AIStorming bridges the foundational gap between raw domain ideas and deterministic execution. By marrying the process-oriented discipline of <em>Data Engineering Process Fundamentals</em> with cloud-native software architecture patterns and modern AI coding tools, AIStorming transforms discovery from a passive, unverified discussion into a repeatable, code-centric, and auditable engineering standard.</p>

<p>By adopting <strong>AIStorming</strong> as a formal phase prior to vibe coding and SDD execution, engineering organizations can eliminate AI hallucination risks, enforce enterprise domain integrity, and accelerate software delivery with complete architectural control.</p>

<hr />

<h3 id="references--foundational-frameworks">References &amp; Foundational Frameworks</h3>
<ul>
  <li>Garcia, Oscar D. (Ozkary). <em>“From Raw Data to Roadmap: The Discovery Phase in Data Engineering Process Fundamentals.”</em> <a href="https://www.ozkary.dev/data-engineering-process-fundamentals-discovery/">Ozkary Technologies</a></li>
  <li>Garcia, Oscar D. (Ozkary). <em>“Data Engineering Process Fundamentals - Design and Planning.”</em></li>
  <li>
    <h2 id="garcia-oscar-d-ozkary-architecting-an-agentic-data-pipeline---from-data-lake-discovery-to-managed-orchestration">Garcia, Oscar D. (Ozkary). <em>“Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration.”</em></h2>
  </li>
</ul>

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="python" /><category term="data" /><category term="ai" /><category term="ai-agent" /><summary type="html"><![CDATA[As generative AI coding assistants shift software development toward vibe coding and rapid prototyping, engineering teams face a critical discovery and analysis gap. AIStorming is a process-oriented framework designed to bridge this gap. By anchoring product discovery directly in code-centric analysis, dataset grounding, and git-versioned iteration, AIStorming transforms traditional brainstorming into an active, deterministic engineering phase that generates high-fidelity Software Design Descriptions (SDD) optimized for automated code synthesis.]]></summary></entry><entry><title type="html">Building Reusable &amp;amp; Extendable Agents with the Google ADK</title><link href="https://www.ozkary.dev/building-reusable-extendable-agents-with-the-google-adk/" rel="alternate" type="text/html" title="Building Reusable &amp;amp; Extendable Agents with the Google ADK" /><published>2026-06-24T00:00:00-04:00</published><updated>2026-06-24T09:00:00-04:00</updated><id>https://www.ozkary.dev/building-reusable-extendable-agents-with-the-google-adk</id><content type="html" xml:base="https://www.ozkary.dev/building-reusable-extendable-agents-with-the-google-adk/"><![CDATA[<h1 id="overview">Overview</h1>

<p>The goal of this presentation is to introduce the audience to an agentic SDK—specifically the Google Agent Development Kit (ADK), while addressing a critical trap in modern AI engineering. It is incredibly easy to fall into the habit of building AI agents using basic procedural code or siloed Jupyter Notebooks. While these approaches work for initial validation, they fail to scale in an enterprise environment.</p>

<p>Instead, this session demonstrates how to leverage robust software design patterns and foundational architectural principles. By building an abstraction layer over the SDK, we can create a mature, enterprise-ready library. This approach allows us to decouple our core business logic from third-party frameworks, making our codebase completely agnostic to any single SDK and giving us the flexibility to swap underlying tools as the AI ecosystem evolves.</p>

<p>Follow the next sections for the main points of the presentation, and then take a look at the video presentation to dive deeper into the concepts.</p>

<p><img src="../../assets/2026/ozkary-build-reusable-extendable-agents-with-google-adk.png" alt="Building Reusable &amp; Extendable Agents with the Google ADK" title="Building Reusable &amp; Extendable Agents with the Google ADK" /></p>

<h1 id="presentation-summary">Presentation Summary</h1>

<p>Discover how to transition from building monolithic, single-prompt chatbots to designing highly modular, scalable, and extendable enterprise agents using the Google Agent Development Kit (ADK). This presentation provides a hands-on architectural deep dive into building process-oriented workflows, implementing the Model Context Protocol (MCP) for cloud data platform integrations, and utilizing automated DevOps tooling to eliminate technical debt in your AI engineering pipelines.</p>

<h2 id="the-monolithic-prompt--sdk-trap">The Monolithic Prompt &amp; SDK Trap</h2>

<p>When developers start building AI agents, the initial momentum is almost always driven by quick prototyping. You pull down a hot new SDK, run a quick pip install, and start hardcoding prompts directly into your files.</p>

<p>While this works for a weekend hobby project, it quickly collapses under its own weight in an enterprise ecosystem. You end up with multiple developers writing siloed, inconsistent code, duplicating core tasks like error handling, and introducing massive technical debt. Even worse, your entire system becomes tightly coupled to a single third-party framework. If you ever need to pivot or replace that framework, you are looking at a complete rewrite.</p>

<p>Production-grade engineering requires moving away from spaghetti code toward process-oriented, SDK-agnostic architecture.</p>

<h2 id="architectural-blueprint-layered-agent-design">Architectural Blueprint: Layered Agent Design</h2>

<p>To achieve true reusability and governance, we must build a core architectural foundation that abstracts third-party dependencies away. Instead of letting an external SDK dictate our application structure, we stack agents in specialized layers via inheritance.</p>

<p><img src="../../assets/2026/ozkary-agent-development-kit-architecture-md.jpg" alt="Building Reusable &amp; Extendable Agents with the Google ADK - Architecture" title="Building Reusable &amp; Extendable Agents with the Google ADK" /></p>

<h3 id="1-the-base-agent-the-foundation">1. The Base Agent (The Foundation)</h3>
<p>The BaseAgent is an abstract base class responsible for handling cross-cutting concerns that every enterprise agent needs:</p>

<ul>
  <li>Consistent logging structures.</li>
  <li>Centralized security and exception handling.</li>
  <li>Standardized interface definitions.</li>
</ul>

<p>By encapsulating these inside a base layer, any new agent you spin up automatically inherits these core enterprise features.</p>

<h3 id="2-the-basic-agent-configuration-over-hardcoding">2. The Basic Agent (Configuration over Hardcoding)</h3>
<p>The BasicAgent extends the base layer to introduce configuration management. To keep our code robust and maintainable, prompts should never be hardcoded.</p>

<p>Instead, the BasicAgent pulls details—like the target Gemini model or project IDs—from environment variables. Simple instruction hooks can be fed via configurations, allowing your DevOps pipeline to deploy behavior updates or model rollouts without requiring a single line of code to change.</p>

<h3 id="3-the-tool-agent-advanced-governance--mcp">3. The Tool Agent (Advanced Governance &amp; MCP)</h3>
<p>The ToolAgent introduces external capabilities through the Model Context Protocol (MCP). For complex enterprise needs, configuration files aren’t enough. The ToolAgent uses file pointers to read advanced Markdown documents detailing strict system instructions, safety limitations, data boundaries, and governance rules.</p>

<h2 id="extending-capability-with-custom--native-mcp-tools">Extending Capability with Custom &amp; Native MCP Tools</h2>

<p>An agent on its own is just an engine that knows how to talk to a Large Language Model. To make it useful, it needs a way to interact with the outside world. This presentation highlighted two separate paradigms for handling tools:</p>

<h3 id="abstracting-built-in-sdk-tools">Abstracting Built-in SDK Tools</h3>

<p>The Google ADK provides out-of-the-box tools for major platforms like BigQuery. However, to maintain code isolation, we shouldn’t map those tools blindly. In the demo code, we extended the native tool using a custom authorization class (AuthorizationContext). This separation of concerns ensures that token generation, credential refreshing, and cloud authentication happen entirely independent of the agent’s reasoning loop.</p>

<h3 id="building-custom-mcp-tools-from-scratch">Building Custom MCP Tools from Scratch</h3>

<p>When an SDK lacks a tool for your specific business requirements—such as interacting with a custom file bucket or specific database—you can build your own using frameworks like FastMCP. The presentation demonstrated a custom Google Cloud Storage (GCS) tool capable of:</p>

<ul>
  <li>Listing target bucket contents.</li>
  <li>Generating compressed file previews.</li>
  <li>Executing self-diagnostic checks to validate connections before a workflow begins.</li>
</ul>

<h3 id="the-unsung-hero-the-agent-runner-runtime">The Unsung Hero: The Agent Runner Runtime</h3>

<p>One of the least understood components of agentic design is the Agent Runner. While the Google ADK provides an excellent local web-based playground that automatically bootstraps your environment for rapid testing, production environments require you to explicitly script this runtime pipeline.</p>

<p>The Agent Runner acts as the orchestrator of your system, managing three vital elements:</p>

<ul>
  <li><strong>Orchestration:</strong> Connecting multi-agent workflows (e.g., passing tasks seamlessly between a storage agent and a BigQuery data agent).</li>
  <li><strong>Session Management:</strong> Directing the active state of an execution path.</li>
  <li><strong>Memory Management:</strong> Maintaining persistence. While short-term tasks can run on fast, volatile in-memory sessions, complex industrial or manufacturing pipelines require long-term history to monitor trends, catch system drift, and diagnose process failures over time. The presentation demonstrated wiring an isolated SQLite engine into the runner to handle this tracking cleanly.</li>
</ul>

<h2 id="modern-devops-for-ai-uv-and-makefiles">Modern DevOps for AI: UV and Makefiles</h2>

<p>Enterprise code demands automated quality gates. Rather than relying on standard global package structures, the project repository leverages modern Python tooling to accelerate developer onboarding:</p>

<ul>
  <li>
    <p><strong>UV (Virtual Environment Manager):</strong> A lightning-fast, modern alternative to legacy virtualenv tools. Using a strict uv.lock file ensures every developer on your team runs identical dependency versions, entirely eradicating the “it works on my machine” problem.</p>
  </li>
  <li>
    <p><strong>Makefiles as CI/CD Blueprints:</strong> Instead of manually typing tedious execution commands, a standard Makefile orchestrates development tasks. Running make lint catches configuration errors and unmapped dependencies (like an imported but unused session config) before the code ever reaches a code review, while commands like make run-tool smoothly handle localized testing.</p>
  </li>
</ul>

<h2 id="key-takeaways-for-enterprise-developers">Key Takeaways for Enterprise Developers</h2>

<ul>
  <li><strong>Isolate the SDK:</strong> Treat third-party agent frameworks as pluggable libraries, not foundational pillars. Abstract them behind abstract base classes so you can swap architectures with minimal friction.</li>
  <li><strong>Configuration Wins Over Code:</strong> Keep your agent identities, target models, and governance logic inside Markdown and environment variables. Let your DevOps pipelines drive system behavior.</li>
  <li><strong>Rely on Runtimes for Memory:</strong> Keep your agents lean. Let specialized agent runners handle the operational state, session history, and database logging.</li>
</ul>

<h1 id="resources--next-steps">Resources &amp; Next Steps</h1>

<ul>
  <li>
    <p><strong>Get the Code:</strong> Explore the foundational structures, base classes, and custom MCP tool definitions by visiting the official GitHub Repository. (Don’t forget to star the repo if you find the patterns helpful!)</p>
  </li>
  <li>
    <p><strong>Dive Deeper into Engineering Processes:</strong> For a comprehensive guide on building scalable, process-oriented architectural systems, check out my book, “Data Engineering Process Fundamentals”.</p>
  </li>
</ul>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering/tree/main/adk">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> MLOps and Productionizing Models<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="youtube-video">YouTube Video</h2>

<p>Take a look at this video and learn about building and testing agents using the Google Agent Development Kit (ADK) by leveraging its CLI and web tool. We’ll start from the absolute basics, learning how to build a simple agent and test it instantly.</p>

<p>From there, we will move on to extend our agents by building custom Model Context Protocol (MCP) tools. Throughout this session, we will focus on staying away from hardcoded prompts. Instead, you’ll learn how to leverage clean software design patterns to build truly reusable, extendable agents that can adapt dynamically with the use of configurable prompts and plug-and-play MCP tools, shifting your development loop from a one-off script or simple notebook into a scalable, production library.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/ND-qYhXTsN4?si=O4bmSuU0XrWPVV7K" title="Building Reusable &amp; Extendable Agents with the Google ADK" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notify on new events!</p>
</blockquote>

<hr />

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="python" /><category term="data" /><category term="ai" /><category term="ai-agent" /><category term="adk" /><summary type="html"><![CDATA[Discover how to transition from building monolithic, single-prompt chatbots to designing highly modular, scalable, and extendable enterprise agents using the Google Agent Development Kit (ADK). This presentation provides a hands-on architectural deep dive into building process-oriented workflows, implementing the Model Context Protocol (MCP) for cloud data platform integrations, and utilizing automated DevOps tooling to eliminate technical debt in your AI engineering pipelines.]]></summary></entry><entry><title type="html">From Passive Dashboards to Active Agents: Real-Time Reasoning over Data Streams</title><link href="https://www.ozkary.dev/from-passive-dashboards-to-active-agents-real-time-reasoning-over-data-streams/" rel="alternate" type="text/html" title="From Passive Dashboards to Active Agents: Real-Time Reasoning over Data Streams" /><published>2026-04-30T00:00:00-04:00</published><updated>2026-04-30T09:00:00-04:00</updated><id>https://www.ozkary.dev/from-passive-dashboards-to-active-agents-real-time-reasoning-over-data-streams</id><content type="html" xml:base="https://www.ozkary.dev/from-passive-dashboards-to-active-agents-real-time-reasoning-over-data-streams/"><![CDATA[<h1 id="overview">Overview</h1>

<p>Dashboards are effective at showing us that something is breaking, but they usually rely on a human to watch the screen and decide what to do next. In this session, we will look at how to take a standard real-time telemetry dashboard and make it autonomous.</p>

<p>We will walk through a practical implementation using an Angular frontend and a Node.js server. We’ll look at how the system leverages a relational database for persistence and a Redis in-memory cache to handle high-frequency and short volume data feeds. From there, we incorporate an AI Agent that follows three core principles: perceiving the data stream through a sliding window, reasoning against statistical control limits, and acting by sending real-time analysis back to the user. This session is focused on bridging the gap between raw data streams and automated decision-making.</p>

<p><img src="../../assets/2026/ozkary-passive-dashboard-to-active-agents.png" alt="From Passive Dashboards to Active Agents: Real-Time Reasoning over Data Streams" title="From Passive Dashboards to Active Agents: Real-Time Reasoning over Data Streams" /></p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> MLOps and Productionizing Models<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="-review-the-repo-used-for-this-presentation">🔗 Review the repo used for this presentation:</h2>
<p><a href="https://github.com/ozkary/Realtime-Apps-with-Nodejs-Angular-Socketio-Redis"><img src="https://img.shields.io/badge/GitHub-Realtime--Apps--with--Nodejs--Angular--Socketio--Redis-blue?style=for-the-badge&amp;logo=github" alt="GitHub Repo" /></a></p>

<h3 id="tech-stack">Tech Stack</h3>
<p><img src="https://img.shields.io/badge/GoogleCloud-%234285F4.svg?style=for-the-badge&amp;logo=google-cloud&amp;logoColor=white" alt="Google Cloud" />
<img src="https://img.shields.io/badge/Vertex%20AI-%234285F4.svg?style=for-the-badge&amp;logo=google-cloud&amp;logoColor=white" alt="Vertex AI" />
<img src="https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&amp;logo=node.js&amp;logoColor=white" alt="NodeJS" />
<img src="https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge&amp;logo=angular&amp;logoColor=white" alt="Angular" />
<img src="https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&amp;logo=typescript&amp;logoColor=white" alt="TypeScript" />
<img src="https://img.shields.io/badge/redis-%23DD0031.svg?style=for-the-badge&amp;logo=redis&amp;logoColor=white" alt="Redis" />
<img src="https://img.shields.io/badge/Socket.io-010101?style=for-the-badge&amp;logo=socket.io&amp;logoColor=white" alt="Socket.io" /></p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/oJC8XhxvdX4?si=Wh2MTD2gHWAnjqoL" title="From Passive Dashboards to Active Agents: Real-Time Reasoning over Data Streams" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notify on new events!</p>
</blockquote>

<h3 id="-agenda">📅 Agenda</h3>

<ul>
  <li>The Real-Time Feed: Monitoring Device Telemetry</li>
</ul>

<p>An introduction to the live system where devices emit high-frequency data for quality monitoring and $3\sigma$ control limit oversight.</p>

<ul>
  <li>System Architecture: From Ingestion to Persistence</li>
</ul>

<p>A deep dive into the technical stack, mapping out the data journey through Node.js, Redis in-memory caching, and relational database storage.</p>

<ul>
  <li>The Human in the Loop: Cognitive Limitations</li>
</ul>

<p>Exploring the “Passive Monitoring” challenge—why relying on human interpretation of real-time alerts creates a bottleneck in process control.</p>

<ul>
  <li>The AI Agent: Applying the 3 Principles</li>
</ul>

<p>Implementing the “Active Observer” using the three core pillars of AI Agents: Perception (the window), Reasoning (the limits), and Action (the analysis).</p>

<ul>
  <li>The Intelligent Journey: Summary &amp; Advantages</li>
</ul>

<p>Recapping our transition from a passive monitor to a smart system and discussing the advantages of automated, agentic data interpretation.</p>

<h3 id="-why-attend">⭐ Why Attend?</h3>

<p>The industry is moving beyond simple “Chat” interfaces and into the realm of Agentic Observability. By attending this session, you will see a practical blueprint for integrating intelligence directly into a high-velocity data stack.</p>

<h3 id="-who-is-this-for">👥 Who Is This For?</h3>

<ul>
  <li>Junior Developers: Learn the fundamentals of real-time streaming, how to manage state in Node.js, and how to interact with AI APIs in a professional environment.</li>
  <li>Senior Engineers &amp; Architects: See a robust architectural pattern for integrating Redis, relational databases, and AI Agents while maintaining system stability and security.</li>
  <li>Decision Makers (VPs/Directors): Understand the ROI of “Active Monitoring”—how AI Agents can act as a force multiplier for your engineering teams by automating the first layer of data interpretation.</li>
  <li>Quality &amp; Reliability Engineers: Explore how to digitize the control limit logic you already use into an autonomous 24/7 “Digital Twin.”</li>
</ul>

<h2 id="presentation">Presentation</h2>

<h3 id="the-real-time-feed-challenge">The Real-Time Feed Challenge</h3>
<p><em>High-velocity telemetry defines the “digital pulse” of modern industrial systems.</em></p>

<ul>
  <li><strong>Telemetry Streams:</strong> Industrial devices emit continuous telemetry (Temperature, Sound, Humidity). These data points require sub-second processing to maintain operational stability.</li>
  <li><strong>Control Limits:</strong> Quality engineers rely on statistical boundaries to define “normal” operation. Detecting drift is the critical first step in identifying risks before failure occurs.</li>
</ul>

<hr />

<h3 id="scalable-system-architecture">Scalable System Architecture</h3>
<p><em>A multi-layered stack designed to bridge the gap between ingestion and intelligence.</em></p>

<ul>
  <li><strong>Redis Cache:</strong> Manages the “Live State” or Digital Twin. Provides sub-millisecond access for immediate AI perception.</li>
  <li><strong>Relational Data Warehouse:</strong> Powers the historical persistence layer for long-term trend analysis and compliance auditing.</li>
  <li><strong>Node Controller:</strong> The orchestration hub. Manages telemetry ingestion, state updates, and the execution of the agentic reasoning loop.</li>
</ul>

<hr />

<h3 id="the-human-in-the-loop-trap">The “Human in the Loop” Trap</h3>
<p><em>Passive observability relies on human interpretation, creating a critical bottleneck.</em></p>

<ul>
  <li><strong>Cognitive Overload:</strong> Humans struggle to interpret hundreds of concurrent streams, missing subtle patterns.</li>
  <li><strong>Alert Fatigue:</strong> Constant threshold violations desensitize responders, causing critical $3\sigma$ violations to be ignored.</li>
  <li><strong>Response Latency:</strong> The time required for a human to interpret a dashboard often exceeds the window for effective corrective action.</li>
</ul>

<hr />

<h3 id="the-3-principles-of-ai-agents">The 3 Principles of AI Agents</h3>
<p><em>Automating observability requires a system that can perceive, reason, and act independently.</em></p>

<ol>
  <li><strong>Perception:</strong> Maintaining a stateful sliding window of the Digital Twin to understand temporal context.</li>
  <li><strong>Reasoning:</strong> Evaluating the stream against statistical $3\sigma$ limits and physical engineering constraints.</li>
  <li><strong>Action:</strong> Closing the loop by emitting real-time narratives or triggering autonomous safety protocols.</li>
</ol>

<hr />

<h3 id="the-intelligent-journey-comparison">The Intelligent Journey: Comparison</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Feature</th>
      <th style="text-align: left">Passive Monitor</th>
      <th style="text-align: left">Smart Monitor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>Interpretation</strong></td>
      <td style="text-align: left">Requires human “eyes-on-glass”</td>
      <td style="text-align: left">Autonomous, semantic interpretation</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Response</strong></td>
      <td style="text-align: left">Reactive to simple thresholds</td>
      <td style="text-align: left">Proactive identification of drift</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Reliability</strong></td>
      <td style="text-align: left">High risk of missed signals</td>
      <td style="text-align: left">Intelligent filtering of noise</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Data Context</strong></td>
      <td style="text-align: left">Disconnected historical vs. live</td>
      <td style="text-align: left">Stateful perception of “Live Device”</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Intervention</strong></td>
      <td style="text-align: left">Significant human latency</td>
      <td style="text-align: left">Automated safety &amp; audit narratives</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="python" /><category term="data" /><category term="ai" /><category term="ai-agent" /><summary type="html"><![CDATA[Dashboards are effective at showing us that something is breaking, but they usually rely on a human to watch the screen and decide what to do next. In this session, we will look at how to take a standard real-time telemetry dashboard and make it autonomous.]]></summary></entry><entry><title type="html">Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration</title><link href="https://www.ozkary.dev/architecting-an-agentic-data-pipeline-from-data-lake-discovery-to-managed-orchestration/" rel="alternate" type="text/html" title="Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration" /><published>2026-03-31T00:00:00-04:00</published><updated>2026-02-25T08:00:00-05:00</updated><id>https://www.ozkary.dev/architecting-an-agentic-data-pipeline-from-data-lake-discovery-to-managed-orchestration</id><content type="html" xml:base="https://www.ozkary.dev/architecting-an-agentic-data-pipeline-from-data-lake-discovery-to-managed-orchestration/"><![CDATA[<h1 id="overview">Overview</h1>

<p>This session explores the strategy of leveraging AI to move beyond manual implementation and into the next level of data engineering. We dive into a process that positions the AI not as a syntax generator, but as a cognitive partner in the engineering lifecycle. We will examine the architectural shift required to transform raw data lake assets into high-performance, orchestrated systems, focusing on the strategic collaboration between human intent and agentic design.</p>

<p><img src="../../assets/2026/ozkary-architecting-agentic-data-pipeline.png" alt="Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration" title="Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration" /></p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> MLOps and Productionizing Models<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="-related-repository-ai-agents-for-data-engineering">🔗 Related Repository: AI Agents for Data Engineering</h2>

<p><a href="https://github.com/ozkary/data-engineering-mta-turnstile/tree/main/ai-agents"><img src="https://img.shields.io/badge/GitHub-ozkary%2Fdata--engineering--mta--turnstile-blue?logo=github" alt="GitHub Repo" /></a></p>

<p>Explore the full implementation of the AI Agents used in this workflow:
<strong>https://github.com/ozkary/data-engineering-mta-turnstile/tree/main/ai-agents</strong></p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/opelf_XJ8Js?si=U7xVs3nqJAVsWkkV" title="Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notify on new events!</p>
</blockquote>

<h3 id="-agenda">📅 Agenda</h3>

<ul>
  <li><strong>Data Lake Discovery:</strong> The strategy of deploying discovery agents to autonomously identify patterns and define the foundation of the data grain.</li>
  <li><strong>Governance &amp; Requirements:</strong> Establishing the strategic guardrails and requirements that empower an “Architect” agent to maintain system consistency.</li>
  <li><strong>Logical Design for the Staging Area:</strong> A process dive into using AI to propose and build a logical abstraction layer, separating raw sources from core business logic.</li>
  <li><strong>Designing and Implementing the Physical Model:</strong> How agents navigate the transition to physical storage, building Dimension and Fact tables while maintaining referential integrity.</li>
  <li><strong>Incremental Update Strategy:</strong> Developing a sustainable approach to support continuous data feeds from the data lake using idempotent, self-healing processes.</li>
  <li><strong>Pipeline Design and Orchestration:</strong> The coordination of complex tasks to manage the relationship between dimensions and facts, ensuring strict lineage and integrated observability.</li>
</ul>

<h3 id="-why-attend">⭐ Why Attend?</h3>

<ul>
  <li><strong>Elevate Your Role:</strong> Learn how to shift your focus from writing repetitive code to defining high-level architectural intent and performing strategic design reviews.</li>
  <li><strong>Master Systemic Reasoning:</strong> Understand how to leverage AI to solve complex engineering challenges like referential integrity and dependency management at scale.</li>
  <li><strong>Build for Operations:</strong> Move toward a model where system health and observability are built-in byproducts of the design process, not afterthoughts.</li>
</ul>

<h3 id="-who-is-this-for">👥 Who Is This For?</h3>

<ul>
  <li><strong>Data Engineers &amp; Architects:</strong> Looking to evolve their workflow from manual scripting to high-level systemic design.</li>
  <li><strong>Engineering Leaders:</strong> Interested in the ROI and reliability of integrating autonomous agents into the development lifecycle.</li>
  <li><strong>AI Enthusiasts:</strong> Wanting to see a practical, “beyond-the-chatbot” application of agentic reasoning in a production environment.</li>
  <li><strong>Technical Decision Makers:</strong> Seeking a strategy for maintaining governance and referential integrity in an AI-augmented organization.</li>
</ul>

<h2 id="presentation">Presentation</h2>

<h3 id="automating-the-data-engineering-lifecycle">Automating the Data Engineering Lifecycle</h3>

<p>We are running a modern Data Engineering process by combining the reasoning power of AI Agents with the standardized connectivity of MCP tools.</p>

<ul>
  <li><strong>Goal:</strong> Move from manual scripting to an intelligent, agent-led pipeline.</li>
  <li><strong>Outcome:</strong> A system that can discover, map, and orchestrate data across the cloud.</li>
</ul>

<h3 id="how-do-we-leverage-these-tools">How do we leverage these tools?</h3>

<p>The “Brains” and the “Hands” of the process.</p>

<ul>
  <li><strong>AI Agents:</strong> Use Large Language Models (LLMs) to understand complex system instructions and specific user prompts. They provide the “logic” behind the process.</li>
  <li><strong>MCP Tools:</strong> Provide the “connectivity.” They expose metadata to the agent, which allows the AI to understand exactly what actions are available and how to execute them correctly.</li>
</ul>

<h3 id="how-does-this-all-work">How does this all work?</h3>

<p>The Execution Loop</p>

<ul>
  <li><strong>The Model:</strong> The agent calls a managed LLM service in the cloud (Gemini) for high-level reasoning.</li>
  <li><strong>Discovery:</strong> The agent “sees” the available MCP tools and automatically understands how to use them to interact with GCS or BigQuery.</li>
  <li><strong>Governance:</strong> System Prompts provide the guardrails, core requirements, and engineering standards the agent must follow.</li>
  <li><strong>Action:</strong> The User Prompt provides the specific task (e.g., “Find today’s files”). The agent then executes the work.</li>
</ul>

<h3 id="intelligent-orchestration">Intelligent Orchestration</h3>

<p>We build an AI-powered Data Engineering process that successfully handles:</p>

<ul>
  <li><strong>Data Lake Discovery:</strong> Automatically identifying patterns and namespaces in GCS.</li>
  <li><strong>Data Warehouse Orchestration:</strong> Mapping those discoveries directly into BigQuery and creating the data models for analysis.</li>
</ul>

<h3 id="ai-driven-data-engineering">AI-Driven Data Engineering</h3>
<ul>
  <li>Agents can connect to a data lake and run discovery on the file</li>
  <li>Agents can use the result of the discovery to build external tables, views, tables and even stored procedures for the incremental update process</li>
</ul>

<p><img src="../../assets/2026/ozkary-architecting-agentic-data-flows-from-datalakes-to-data-warehouse.jpg" alt="Architecting an Agentic Data Pipeline - From Data Lake Discovery to Managed Orchestration" /></p>

<h2 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h2>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="python" /><category term="data" /><category term="ai" /><category term="ai-agent" /><summary type="html"><![CDATA[Learn how AI agents can be used to transform the data engineering lifecycle—from data lake discovery to full pipeline orchestration. This session shows how teams can move beyond manual coding and begin using AI as a true engineering partner, capable of reasoning about architecture, mapping data, and driving automated workflows.]]></summary></entry><entry><title type="html">AI Driven App Architecture - Smart Development Life Cycle Governance</title><link href="https://www.ozkary.dev/ai-driven-app-architecture-smart-development-life-cycle-governance/" rel="alternate" type="text/html" title="AI Driven App Architecture - Smart Development Life Cycle Governance" /><published>2026-02-25T00:00:00-05:00</published><updated>2026-02-25T08:00:00-05:00</updated><id>https://www.ozkary.dev/ai-driven-app-architecture-smart-development-life-cycle-governance</id><content type="html" xml:base="https://www.ozkary.dev/ai-driven-app-architecture-smart-development-life-cycle-governance/"><![CDATA[<h1 id="overview">Overview</h1>

<p>As development teams scale, maintaining architectural consistency becomes the biggest bottleneck. Documents are ignored, and linters only catch syntax errors, not design patterns.</p>

<p>In this session, we will demonstrate how to transform AI from a passive coding assistant into an active Architectural Enforcer. By embedding your “unwritten rules” directly into the repository configuration, you create a developer experience where the AI enforces your patterns in real-time.</p>

<p>We will explore how this shifts the workflow: new developers are guided by the AI from day one, preventing architectural leakage before a pull request is ever opened.</p>

<p><img src="../../assets/2026/ozkary-ai-driven-architecture-smart-development-life-cycle-governance.png" alt="AI Driven App Architecture - Smart Development Life Cycle Governance" title="AI Driven App Architecture - Smart Development Life Cycle Governance" /></p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> MLOps and Productionizing Models<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/wvhb9B3DeMY?si=gRHAES40_s1HdMkX" title="AI Driven App Architecture - Smart Development Life Cycle Governance" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<blockquote>
  <p>👍 Subscribe to the channel to get notify on new events!</p>
</blockquote>

<h3 id="video-agenda">Video Agenda</h3>

<p><strong>The Problem: Architectural Drift</strong></p>

<p>Why strict rules (Controller-View, Pascal/camelCase) degrade over time and how AI can fix it.</p>

<p><strong>The Intelligence Engine</strong></p>

<p>Breakdown of the core components: Global Rules, Contextual Guardrails, Agent Tools, and Directory Structure.</p>

<p><strong>Configuration: Global Governance</strong></p>

<p>Setting up global “system prompts” for the repository to enforce tech stack and naming conventions.</p>

<p><strong>Configuration: Contextual Guardrails</strong></p>

<p>Creating “firewalls” for specific folders (e.g., preventing logic in views, preventing API calls in Controllers).</p>

<p><strong>Configuration: The Tooling</strong></p>

<p>Building custom Slash Commands (/new-module) to automate “Vertical Slice” scaffolding.</p>

<p><strong>Configuration: The Auditor Agent</strong></p>

<p>Implementing a specialized “Gatekeeper” persona that scans imports to ensure strict layer separation.</p>

<p><strong>Agent Mapping</strong></p>

<p>A conceptual framework comparing repository configuration to autonomous agent architecture.</p>

<p><strong>💡 Why Attend?</strong></p>

<ul>
  <li>Stop writing boilerplate: Learn to automate complex folder structures with one command.</li>
  <li>Reduce PR Reviews: Shift governance “left” by having the AI catch architectural errors instantly.</li>
  <li>Interactive Demo: See the .github configuration in action on a real codebase.</li>
  <li>Takeaway Code: Leave with the copy-paste markdown templates to implement this in your own repo tomorrow.</li>
</ul>

<p><strong>Target Audience</strong></p>

<ul>
  <li>Tech Leads &amp; Architects who need to enforce standards across scaling teams.</li>
  <li>Developers who are tired of correcting the same patterns in code reviews.</li>
  <li>DevOps Engineers interested in “Governance as Code.”</li>
  <li>Leadership teams that are trying to raise standards and productivity in their organizations.</li>
</ul>

<h2 id="presentation">Presentation</h2>

<h3 id="setting-the-stage">SETTING THE STAGE</h3>

<p><strong>The Context</strong></p>
<ul>
  <li>We enforce a strict pattern using the ViCSA architecture</li>
  <li>PascalCase for UI Components.</li>
  <li>camelCase for Logic &amp; Services.</li>
  <li>Separation of Concerns (SoC)  is non-negotiable.</li>
</ul>

<p><strong>The Problem</strong></p>
<ul>
  <li>Architectural Drift: Patterns degrade over time.</li>
  <li>Passive Docs: Wiki pages are ignored.</li>
  <li>Linter Limits: Linters catch syntax, not architecture.</li>
  <li>Solution: Active Governance via AI.</li>
</ul>

<h3 id="the-intelligence-engine">THE INTELLIGENCE ENGINE</h3>

<p><strong>Core AI Policies</strong></p>

<ul>
  <li>Centralized Config: Rules live in the repo, not the user’s IDE.</li>
  <li>Global Rules: Applied to every interaction (System Prompt).</li>
  <li>Contextual Rules: Triggered only when specific files are opened.</li>
  <li>Agent Tools: Custom commands to scaffold new components, controllers or services.</li>
</ul>

<p><img src="../../assets/2026/ozkary-ai-driven-architecture-project-structure.png" alt="AI Driven App Architecture - Smart Development Life Cycle Governance - Project Structure" /></p>

<h3 id="configuration-global-governance">CONFIGURATION: GLOBAL GOVERNANCE</h3>

<p><strong>Global Instructions</strong></p>

<p><strong>File:</strong> <code class="language-plaintext highlighter-rouge">.github/copilot-instructions.md</code></p>

<p>This acts as the System Prompt for the entire repository. It is silently added to every interaction.</p>

<ul>
  <li>Tech Stack: TS, Tailwind, Hooks.</li>
  <li>Naming: Pascal vs camelCase.</li>
  <li>Flow: <code class="language-plaintext highlighter-rouge">View → Controller → Service -&gt; API</code>.</li>
</ul>

<p><img src="../../assets/2026/ozkary-ai-driven-architecture-global-governance.png" alt="AI Driven App Architecture - Smart Development Life Cycle Governance - Global Governance" /></p>

<h3 id="dev-experience-the-silent-enforcer">DEV EXPERIENCE: THE SILENT ENFORCER</h3>

<p><strong>Without Config</strong></p>

<p>A developer asks:</p>

<p><code class="language-plaintext highlighter-rouge">How do I create a new service?</code></p>

<ul>
  <li>AI suggests a generic Class-based service.</li>
  <li>Suggests creating a utils.js file.</li>
  <li>Ignores project folder structure.</li>
</ul>

<p><strong>With Config</strong></p>

<p>A developer asks: 
<code class="language-plaintext highlighter-rouge">How do I create a new service?"</code></p>

<ul>
  <li>AI reads the Governance.</li>
  <li>Response: <code class="language-plaintext highlighter-rouge">Create src/services/userAuth/index.ts using a functional export, as per project standards.</code></li>
</ul>

<h3 id="configuration-contextual-guardrails">CONFIGURATION: CONTEXTUAL GUARDRAILS</h3>

<p><strong>View Layer Rules</strong></p>

<p><strong>File:</strong> <code class="language-plaintext highlighter-rouge">.github/instructions/controller-layer.md</code></p>

<p><strong>Trigger:</strong> Opening any <code class="language-plaintext highlighter-rouge">**/*.tsx file</code>.</p>

<ul>
  <li>“You are a View.”</li>
  <li>“No Logic allowed.”</li>
  <li>“No direct API calls.”</li>
</ul>

<p><strong>Controller Layer Rules</strong></p>

<p><strong>File:</strong> <code class="language-plaintext highlighter-rouge">.github/instructions/view-layer.md</code></p>

<p><strong>Trigger:</strong> Opening any <code class="language-plaintext highlighter-rouge">**/controller.ts</code> file.</p>

<ul>
  <li>“You are a Controller.”</li>
  <li>“Use Services, NOT Fetch.”</li>
  <li>“Manage State here.”</li>
</ul>

<h3 id="dev-experience-real-time-intervention">DEV EXPERIENCE: REAL-TIME INTERVENTION</h3>

<p><strong>The Scenario</strong></p>

<ul>
  <li>A developer tries to write fetch() inside a UI Component (index.tsx).</li>
  <li>They ask Copilot: “Write a fetch call here for me.”</li>
</ul>

<p><strong>The Intervention</strong></p>

<p><strong>Ghost Text:</strong> Copilot refuses to autocomplete the network call.</p>

<p><strong>Chat Reply:</strong></p>

<p><code class="language-plaintext highlighter-rouge">I cannot. This is a View file. Please move this logic to the sibling Controller (index.ts) and import it.</code></p>

<h3 id="configuration-the-tooling">CONFIGURATION: THE TOOLING</h3>

<p><strong>Prompt Library</strong></p>

<p><strong>File:</strong> <code class="language-plaintext highlighter-rouge">.github/prompts/new-module.md</code></p>

<p>These act as Agent Tools or “Slash Commands”.</p>

<ul>
  <li>Goal: Automate the “Vertical Slice”.</li>
  <li>Benefit: Complex scaffolding logic is stored in the repo, not in the developer’s head.</li>
  <li>Usage: <code class="language-plaintext highlighter-rouge">/new-module</code></li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Prompt Library (The Scaffolder)
File: `.github/prompts/new-component.md`
Goal: Automate the creation of a standalone UI Component with optional Service/API layers.

# Create New Component
I need to generate a new component following our **Folder-as-Namespace** pattern.
**Command:** `/new-component: `

Please generate the code blocks for the layers requested in the arguments (service, api). 
*Note: Logic folders must be camelCase. UI folders must be PascalCase.*

---

### Component Layer (Required)
**Folder:** `src/components//`
- **File:** `controller.ts` (Controller): Logic and State only.
- **File:** `index.tsx` (View): Pure UI. Imports Controller.
---


### Service Layer (Optional)
*Condition: Generate only if 'service' is present in .*

**File:** `src/services//index.ts`
- **Role:** Business logic and data transformation.
- **Code:** Import the API (if requested). Export a service object or functional exports.

---

### API Layer (Optional)
*Condition: Generate only if 'api' is present in .*

**File:** `src/apis//index.ts`
- **Role:** Define specific endpoints.
- **Code:** Import `coreClient` from `src/apis/index.ts`. Export async functions with typed responses.

---

### Style Guidelines
- **Typing:** Use TypeScript interfaces for all Props and Data models.
- **Separation:** Logic stays in `controller.ts`, JSX stays in `index.tsx`.
- **Naming:** Components use PascalCase; Services/APIs use camelCase.
</code></pre></div></div>

<h3 id="dev-experience-the-scaffolding">DEV EXPERIENCE: THE SCAFFOLDING</h3>

<p><strong>The Command</strong></p>

<p>Starting a new feature called “Sales Dashboard”.</p>

<p><strong>Action:</strong></p>

<p><code class="language-plaintext highlighter-rouge">/new-module featureName:Sales Dashboard</code></p>

<p><strong>The Execution</strong></p>

<ul>
  <li>Analyzes the request.</li>
  <li>Applies <code class="language-plaintext highlighter-rouge">PascalCase</code> to Containers/Components folders.</li>
  <li>Applies <code class="language-plaintext highlighter-rouge">camelCase</code> to api/service folders.</li>
  <li>Generates the <code class="language-plaintext highlighter-rouge">Controller-View</code> pair instantly.</li>
</ul>

<h3 id="the-result-generated-architecture">THE RESULT: GENERATED ARCHITECTURE</h3>

<p><strong>The Results</strong></p>

<ul>
  <li>Layers generated instantly.</li>
  <li>Correct naming conventions applied.</li>
  <li>Zero manual boilerplate.</li>
</ul>

<p><img src="../../assets/2026/ozkary-ai-driven-architecture-project-structure.png" alt="AI Driven App Architecture - Smart Development Life Cycle Governance - Project Structure" /></p>

<h3 id="configuration-the-auditor-agent">CONFIGURATION: THE AUDITOR AGENT</h3>

<p><strong>Specialized Persona</strong></p>

<p><strong>File:</strong> <code class="language-plaintext highlighter-rouge">.github/agents/arch-auditor.md</code></p>

<p>This creates a named Agent that acts as a Gatekeeper. It doesn’t write features; it verifies them.</p>

<ul>
  <li>Role: Architecture Enforcer.</li>
  <li>Task: Scans imports to ensure strict layer separation.</li>
  <li>Rule: “Views never talk to APIs.”</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Custom AI Agent (The Reviewer)
Agent ID: `@vicsa-auditor`

Context: A bot that ensures the chain of command is respected using the ViCSA architecture (View Controller Service API)

## Primary Objective
name: Architecture Auditor
description: Verifies strict separation of Controller, Service, and View layers.
tools: [code-search]

---
## Role
You ensure the integrity of the data flow: View -&gt; Controller -&gt; Service -&gt; API.

## Audit Logic
When asked to "Audit this feature":

1. **Check the View (.tsx):** - FAIL if it imports `src/services`.
   - FAIL if it imports `src/apis`.
   - PASS only if it imports `./index`.

2. **Check the Controller (.ts):**
   - FAIL if it uses `fetch` or `axios`.
   - PASS only if it delegates to `src/services`.

3. **Check the Service:**
   - FAIL if it defines its own URL logic.
   - PASS only if it imports `src/apis/index.ts`.

</code></pre></div></div>

<h3 id="dev-experience-the-code-review">DEV EXPERIENCE: THE CODE REVIEW</h3>

<p><strong>The Interaction</strong></p>

<p>Before raising a pull request, the developer invokes the auditor.</p>

<p><strong>Prompt:</strong></p>

<p><code class="language-plaintext highlighter-rouge">@vicsa-auditor check this component for violations.</code></p>

<p><strong>Response:</strong></p>

<p><code class="language-plaintext highlighter-rouge">✅ PASS: SalesDashboard/index.tsx imports only from its sibling controller. No direct API calls found.</code></p>

<p><img src="../../assets/2026/ozkary-ai-driven-architecture-review-process.png" alt="AI Driven App Architecture - Smart Development Life Cycle Governance - Review Process" /></p>

<h3 id="the-autonomy-advantage">THE AUTONOMY ADVANTAGE</h3>

<p>AI enforces the ViCSA architecture through continuous observation and autonomous execution.</p>

<ul>
  <li><strong>Perception</strong>: Continuously observes the active workspace, file paths (e.g., src/components/), and context to understand the developer’s structural intent.</li>
  <li><strong>Reasoning</strong>: Evaluates the perceived context against the repository’s .github Guardrails, determining if a View is bypassing a Controller or violating Separation of Concerns, SoC.</li>
  <li><strong>Action</strong>: Executes autonomous scaffolding, enforces strict ViCSA governance, provides recommended fixes feedback.</li>
</ul>

<h3 id="summary--agent-mapping">SUMMARY &amp; AGENT MAPPING</h3>

<p>Embedding governance directly into the repository transforms the development lifecycle. It replaces passive wiki pages with active, real-time enforcement, ensuring that every AI suggestion aligns with architectural standards. This eliminates “drift”, accelerates onboarding, and turns Copilot into a domain-expert partner.</p>

<table>
  <thead>
    <tr>
      <th>Agent Component</th>
      <th>GitHub Implementation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>System Prompt</td>
      <td>Global Instructions (copilot-instructions.md)</td>
    </tr>
    <tr>
      <td>Context / RAG</td>
      <td>Modular Instructions (instructions/*.md)</td>
    </tr>
    <tr>
      <td>Tools / Functions</td>
      <td>Prompt Library (prompts/*.md)</td>
    </tr>
    <tr>
      <td>Human Prompt</td>
      <td>Chat Window</td>
    </tr>
    <tr>
      <td>Persona</td>
      <td>Agent Personas (i.e. agents/arch-auditor.md)</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>RAG: Retrieval augmented generation</p>
</blockquote>

<h3 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h3>
<p>Thanks for reading! 😊 If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://globalai.community/chapters/jacksonville/">Global AI Events</a></strong>: Join Global AI Events.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="code" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="ai" /><category term="ai-agent" /><summary type="html"><![CDATA[As development teams scale, maintaining architectural consistency becomes the biggest bottleneck. Documents are ignored, and linters only catch syntax errors, not design patterns. We will explore how this shifts the workflow: new developers are guided by the AI from day one, preventing architectural leakage before a pull request is ever opened.]]></summary></entry><entry><title type="html">The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment</title><link href="https://www.ozkary.dev/the-cognitive-data-lakehouse-ai-driven-unification-and-semantic-modeling-in-a-zero-etl-environment/" rel="alternate" type="text/html" title="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment" /><published>2026-01-21T00:00:00-05:00</published><updated>2026-01-26T08:00:00-05:00</updated><id>https://www.ozkary.dev/the-cognitive-data-lakehouse-ai-driven-unification-and-semantic-modeling-in-a-zero-etl-environment</id><content type="html" xml:base="https://www.ozkary.dev/the-cognitive-data-lakehouse-ai-driven-unification-and-semantic-modeling-in-a-zero-etl-environment/"><![CDATA[<h1 id="overview">Overview</h1>

<p>In the modern data landscape, the wall between “where data lives” and “how we get insights” is crumbling. This session focuses on the Cognitive Data Lakehouse. A paradigm shift that allows developers to treat a fragmented data lake as a unified, high-performance warehouse.</p>

<p>We will explore how to move beyond brittle ETL pipelines using Zero-ETL architecture in the cloud. The core of our discussion will center on using integrated AI capabilities and semantic modeling to solve the “Metadata Mess” inherent in global manufacturing feeds without moving a single byte of data. From raw telemetry in object storage to semantic intelligence via large language models, we’ll show you the real-world application of AI in modern data engineering.</p>

<p><img src="../../assets/2026/ozkary-the-cognitive-data-lakehouse-ai-driven-unification-and-semantic-modeling-in-a-zero-etl-environment.png" alt="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment" title="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment" /></p>

<h2 id="-featured-open-source-projects">🚀 Featured Open Source Projects</h2>
<p>Explore these curated resources to level up your engineering skills. If you find them helpful, a ⭐️ is much appreciated!</p>

<h3 id="️-data-engineering">🏗️ <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data Engineering</a></h3>
<blockquote>
  <p><strong>Focus:</strong> Real-world ETL &amp; MTA Turnstile Data<br />
<img src="https://img.shields.io/badge/Maintained-Yes-green.svg" alt="Maintained" /> <img src="https://img.shields.io/github/license/ozkary/data-engineering-mta-turnstile" alt="License" /></p>
</blockquote>

<h3 id="-artificial-intelligence">🤖 <a href="https://github.com/ozkary/ai-engineering">Artificial Intelligence</a></h3>
<blockquote>
  <p><strong>Focus:</strong> LLM Patterns and Agentic Workflows<br />
<img src="https://img.shields.io/badge/Status-Active_Development-blue.svg" alt="Status" /> <img src="https://img.shields.io/badge/Focus-Generative_AI-orange" alt="Topic" /></p>
</blockquote>

<h3 id="-machine-learning">📉 <a href="https://github.com/ozkary/machine-learning-engineering">Machine Learning</a></h3>
<blockquote>
  <p><strong>Focus:</strong> MLOps and Productionizing Models<br />
<img src="https://img.shields.io/badge/Build-Passing-brightgreen.svg" alt="Build" /> <img src="https://img.shields.io/badge/Stage-Production_Ready-blue" alt="Stage" /></p>
</blockquote>

<hr />
<p>💡 <strong>Contribute:</strong> Found a bug or have a suggestion? Open an issue! and be part of the open source project.</p>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/nfJl-4BxqyY?si=mHyV5N547HqZ0rJx" title="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<h3 id="video-agenda">Video Agenda</h3>

<p><strong>Phase 1: Foundations &amp; The Zero-ETL Strategy</strong></p>

<p>We kick off with the infrastructure layer. We’ll discuss the design of cross-region telemetry tables and how modern cloud engines allow us to query raw files in object storage with the performance of a native table. We’ll establish why “0x data movement” is the goal for modern scalability.</p>

<p><strong>Phase 2: Confronting the Metadata Mess</strong></p>

<p>Schema drift and inconsistent naming across global regions are the enemies of unified analytics. We will look at why traditional manual mapping fails and how we can use AI inference to bridge these gaps and standardize naming conventions automatically.</p>

<p><strong>Phase 3: AI-Driven Unification &amp; Semantic Modeling</strong></p>

<p>The “Cognitive” part of the Lakehouse. We’ll dive into the technical implementation of registering AI models directly within your data warehouse environment. You’ll see how to create an abstraction layer that uses AI to normalize data on the fly, creating a robust semantic model.</p>

<p><strong>Phase 4: Scaling to a Global Feed</strong></p>

<p>Finally, we’ll demonstrate the DevOps workflow for integrating a new international factory feed into a global telemetry view. We’ll show how to maintain a “Single Source of Intelligence” that BI tools and analysts can consume without needing to know the complexities of the underlying lake.</p>

<p><strong>💡 Why Attend?</strong></p>

<ul>
  <li>Master Modern Architecture: Learn the “Abstraction Layer” design pattern that is replacing traditional, slow ETL/ELT processes.</li>
  <li>Hands-on AI for Data Ops: See exactly how to use AI and semantic modeling within SQL-based workflows to automate data cleaning and schema mapping.</li>
  <li>Scale Without Pain: Discover how to manage global data sources (multi-region, multi-format) through a single governing layer.</li>
  <li>Developer Networking: Connect with other data architects, engineering leaders, and professionals solving similar scale and complexity challenges.</li>
</ul>

<p><strong>Target Audience:</strong> Data Engineers, Analytics Architects, Cloud Developers, and anyone interested in the intersection of Big Data and Generative AI.</p>

<h2 id="presentation">Presentation</h2>
<h3 id="phase-1-the-zero-etl-strategy">Phase 1: The Zero-ETL Strategy</h3>
<h4 id="infrastructure-data-stays-local">INFRASTRUCTURE: DATA STAYS LOCAL</h4>

<p><strong>Architecting for Scale</strong></p>

<ul>
  <li>Storage Decoupling: Raw files remain in the Data Lake, eliminating replication overhead.</li>
  <li>Virtual Access: Data Warehouse external tables allow immediate querying of CSV, Parquet, and JSON.</li>
  <li>Minimal Latency: No waiting for ingest pipelines; analysis starts upon file arrival.</li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-raw-zone.png" alt="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment -  Medallion Architecture Design Diagram " title="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment - Data Stays Local " /></p>

<h4 id="unmatched-storage-efficiency">UNMATCHED STORAGE EFFICIENCY</h4>

<p><strong>Zero Data Replication</strong></p>

<ul>
  <li>Traditional ETL requires moving data across multiple tiers. Our architecture ensures a single source of truth with zero data movement between GCS and BigQuery compute.</li>
  <li>This is similar to the Bronze Zone in a Medallion Architecture.</li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-bronze-zone.png" alt="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment -  Medallion Architecture Design Diagram " title="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment - Storage Efficiency" /></p>

<h3 id="phase-2-the-metadata-mess">Phase 2: The Metadata Mess</h3>
<h4 id="challenges-of-unification">CHALLENGES OF UNIFICATION</h4>

<p><strong>Schema Friction</strong></p>
<ul>
  <li>Feeds arrive with inconsistent headers (e.g., ‘Device Number’ vs ‘deviceNo’). Manual aliasing is fragile and slow.</li>
</ul>

<p><strong>Entity Drift</strong></p>
<ul>
  <li>Names and IDs vary across systems, preventing standard joins from matching records effectively.</li>
</ul>

<p><strong>Type Mismatches</strong></p>
<ul>
  <li>Varying data types for the same concept (Integer vs String) crash standard SQL aggregation views.</li>
</ul>

<h3 id="phase-3-the-ai-solution">Phase 3: The AI Solution</h3>
<h4 id="bigquery-studio-the-ai-interface">BIGQUERY STUDIO: THE AI INTERFACE</h4>

<p><strong>Remote AI Registration</strong></p>
<ul>
  <li>Register Gemini Pro directly inside BigQuery to enable cognitive functions within your SQL workspace.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">CREATE</span> <span class="n">MODEL</span> <span class="nv">`gemini_remote`</span>
<span class="n">REMOTE</span> <span class="k">WITH</span> <span class="k">CONNECTION</span> <span class="nv">`bq_connection`</span>
<span class="k">OPTIONS</span><span class="p">(</span><span class="n">endpoint</span> <span class="o">=</span> <span class="s1">'gemini-1.5-pro'</span><span class="p">);</span>

</code></pre></div></div>

<p><strong>Automated Inference</strong></p>
<ul>
  <li>AI “reads” information schemas to infer mapping logic, moving you from Code Author to Logic Approver.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">ml_generate_text_result</span>
<span class="k">FROM</span> <span class="n">ML</span><span class="p">.</span><span class="n">GENERATE_TEXT</span><span class="p">(</span>
  <span class="n">MODEL</span> <span class="nv">`gemini_remote`</span><span class="p">,</span>
  <span class="p">(</span><span class="k">SELECT</span> <span class="nv">"Compare Source A and B schemas. Write a SQL view to unify them."</span> <span class="k">AS</span> <span class="n">prompt</span><span class="p">)</span>
<span class="p">);</span>

</code></pre></div></div>
<h4 id="ai-assisted-schema-discovery">AI-ASSISTED SCHEMA DISCOVERY</h4>
<p><strong>Prompting for Base Tables</strong></p>
<ul>
  <li>Using AI to generate the DDL for external tables by pointing to compressed feeds in the lake (USA &amp; MEX factories).</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">ml_generate_text_result</span>
<span class="k">FROM</span> <span class="n">ML</span><span class="p">.</span><span class="n">GENERATE_TEXT</span><span class="p">(</span>
  <span class="n">MODEL</span> <span class="nv">`gemini_remote`</span><span class="p">,</span>
  <span class="p">(</span><span class="k">SELECT</span> <span class="nv">"Create External Tables as smart_factory.us_telemetry with path 'gs://factory-dl/us/dev-540/telemetry-*.csv.gz' '. Include option CSV, GZIP compression and skip 1 row. Infer and add the schema using lower case"</span> <span class="k">AS</span> <span class="n">prompt</span><span class="p">));</span>

<span class="k">SELECT</span> <span class="n">ml_generate_text_result</span>
<span class="k">FROM</span> <span class="n">ML</span><span class="p">.</span><span class="n">GENERATE_TEXT</span><span class="p">(</span>
  <span class="n">MODEL</span> <span class="nv">`gemini_remote`</span><span class="p">,</span>
  <span class="p">(</span><span class="k">SELECT</span> <span class="nv">"Create External Tables as smart_factory.mx_telemetry with path 'gs://factory-dl/mx/dev-940/telemetry-*.csv.gz' '. Include option CSV, GZIP compression and skip 1 row. Use schema device_number STRING, bay_id INT64, factory STRING, created STRING"</span> <span class="k">AS</span> <span class="n">prompt</span><span class="p">));</span>

</code></pre></div></div>

<p><strong>Generated BigLake DDL</strong></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- USA Factory Feed</span>
<span class="k">CREATE</span> <span class="k">OR</span> <span class="k">REPLACE</span> <span class="k">EXTERNAL</span> <span class="k">TABLE</span> <span class="nv">`smart_factory.us_telemetry`</span> <span class="p">(</span>
  <span class="n">device_number</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">bay_id</span> <span class="n">INT64</span><span class="p">,</span>
  <span class="n">factory</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">created</span> <span class="n">STRING</span>
<span class="p">)</span>
<span class="k">OPTIONS</span> <span class="p">(</span>
  <span class="n">format</span> <span class="o">=</span> <span class="s1">'CSV'</span><span class="p">,</span>
  <span class="n">uris</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gs://factory-dl/us/dev-540/telemetry*.csv.gz'</span><span class="p">],</span>
  <span class="n">skip_leading_rows</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
  <span class="n">compression</span> <span class="o">=</span> <span class="s1">'GZIP'</span>
<span class="p">);</span>

<span class="c1">-- MEX Factory Feed</span>
<span class="k">CREATE</span> <span class="k">OR</span> <span class="k">REPLACE</span> <span class="k">EXTERNAL</span> <span class="k">TABLE</span> <span class="nv">`smart_factory.mx_telemetry`</span> <span class="p">(</span>
  <span class="n">device_number</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">bay_id</span> <span class="n">INT64</span><span class="p">,</span>
  <span class="n">factory</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">created</span> <span class="n">STRING</span>
<span class="p">)</span>
<span class="k">OPTIONS</span> <span class="p">(</span>
  <span class="n">format</span> <span class="o">=</span> <span class="s1">'CSV'</span><span class="p">,</span>
  <span class="n">uris</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gs://factory-dl/mx/dev-940/telemetry*.csv.gz'</span><span class="p">],</span>
  <span class="n">skip_leading_rows</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
  <span class="n">compression</span> <span class="o">=</span> <span class="s1">'GZIP'</span>
<span class="p">);</span>


</code></pre></div></div>

<h4 id="ai-abstraction-the-view-layer">AI-ABSTRACTION: THE VIEW LAYER</h4>
<p><strong>Generating the Interface</strong></p>
<ul>
  <li>AI creates a clean abstraction view for each external table, decoupling raw storage from the analytics model.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- AI Instruction</span>
<span class="nv">"Create a view named 
smart_factory.vw_us_telemetry 
selecting all columns from the
usa_telemetry table. Safe cast the created column as datetime."</span>
</code></pre></div></div>

<p><strong>Abstraction Layer DDL</strong></p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Semantic Abstraction Layer</span>
<span class="k">CREATE</span> <span class="k">OR</span> <span class="k">REPLACE</span> <span class="k">VIEW</span> <span class="nv">`smart_factory.vw_us_telemetry`</span> <span class="k">AS</span>
<span class="k">SELECT</span> 
  <span class="n">device_number</span><span class="p">,</span>
  <span class="n">bay_id</span><span class="p">,</span>
  <span class="n">factory</span><span class="p">,</span>
  <span class="n">SAFE_CAST</span><span class="p">(</span><span class="n">created</span> <span class="k">as</span> <span class="nb">DATETIME</span><span class="p">)</span> <span class="k">AS</span> <span class="n">created</span>
<span class="k">FROM</span> <span class="nv">`smart_factory.us_telemetry`</span><span class="p">;</span>

</code></pre></div></div>

<h4 id="cognitive-unification">COGNITIVE UNIFICATION</h4>

<p><strong>The Multi-Region Model</strong></p>

<ul>
  <li>The unified view now consumes from the abstraction layer, ensuring that changes to raw storage don’t break the views down stream.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- AI Instruction</span>
<span class="nv">"Create a view with name
smart_factory.vw_telemetry that creates a union of all the fields from the views vw_[region]_telemetry. The regions include us and mx. List out all the field names. Never use * for field names"</span>

</code></pre></div></div>

<p><strong>Unified Global View</strong></p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Semantic Abstraction Layer</span>
<span class="k">CREATE</span> <span class="k">OR</span> <span class="k">REPLACE</span> <span class="k">VIEW</span> <span class="nv">`smart_factory.vw_telemetry`</span> <span class="k">AS</span>
<span class="k">SELECT</span> 
  <span class="n">device_number</span><span class="p">,</span>
  <span class="n">bay_id</span><span class="p">,</span>
  <span class="n">factory</span><span class="p">,</span>
  <span class="n">created</span>
<span class="k">FROM</span> <span class="nv">`smart_factory.vw_us_telemetry`</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> 
  <span class="n">device_number</span><span class="p">,</span>
  <span class="n">bay_id</span><span class="p">,</span>
  <span class="n">factory</span><span class="p">,</span>
  <span class="n">created</span>
<span class="k">FROM</span> <span class="nv">`smart_factory.vw_mx_telemetry`</span>

</code></pre></div></div>

<h4 id="scaling-to-china-factory">SCALING TO CHINA FACTORY</h4>

<p><strong>Evolving the Model</strong></p>

<ul>
  <li>Adding the new China feed by generating the External Table definition via AI.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">CREATE</span> <span class="k">OR</span> <span class="k">REPLACE</span> <span class="k">EXTERNAL</span> <span class="k">TABLE</span> <span class="nv">`smart_factory.cn_telemetry`</span> <span class="p">(</span>
  <span class="n">device_number</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">bay_id</span> <span class="n">INT64</span><span class="p">,</span>
  <span class="n">factory</span> <span class="n">STRING</span><span class="p">,</span>
  <span class="n">created</span> <span class="n">STRING</span>
<span class="p">)</span>
<span class="k">OPTIONS</span> <span class="p">(</span>
  <span class="n">format</span> <span class="o">=</span> <span class="s1">'CSV'</span><span class="p">,</span>
  <span class="n">uris</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'gs://factory-dl/cn/dev-900/telemetry*.csv.gz'</span><span class="p">],</span>
  <span class="n">skip_leading_rows</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
  <span class="n">compression</span> <span class="o">=</span> <span class="s1">'GZIP'</span>

</code></pre></div></div>

<p><strong>Human-in-the-Loop DevOps</strong></p>
<ul>
  <li>Use AI to update the unified view with the new data feed.  Review and apply the changes by the DevOps team, as changes to a production view require approval.</li>
</ul>

<h4 id="manufacturing-spc--root-cause-analysis">Manufacturing SPC &amp; Root Cause Analysis</h4>

<ul>
  <li>This query calculates a rolling mean and standard deviation over the last 10 minutes of telemetry to detect anomalies, “Out of Control” conditions.</li>
</ul>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">WITH</span> <span class="n">TelemetryStats</span> <span class="k">AS</span> <span class="p">(</span>
  <span class="k">SELECT</span>
    <span class="n">machine_id</span><span class="p">,</span>
    <span class="nb">timestamp</span><span class="p">,</span>
    <span class="n">sensor_reading</span><span class="p">,</span>
    <span class="c1">-- Calculate rolling stats for the "Control Chart"</span>
    <span class="k">AVG</span><span class="p">(</span><span class="n">sensor_reading</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">machine_id</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">timestamp</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">20</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span> <span class="k">as</span> <span class="n">rolling_avg</span><span class="p">,</span>
    <span class="n">STDDEV</span><span class="p">(</span><span class="n">sensor_reading</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">machine_id</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">timestamp</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">20</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span> <span class="k">as</span> <span class="n">rolling_stddev</span>
  <span class="k">FROM</span> <span class="nv">`production_data.mx_telemetry_stream`</span>
  <span class="k">WHERE</span> <span class="nb">timestamp</span> <span class="o">&gt;</span> <span class="n">TIMESTAMP_SUB</span><span class="p">(</span><span class="k">CURRENT_TIMESTAMP</span><span class="p">(),</span> <span class="n">INTERVAL</span> <span class="mi">1</span> <span class="n">HOUR</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">Anomalies</span> <span class="k">AS</span> <span class="p">(</span>
  <span class="k">SELECT</span> <span class="o">*</span><span class="p">,</span>
    <span class="c1">-- Define "Out of Control" (Reading &gt; 3 Sigma from mean)</span>
    <span class="k">ABS</span><span class="p">(</span><span class="n">sensor_reading</span> <span class="o">-</span> <span class="n">rolling_avg</span><span class="p">)</span> <span class="o">&gt;</span> <span class="p">(</span><span class="mi">3</span> <span class="o">*</span> <span class="n">rolling_stddev</span><span class="p">)</span> <span class="k">AS</span> <span class="n">is_out_of_control</span>
  <span class="k">FROM</span> <span class="n">TelemetryStats</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">Anomalies</span> <span class="k">WHERE</span> <span class="n">is_out_of_control</span> <span class="o">=</span> <span class="k">TRUE</span><span class="p">;</span>

</code></pre></div></div>

<h4 id="control-chart-visualization">Control Chart Visualization</h4>

<p><img src="../../assets/2026/ozkary-the-cognitive-data-lakehouse-ai-driven-unification-and-semantic-modeling-in-a-zero-etl-environment-control-charts.png" alt="The Cognitive Data Lakehouse: AI-Driven Unification and Semantic Modeling in a Zero-ETL Environment - Control Charts" /></p>

<h4 id="advantage-comparison-matrix">ADVANTAGE COMPARISON MATRIX</h4>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Metric</th>
      <th style="text-align: left">Manual Data Engineering</th>
      <th style="text-align: left">AI-Augmented Zero-ETL</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">Unification Speed</td>
      <td style="text-align: left">Days/Weeks per Source</td>
      <td style="text-align: left">Minutes via Generative AI</td>
    </tr>
    <tr>
      <td style="text-align: left">Schema Drift</td>
      <td style="text-align: left">Manual Script Rewrites</td>
      <td style="text-align: left">Adaptive AI View Discovery</td>
    </tr>
    <tr>
      <td style="text-align: left">Infrastructure Cost</td>
      <td style="text-align: left">High (Data Redundancy)</td>
      <td style="text-align: left">Minimal (In-place on GCS)</td>
    </tr>
  </tbody>
</table>

<p><strong>Strategic Intelligence ROI:</strong></p>

<blockquote>
  <p>ROI(ai) = Insights Velocity / (Movement Cost + Labor Hours)</p>
</blockquote>

<h4 id="final-thoughts-strategic-summary">FINAL THOUGHTS: STRATEGIC SUMMARY</h4>

<p><strong>Legacy Challenges</strong></p>

<ul>
  <li>Brittle ETL: Manual pipelines break with every schema change.</li>
  <li>Cost Inefficiency: Redundant storage for processed data.</li>
  <li>Semantic Silos: Hard-coded aliases for disparate naming conventions.</li>
  <li>Slow Time-to-Insight: Weeks spent on manual schema alignment.</li>
</ul>

<p><strong>AI-Assisted Solutions</strong></p>

<ul>
  <li>Zero-ETL Arch: Cost-effective storage with Data Lake virtual access.</li>
  <li>Automated Inference: Vertex AI handles the “heavy lifting” of mapping.</li>
  <li>Adaptive DevOps: Scalable model evolution (USA → MEX → China).</li>
  <li>Unified Intelligence: One virtual source of truth for global analytics.</li>
</ul>

<blockquote>
  <p>Moving from Data Reporting to Active Semantic Intelligence.</p>
</blockquote>

<h3 id="weve-covered-a-lot-today-but-this-is-just-the-beginning">We’ve covered a lot today, but this is just the beginning!</h3>

<p>If you’re interested in learning more about building cloud data pipelines, I encourage you to check out my book, ‘Data Engineering Process Fundamentals,’ part of the Data Engineering Process Fundamentals series. It provides in-depth explanations, code samples, and practical exercises to help in your learning.</p>

<p><a href="https://a.co/d/gyoRfbs"><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-book-cover.jpg" alt="Data Engineering Process Fundamentals - Book by Oscar Garcia" /></a>  <a href="https://a.co/d/gyoRfbs"><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-book-back-cover.jpg" alt="Data Engineering Process Fundamentals - Book by Oscar Garcia" /></a></p>

<hr />

<h3 id="-upcoming-sessions">📅 Upcoming Sessions</h3>
<p>Our upcoming series expands beyond data engineering to bridge the gap between <strong>AI</strong>, <strong>Machine Learning</strong>, and <strong>modern cloud architecture</strong>. Using our <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Data</a>, <a href="https://github.com/ozkary/ai-engineering">AI</a>, and <a href="https://github.com/ozkary/machine-learning-engineering">ML</a> GitHub blueprints, we provide the code-first patterns needed to build everything from Zero-ETL pipelines to scalable LLM-powered systems. Join us to explore how these integrated disciplines work together to turn raw data into production-ready intelligence.</p>

<hr />
<h3 id="-lets-connect--build-together">🌟 Let’s Connect &amp; Build Together</h3>
<p>If you enjoyed these resources, let’s stay in touch! I share deep-dives into AI/ML patterns and host community events here:</p>

<ul>
  <li><strong><a href="https://gdg.community.dev/gdg-broward-county-fl/">GDG Broward</a></strong>: Join our local dev community for meetups and workshops.</li>
  <li><strong><a href="https://www.linkedin.com/in/oscardgarcia">LinkedIn</a></strong>: Let’s connect professionally! I share insights on engineering.</li>
  <li><strong><a href="https://github.com/ozkary">GitHub</a></strong>: Follow my open-source journey and star the repos you find useful.</li>
  <li><strong><a href="https://www.youtube.com/@ozkary">YouTube</a></strong>: Watch step-by-step tutorials on the projects listed above.</li>
  <li><strong><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></strong> / <strong><a href="https://x.com/ozkary">X / Twitter</a></strong>: Daily tech updates and quick engineering tips.</li>
</ul>

<p>👉 <em>Originally published at <a href="https://www.ozkary.com">ozkary.com</a></em></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="python" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="docker" /><category term="data lake" /><category term="data warehouse" /><category term="Kafka" /><category term="Spark" /><summary type="html"><![CDATA[In the modern data landscape, the wall between where data lives and how we get insights is crumbling. This session focuses on the Cognitive Data Lakehouse. A paradigm shift that allows developers to treat a fragmented data lake as a unified, high-performance warehouse.]]></summary></entry><entry><title type="html">From Raw Data to Governance: Refining Data with the Medallion Architecture Dec 2025</title><link href="https://www.ozkary.dev/from-raw-data-to-governance-refining-data-medallion-architecture-dec-2025/" rel="alternate" type="text/html" title="From Raw Data to Governance: Refining Data with the Medallion Architecture Dec 2025" /><published>2025-12-10T00:00:00-05:00</published><updated>2025-12-10T08:00:00-05:00</updated><id>https://www.ozkary.dev/from-raw-data-to-governance-refining-data-medallion-architecture-dec-2025</id><content type="html" xml:base="https://www.ozkary.dev/from-raw-data-to-governance-refining-data-medallion-architecture-dec-2025/"><![CDATA[<h1 id="overview">Overview</h1>

<p>Build upon your existing data engineering expertise and discover how Medallion Architecture can transform your data strategy. This session provides a hands-on approach to implementing Medallion principles, empowering you to create a robust, scalable, and governed data platform.</p>

<p>We’ll explore how to align data engineering processes with Medallion Architecture, identifying opportunities for optimization and improvement. By understanding the core principles and practical implementation steps, you’ll learn how to optimize data pipelines, enhance data quality, and unlock valuable insights through a structured, layered approach to drive business success.</p>

<p><img src="../../assets/2025/ozkary-from-raw-data-to-governance-medallion-architecture.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture" title="From Raw Data to Governance: Refining Data with the Medallion Architecture" /></p>

<ul>
  <li>Follow this GitHub repo during the presentation: (Give it a star)</li>
</ul>

<blockquote>
  <p>👉 https://github.com/ozkary/data-engineering-mta-turnstile</p>
</blockquote>

<ul>
  <li>Read more information on my blog at:</li>
</ul>

<blockquote>
  <p>👉 https://www.ozkary.com/2023/03/data-engineering-process-fundamentals.html</p>
</blockquote>

<h2 id="youtube-video">YouTube Video</h2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/E87qPNObF7g?si=f6ii8FOVH8sPI0Dv" title="From Raw Data to Governance: Refining Data with the Medallion Architecture" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<h3 id="video-agenda">Video Agenda</h3>

<ul>
  <li>Introduction to Medallion Architecture
    <ul>
      <li>Defining Medallion Architecture</li>
      <li>Core Principles</li>
      <li>Benefits of Medallion Architecture</li>
    </ul>
  </li>
  <li>The Raw Zone
    <ul>
      <li>Understanding the purpose of the Raw Zone</li>
      <li>Best practices for data ingestion and storage</li>
    </ul>
  </li>
  <li>The Bronze Zone
    <ul>
      <li>Data transformation and cleansing</li>
      <li>Creating a foundation for analysis</li>
    </ul>
  </li>
  <li>The Silver Zone
    <ul>
      <li>Data optimization and summarization</li>
      <li>Preparing data for consumption</li>
    </ul>
  </li>
  <li>The Gold Zone
    <ul>
      <li>Curated data for insights and action</li>
      <li>Enabling self-service analytics</li>
    </ul>
  </li>
  <li>Empowering Insights
    <ul>
      <li>Data-driven decision-making</li>
      <li>Accelerated Insights</li>
    </ul>
  </li>
  <li>Data Governance
    <ul>
      <li>Importance of data governance in Medallion Architecture</li>
      <li>Implementing data ownership and stewardship</li>
      <li>Ensuring data quality and security</li>
    </ul>
  </li>
</ul>

<p><strong>Why Attend:</strong></p>

<p>Gain a deep understanding of Medallion Architecture and its application in modern data engineering. Learn how to optimize data pipelines, improve data quality, and unlock valuable insights. Discover practical steps to implement Medallion principles in your organization and drive data-driven decision-making.</p>

<h2 id="presentation">Presentation</h2>

<h3 id="introducing-medallion-architecture">Introducing Medallion Architecture</h3>

<p>Medallion architecture is a data management approach that organizes data into distinct layers based on its quality and processing level.</p>

<ul>
  <li><strong>Improved Data Quality:</strong> By separating data into different zones, you can focus on data quality at each stage.</li>
  <li><strong>Enhanced Data Governance:</strong> Clear data ownership and lineage improve data trustworthiness.</li>
  <li><strong>Accelerated Insights:</strong> Optimized data in the Silver and Gold zones enables faster query performance.</li>
  <li><strong>Scalability:</strong> The layered approach can accommodate growing data volumes and complexity.</li>
  <li><strong>Cost Efficiency:</strong> Optimized data storage and processing can reduce costs.</li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-high-level-design.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Design Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Design Diagram" /></p>

<h3 id="the-raw-zone-foundation-of-your-data-lake">The Raw Zone: Foundation of Your Data Lake</h3>

<p>The Raw Zone is the initial landing place for raw, unprocessed data. It serves as a historical archive of your data sources.</p>

<ul>
  <li><strong>Key Characteristics:</strong>
    <ul>
      <li>Unstructured or semi-structured format (e.g., CSV, JSON, Parquet)</li>
      <li>Data is ingested as-is, without any cleaning or transformation</li>
      <li>High volume and velocity</li>
      <li>Data retention policies are crucial</li>
    </ul>
  </li>
  <li><strong>Benefits:</strong>
    <ul>
      <li>Preserves original data for potential future analysis</li>
      <li>Enables data reprocessing</li>
      <li>Supports data lineage and auditability</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-raw-zone.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Raw Zone Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Raw Zone Diagram" /></p>

<h3 id="the-bronze-zone-transforming-raw-data">The Bronze Zone: Transforming Raw Data</h3>

<p>The Bronze Zone is where raw data undergoes initial cleaning, structuring, and transformation. It serves as a staging area for data before moving to the Silver Zone.</p>

<ul>
  <li><strong>Key Characteristics:</strong>
    <ul>
      <li>Data is cleansed and standardized</li>
      <li>Basic transformations are applied (e.g., data type conversions, null handling)</li>
      <li>Data is structured into tables or views</li>
      <li>Data quality checks are implemented</li>
      <li>Data retention policies may be shorter than the Raw Zone</li>
    </ul>
  </li>
  <li><strong>Benefits:</strong>
    <ul>
      <li>Improves data quality and consistency</li>
      <li>Provides a foundation for further analysis</li>
      <li>Enables data exploration and discovery</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-bronze-zone.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Bronze Zone Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Bronze Zone Diagram" /></p>

<h3 id="the-silver-zone-a-foundation-for-insights">The Silver Zone: A Foundation for Insights</h3>

<p>The Silver Zone houses data that has been further refined, aggregated, and optimized for specific use cases. It serves as a bridge between the raw data and the final curated datasets.</p>

<ul>
  <li><strong>Key Characteristics:</strong>
    <ul>
      <li>Data is cleansed, standardized, and enriched</li>
      <li>Data is structured for analytical purposes (e.g., normalized, de-normalized)</li>
      <li>Data is optimized for query performance (e.g., partitioning, indexing)</li>
      <li>Data is aggregated and summarized for specific use cases</li>
    </ul>
  </li>
  <li><strong>Benefits:</strong>
    <ul>
      <li>Improved query performance</li>
      <li>Supports self-service analytics</li>
      <li>Enables advanced analytics and machine learning</li>
      <li>Reduces query costs</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-silver-zone.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Silver Zone Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Silver Zone Diagram" /></p>

<h3 id="the-gold-zone-your-datas-final-destination">The Gold Zone: Your Data’s Final Destination</h3>

<ul>
  <li><strong>Definition:</strong> The Gold Zone contains the final, curated datasets ready for consumption by business users and applications. It is the pinnacle of data transformation and optimization.</li>
  <li><strong>Key Characteristics:</strong>
    <ul>
      <li>Data is highly refined, aggregated, and optimized for specific use cases</li>
      <li>Data is often materialized for performance</li>
      <li>Data is subject to rigorous quality checks and validation</li>
      <li>Data is secured and governed</li>
    </ul>
  </li>
  <li><strong>Benefits:</strong>
    <ul>
      <li>Enables rapid insights and decision-making</li>
      <li>Supports self-service analytics and reporting</li>
      <li>Provides a foundation for advanced analytics and machine learning</li>
      <li>Reduces query latency</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-gold-zone.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Gold Zone Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Gold Zone Diagram" /></p>

<h3 id="the-gold-zone-empowering-insights-and-actions">The Gold Zone: Empowering Insights and Actions</h3>

<p>The Gold Zone is the final destination for data, providing a foundation for insights, analysis, and action. It houses curated, optimized datasets ready for consumption.</p>

<ul>
  <li><strong>Key Characteristics:</strong>
    <ul>
      <li>Data is accessible and easily consumable</li>
      <li>Supports various analytical tools and platforms (BI, ML, data science)</li>
      <li>Enables self-service analytics</li>
      <li>Drives business decisions and actions</li>
    </ul>
  </li>
  <li><strong>Examples of Consumption Tools:</strong>
    <ul>
      <li>Business Intelligence (BI) tools (Looker, Tableau, Power BI)</li>
      <li>Data science platforms (Python, R, SQL)</li>
      <li>Machine learning platforms (TensorFlow, PyTorch)</li>
      <li>Advanced analytics tools</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-analysis.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Analysis Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Analysis Diagram" /></p>

<h3 id="data-governance-the-cornerstone-of-data-management">Data Governance: The Cornerstone of Data Management</h3>

<p><strong>Data governance</strong> is the framework that defines how data is managed within an organization, while <strong>data management</strong> is the operational execution of those policies. Data Governance is essential for ensuring data quality, consistency, and security.</p>

<p><strong>Key components of data governance include:</strong></p>

<ul>
  <li><strong>Data Lineage:</strong> Tracking data’s journey from source to consumption.</li>
  <li><strong>Data Ownership:</strong> Defining who is responsible for data accuracy and usage.</li>
  <li><strong>Data Stewardship:</strong> Managing data on a day-to-day basis, ensuring quality and compliance.</li>
  <li><strong>Data Security:</strong> Protecting data from unauthorized access, use, disclosure, disruption, modification, or destruction.</li>
  <li><strong>Compliance:</strong> Adhering to industry regulations (e.g., GDPR, CCPA, HIPAA) and internal policies.</li>
</ul>

<p>By establishing clear roles, responsibilities, and data lineage, organizations can build trust in their data, improve decision-making, and mitigate risks.</p>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-governance.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Data Governance " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Data Governance" /></p>

<h3 id="data-transformation-and-incremental-strategy">Data Transformation and Incremental Strategy</h3>

<p>The data transformation phase is a critical stage in a data warehouse project. This phase involves several key steps, including data extraction, cleaning, loading, data type casting, use of naming conventions, and implementing incremental loads to continuously insert the new information since the last update via batch processes.</p>

<p><img src="../../assets/2024/ozkary-data-engineering-process-lineage.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Data transformation lineage" title="From Raw Data to Governance: Refining Data with the Medallion Architecture -   Data transformation lineage" /></p>

<p>Data Lineage: Tracks the flow of data from its origin to its destination, including all the intermediate processes and transformations that it undergoes.</p>

<h3 id="data-governance--metadata">Data Governance : Metadata</h3>

<p>Assigns the owner, steward and responsibilities of the data.</p>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-metadata.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Governance Metadata " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Governance metadata" /></p>

<h3 id="summary-leverage-medallion-architecture-for-success">Summary: Leverage Medallion Architecture for Success</h3>

<ul>
  <li><strong>Key Benefits:</strong>
    <ul>
      <li>Improved data quality</li>
      <li>Enhanced governance</li>
      <li>Accelerated insights</li>
      <li>Scalability</li>
      <li>Cost Efficiency.</li>
    </ul>
  </li>
</ul>

<p><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-medallion-architecture-diagram.png" alt="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Diagram " title="From Raw Data to Governance: Refining Data with the Medallion Architecture -  Medallion Architecture Diagram" /></p>

<h3 id="weve-covered-a-lot-today-but-this-is-just-the-beginning">We’ve covered a lot today, but this is just the beginning!</h3>

<p>If you’re interested in learning more about building cloud data pipelines, I encourage you to check out my book, ‘Data Engineering Process Fundamentals,’ part of the Data Engineering Process Fundamentals series. It provides in-depth explanations, code samples, and practical exercises to help in your learning.</p>

<p><a href="https://a.co/d/gyoRfbs"><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-book-cover.jpg" alt="Data Engineering Process Fundamentals - Book by Oscar Garcia" /></a>  <a href="https://a.co/d/gyoRfbs"><img src="../../assets/2024/ozkary-data-engineering-process-fundamentals-book-back-cover.jpg" alt="Data Engineering Process Fundamentals - Book by Oscar Garcia" /></a></p>

<p><strong>Upcoming Talks:</strong></p>

<p>Join us for subsequent sessions in our Data Engineering Process Fundamentals series, where we will delve deeper into specific facets of data engineering, exploring topics such as data modeling, pipelines, and best practices in data governance.</p>

<p>This presentation is based on the book, <a href="https://www.amazon.com/Data-Engineering-Process-Fundamentals-Hands/dp/B0CV7TPSNB">Data Engineering Process Fundamentals</a>, which provides a more comprehensive guide to the topics we’ll cover. You can find all the sample code and datasets used in this presentation on our popular GitHub repository <a href="https://github.com/ozkary/data-engineering-mta-turnstile">Introduction to Data Engineering Process Fundamentals</a>.</p>

<p>Thanks for reading! 😊 If you enjoyed this post and would like to stay updated with our latest content, don’t forget to follow us. Join our community and be the first to know about new articles, exclusive insights, and more!</p>

<ul>
  <li><a href="https://gdg.community.dev/gdg-broward-county-fl/">Google Developer Group</a></li>
  <li><a href="https://github.com/ozkary">GitHub</a></li>
  <li><a href="https://x.com/ozkary">Twitter</a></li>
  <li><a href="https://www.youtube.com/@ozkary">YouTube</a></li>
  <li><a href="https://bsky.app/profile/ozkary.bsky.social">BlueSky</a></li>
</ul>

<p>👍 Originally published by <a href="https://www.ozkary.com">ozkary.com</a></p>]]></content><author><name>Oscar D. Garcia - Ozkary</name></author><category term="python" /><category term="cloud" /><category term="github" /><category term="vscode" /><category term="docker" /><category term="data lake" /><category term="Kafka" /><category term="Spark" /><summary type="html"><![CDATA[Gain understanding of Medallion Architecture and its application in modern data engineering. Learn how to optimize data pipelines, improve data quality, and unlock valuable insights. Discover practical steps to implement Medallion principles in your organization and drive data-driven decision-making.]]></summary></entry></feed>