<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lilian Bernot</title>
    <description>The latest articles on DEV Community by Lilian Bernot (@lilian_bernot).</description>
    <link>https://dev.to/lilian_bernot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3932465%2F2d564411-8e15-4928-906e-72eec890982b.png</url>
      <title>DEV Community: Lilian Bernot</title>
      <link>https://dev.to/lilian_bernot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lilian_bernot"/>
    <language>en</language>
    <item>
      <title>Build Your Harness While You Wait</title>
      <dc:creator>Lilian Bernot</dc:creator>
      <pubDate>Fri, 15 May 2026 06:23:39 +0000</pubDate>
      <link>https://dev.to/lilian_bernot/build-your-harness-while-you-wait-457n</link>
      <guid>https://dev.to/lilian_bernot/build-your-harness-while-you-wait-457n</guid>
      <description>&lt;p&gt;A few weeks ago, I sat down with a colleague for our weekly 1-1. He came in visibly exhausted — not from a late night debugging, not from an incident. He'd been on vacation and had come back to four active Claude sessions waiting for him, each one pulling in a different direction.&lt;/p&gt;

&lt;p&gt;"I always told people not to do this".&lt;/p&gt;

&lt;p&gt;I'd heard this before. But sitting in that room, I realized we were looking at a new kind of developer fatigue — one that didn't exist two years ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Speed Limit
&lt;/h2&gt;

&lt;p&gt;In 2023, developers were tired from staying up until 3am reading through StackOverflow for a two-line fix, or building entire features from scratch to satisfy a PM's request. That kind of exhaustion had a shape to it: deep, slow, earned.&lt;/p&gt;

&lt;p&gt;In 2026, the exhaustion looks different. It's not from doing too little — it's from doing too much, too fast. A new feature now takes three good lines of prompting. The bottleneck isn't execution anymore; it's context switching.&lt;/p&gt;

&lt;p&gt;I walk into our office and hear more people complaining about feeling scattered than about being stuck. The challenge has shifted from "how do I build this?" to "how do I stay coherent while building five things at once?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The Babysitting Trap
&lt;/h2&gt;

&lt;p&gt;There's a mode I see a lot of colleagues still in, and I was there too not long ago: babysitting Claude. Accepting every file edit, rename, commit, and test run. Sitting in front of the screen, approving actions one by one.&lt;/p&gt;

&lt;p&gt;This is a waste of the most valuable thing you have: your attention.&lt;/p&gt;

&lt;p&gt;For a few weeks, in the repo I work in most, Claude was running complex Bazel queries that took forever. I kept multiple sessions open just to absorb the wait. At some point I actually looked at what was happening: it was running commands at the repository root level, which is catastrophically heavy in a monorepo. I spent an hour explaining Claude how to scope its commands — package level first, then service or domain, never the full repo.&lt;/p&gt;

&lt;p&gt;That one hour saved me dozens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Your Harness While You Wait
&lt;/h2&gt;

&lt;p&gt;This is the reframe that changed how I work: &lt;strong&gt;use latency as leverage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When an agent is doing something long — running tests, building a target, generating protobuf files — that's not dead time. That's configuration time. It's the 20% of my AI time I now deliberately protect. The remaining 5% I keep for research: what's new in the AI world, what are my colleagues trying, what's worth stealing for my own workflow?&lt;/p&gt;

&lt;p&gt;Think of it like early career progression. As a newcomer, you have low privileges. You move carefully, ask for approval often. As you grow, you earn operational rights, architectural trust, autonomy. AI sessions are the same: untrained sessions are expensive to babysit. Trained sessions — with the right permissions, the right context, the right guardrails — run themselves.&lt;/p&gt;

&lt;p&gt;We don't want to micro-manage. We want to configure, then delegate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Notifications Tax
&lt;/h2&gt;

&lt;p&gt;One underrated part of this: notifications.&lt;/p&gt;

&lt;p&gt;I turned off WhatsApp emoji reaction notifications months ago. Every Slack channel I'm in is muted except for PMs with my intern, my manager, and the handful of coworkers I might be on-call alongside.&lt;/p&gt;

&lt;p&gt;This sounds antisocial. It's a trade: I respond more thoughtfully and less reflexively. The pings that reach me matter.&lt;/p&gt;

&lt;p&gt;Boredom, it turns out, is useful. The moments where I step away from the screen — tidy something up, stare out the window — are where I do my best thinking. I anticipate what the agent will do next. I kill the process, refine the prompt, restart with a better question. The idle second is where the edit happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  On Git Worktrees (and Why I Dropped Them for now)
&lt;/h2&gt;

&lt;p&gt;I got excited about git worktrees for a while. The idea is elegant: while one agent works on branch A, spin up another one on branch B. No blocking, pure parallelism.&lt;/p&gt;

&lt;p&gt;In practice: more context switching, not less.&lt;/p&gt;

&lt;p&gt;Worktrees in a large monorepo are slow to spin up. You have to track which clone corresponds to which task, manage rebases across branches, stack PRs in ways that are genuinely hard to reason about. Some colleagues just maintain two clones of the repo — which is roughly the same problem. I tried letting the AI manage the worktrees for me. That was worse.&lt;/p&gt;

&lt;p&gt;There are legitimate uses — deploying something while keeping the working tree open, running long &lt;code&gt;bazel&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt; commands for auto-generation — but for most day-to-day work, the overhead isn't worth it. The overhead is cognitive, not computational.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Sprint
&lt;/h2&gt;

&lt;p&gt;Three weeks of sick leave. A half-finished feature I cared about. A week of on-call the moment I returned.&lt;/p&gt;

&lt;p&gt;When I finally got two free days to work on it, I was four weeks out from the last time I'd touched it. I was also worried someone had moved on without me.&lt;/p&gt;

&lt;p&gt;They hadn't. So I started.&lt;/p&gt;

&lt;p&gt;I had notes. I had saved links, database queries, context scattered across docs and Slack threads. AI agents helped me reassemble all of it — regroup the data, spec the implementation step by step, proceed, test. By end of day one, I had shipped four PRs. One update on the database definition, one fixing multiple bugs in the existing code, one implementing part of the feature and the last one to build some tooling. That one hour of config work saved hours in the days that followed.&lt;/p&gt;

&lt;p&gt;Day two: three more PRs. Done.&lt;/p&gt;

&lt;p&gt;A year ago, that feature would have taken me two weeks. Minimum. When I sent it for review, I already knew it was clean. Approvals came fast. I moved on.&lt;/p&gt;

&lt;p&gt;The feeling of finishing ahead of your own plan, when you had every reason to expect to be late — that's the feeling I'm chasing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flow, Not Orbit
&lt;/h2&gt;

&lt;p&gt;I read a Forbes piece recently that argued "Orbit is the new Flow." The idea: agentic AI rewards context-switchers, people who keep many things in motion at once rather than diving deep into any single one.&lt;/p&gt;

&lt;p&gt;I'm not convinced.&lt;/p&gt;

&lt;p&gt;Flow — the uncomfortable, focused state where you stop noticing the room around you — is still where I do my best thinking. When I come out of it, complex things are in place, cleanly. I just have to document what I did, transfer context somewhere durable.&lt;/p&gt;

&lt;p&gt;Orbit might scale better. But I'm not sure yet that it scales better &lt;em&gt;for me&lt;/em&gt;. The risk is creating content and context faster than you can actually ingest or ship it.&lt;/p&gt;

&lt;p&gt;The goal isn't to have many things moving at once. It's to have the right things moving — and to actually finish them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The new developer fatigue is real, but it's manageable. It's not about doing less — it's about doing it with intention. Protect your focus. Use the wait to improve the harness. Mute the noise that doesn't matter. Ship things completely before starting the next one.&lt;/p&gt;

&lt;p&gt;We're still engineers. We're just working at a different speed, with different constraints. Learning to configure the machine — including the AI — is the new leverage.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>mentalhealth</category>
      <category>productivity</category>
    </item>
    <item>
      <title>From Developer to Engineer: My Journey with AI Coding Tools</title>
      <dc:creator>Lilian Bernot</dc:creator>
      <pubDate>Fri, 15 May 2026 06:09:00 +0000</pubDate>
      <link>https://dev.to/lilian_bernot/from-developer-to-engineer-my-journey-with-ai-coding-tools-3al7</link>
      <guid>https://dev.to/lilian_bernot/from-developer-to-engineer-my-journey-with-ai-coding-tools-3al7</guid>
      <description>&lt;p&gt;A recent blog post that resonated with me: &lt;strong&gt;The Year Coding Sped Up 100x&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The point is not that software engineering is dead.&lt;/p&gt;

&lt;p&gt;Quite the opposite: the engineering in software engineering is thriving. Modeling, formal validation, higher-level languages—these were at the fringes of "traditional" software engineering for a long time because most of the brain power was spent writing code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a junior who started coding in 2023, I can deeply relate to that statement. This is the story of how AI tools transformed me from a struggling developer into a software engineer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Beginning: Learning the Hard Way (2022-2023)
&lt;/h2&gt;

&lt;p&gt;When I started "learning code" at school in 2022, it was truly learning the hard way. Nothing comparable to formal textbooks—I had to grind through exercises, maintain a personal dictionary of vocabulary I struggled to remember, and piece together understanding bit by bit. At that time, GPT-3 was just starting out, mainly a playground for people asking it to tell jokes.&lt;/p&gt;

&lt;p&gt;For a year, I took on the developer role in school projects because I wanted to learn more. I spent hours checking other people's code to copy-paste parts of it, reverse-engineering solutions without fully understanding them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Chile Semester: Coding in Three Languages
&lt;/h3&gt;

&lt;p&gt;Then I spent the first semester of 2023 in Chile, taking classes like "web development fundamentals," "databases," and "algorithms." The real names were "Inicio Al Desarrollo Web," "Base de datos," and "Algoritmos"—all classes taught in Spanish, code in English, and my brain thinking in French. I couldn't describe this mess better than: "In my code, some comment lines were written in 3 languages."&lt;/p&gt;

&lt;p&gt;During these classes, we worked with React and Koa, SQL, and C++, respectively. They were all supposed to be entry-level, but the students around me had already completed 2-3 semesters of similar courses and were far more advanced than me. I kept asking to see others' code, spent countless hours reading the easier classes' slides first to make my way through understanding the actual course material I was supposed to be following.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Internship: Contradictions and Crisis (October 2023)
&lt;/h2&gt;

&lt;p&gt;In October 2023, I started my first internship. GPT-3 was being fine-tuned to become what we now know as modern AI. At that time, I experimented a bit out of curiosity—asking it to explain pieces of code, which I would confirm with the classic StackOverflow questions and other sources. I also used it for repetitive tasks, like extracting just the keys from JSON into text format. Answers started to make sense. Others were using GitHub Copilot, which I didn't like because it was writing the code for me without giving me time to think about what I was doing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Identity Crisis
&lt;/h3&gt;

&lt;p&gt;When I started my internship, I was full of contradictions: both happy to learn the new languages I was coding with (which I love to learn) and disappointed seeing people with such advanced skills that would take me years, maybe decades, to acquire. There I started questioning my career as a developer (vocabulary matters here).&lt;/p&gt;

&lt;p&gt;In the meantime, the use of AI was rising and we kept hearing people say we would lose our jobs. What was I doing in a world where I was just a beginner, facing senior people with much more knowledge than me, and facing new AI tools that were becoming as efficient as an intern?&lt;/p&gt;

&lt;h2&gt;
  
  
  Back to Fundamentals (Fall 2024)
&lt;/h2&gt;

&lt;p&gt;A year later, I returned to school to study "Fundamentals of Computer Science." I had briefly touched some C++ code before, but I was really lacking foundational knowledge. We learned Rust, which, coming from Python, really kicked my ass. We did Assembly and Haskell, and kept listening to our teachers who were so enthusiastic about low-level languages and optimizations.&lt;/p&gt;

&lt;p&gt;I can painfully tell you that GPT had not been trained on Assembly books yet...&lt;/p&gt;

&lt;p&gt;This was a great time—stepping back from speed-coding and "AI taking over the world," and trying to redefine what "software engineer" meant for us. It grounded me in the fundamentals and gave me perspective on what engineering actually entails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Turning Point: Datadog (Spring 2025)
&lt;/h2&gt;

&lt;p&gt;After that semester, I started my internship at Datadog in New York. I was in a great team with excellent colleagues who taught me a lot. I started learning Go, using AI the best I could to accelerate my learning—helping me ship code while also teaching me core principles of the language. I had an excellent mentor who did really strict PR reviews that helped tremendously with my learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Innovation Week: AI Everywhere
&lt;/h3&gt;

&lt;p&gt;One month in, we held an innovation week, trying to put AI everywhere in our product. At that time, all companies were releasing AI assistants—we were building Bits AI, others had their own solutions. The race had started.&lt;/p&gt;

&lt;p&gt;In the following month, I started working on an NLQ (Natural Language Query) feature for which I had to read a lot of blog posts, study how others were approaching the problem, and experiment extensively. I learned a lot about how to work with AI and get these capricious little minds to respect what I was asking them to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hackathon Week: Meeting Cursor
&lt;/h3&gt;

&lt;p&gt;After this period came a company-wide AI hackathon week, during which we attended numerous conferences and gathered for vibe-coding sessions where we built apps in an hour. At that time, I was pretty skeptical about AI, given my recent battles with it. I finally accepted to install Cursor (I didn't even have Copilot in VSCode as I didn't like the noise it brought).&lt;/p&gt;

&lt;p&gt;And Cursor suddenly became my best colleague.&lt;/p&gt;

&lt;p&gt;I was suddenly able to debug my code 10x faster, delegate boring tasks to AI, and read documentation or answer messages in the meantime. This was the moment everything changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Current Setup
&lt;/h2&gt;

&lt;p&gt;Let's jump to what my setup and workflow are now: I run multiple Claude Code instances simultaneously to handle most of my AI tasks, combined with Cursor, which helps me read my code as an enhanced IDE. I use it to ask for clarifications on specific bits of code, no longer than a few lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redefining the Role: Developer vs. Software Engineer
&lt;/h2&gt;

&lt;p&gt;In a world where AI is, for some, a confidant to which they tell everything and ask to make important decisions in their lives, or use to justify bar discussions with a quick prompt, AI can also genuinely enhance some of our abilities.&lt;/p&gt;

&lt;p&gt;I've had many interesting exchanges with quite a few engineers in the company now, which helped me gain perspective (I also had a month off between my internship and my full-time job—take holidays, devs!).&lt;/p&gt;

&lt;h3&gt;
  
  
  What "Software Engineer" Actually Means
&lt;/h3&gt;

&lt;p&gt;And now I understand more clearly what my job is: I am a &lt;strong&gt;Software Engineer&lt;/strong&gt;. My job requires developer skills—I need to be able to read code, understand how it works, know best practices in several different languages, and know how to deploy a service.&lt;/p&gt;

&lt;p&gt;But as seniors were before me, I am more of an &lt;strong&gt;orchestrator than a code writer&lt;/strong&gt;. My job is not to write lines of code. I can now respond to support messages, write fixes, deploy them, make sure they run in production, and manage the entire lifecycle of a feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Transformation
&lt;/h3&gt;

&lt;p&gt;As a junior, every part was scary, and the "write the fix" part was perhaps the worst: I could see myself fighting with language syntax for countless hours, reading again and again my personal notes on the language, realizing which patterns didn't actually apply in every situation, going back and forth with StackOverflow...&lt;/p&gt;

&lt;p&gt;Now, every time I have to write code, I can stop worrying about that part. I focus more on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Defining my needs clearly&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecting solutions&lt;/strong&gt; that AI will implement for me&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writing tests&lt;/strong&gt; that aren't influenced by the code I wrote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborating&lt;/strong&gt; with other engineers and teams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organizing projects&lt;/strong&gt; end-to-end&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensuring quality&lt;/strong&gt; and maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Altogether, this makes me more and more an &lt;strong&gt;Engineer&lt;/strong&gt;, not just someone who writes code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The transformation from developer to software engineer isn't about abandoning coding—it's about elevating your role. AI tools like Cursor and Claude Code haven't replaced me; they've liberated me to focus on what truly matters: engineering decisions, system design, collaboration, and delivering value.&lt;/p&gt;

&lt;p&gt;The fear I felt in 2023—that AI would make me obsolete before I even started—was misplaced. Instead, AI accelerated my journey from a struggling beginner to a being-confident engineer who can architect, ship, and maintain production systems.&lt;/p&gt;

&lt;p&gt;The engineering in software engineering is indeed thriving. And I'm thrilled to be part of it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>career</category>
    </item>
    <item>
      <title>Choosing a Natural Language Query Architecture for Dynamic Data Systems</title>
      <dc:creator>Lilian Bernot</dc:creator>
      <pubDate>Fri, 15 May 2026 06:06:17 +0000</pubDate>
      <link>https://dev.to/lilian_bernot/choosing-a-natural-language-query-architecture-for-dynamic-data-systems-22e7</link>
      <guid>https://dev.to/lilian_bernot/choosing-a-natural-language-query-architecture-for-dynamic-data-systems-22e7</guid>
      <description>&lt;p&gt;When building a Natural Language Query (NLQ) interface for a complex, evolving data catalog, the choice of architecture can make or break your solution. This post explores the architectural decisions faced when implementing NLQ for a system with dynamic schemas, frequent changes, and complex query requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge: Dynamic Data Systems
&lt;/h2&gt;

&lt;p&gt;Our data architecture presented several unique challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Atomicity&lt;/strong&gt;: Data organized by resource types, with many type-specific fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Evolution&lt;/strong&gt;: Rapid schema changes (50 → 140 tables in one year)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex Queries&lt;/strong&gt;: Support for tags, date comparisons, and advanced operators (not just equality but &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Specificity&lt;/strong&gt;: Domain-specific query syntax requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key question: How do we build an NLQ system that adapts to these constant changes without requiring retraining or manual updates?&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution 1: Fine-Tuned Static Models
&lt;/h2&gt;

&lt;p&gt;The traditional approach involves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Base Model&lt;/strong&gt;: A foundation model trained on general query syntax&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine-Tuning Layer&lt;/strong&gt;: Product-specific training on historical data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Static model serving predictions&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Well-understood approach with proven results&lt;/li&gt;
&lt;li&gt;Can leverage existing infrastructure&lt;/li&gt;
&lt;li&gt;Potentially lower per-query costs at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not Dynamic&lt;/strong&gt;: Every schema change requires retraining&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Dependency&lt;/strong&gt;: Requires ML expertise and infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training Cost&lt;/strong&gt;: Significant upfront investment in data and compute&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lag Time&lt;/strong&gt;: Delay between schema changes and model updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For our use case with frequent schema evolution, this approach would create constant maintenance burden and potential staleness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution 2: Model Context Protocol (MCP)
&lt;/h2&gt;

&lt;p&gt;An alternative approach uses the Model Context Protocol to provide dynamic context to a general-purpose LLM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Query → LLM with MCP Tools → Query Syntax → Execution
                ↓
         [Dynamic Schema]
         [Available Fields]
         [Query Examples]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time schema information&lt;/li&gt;
&lt;li&gt;Available fields and types&lt;/li&gt;
&lt;li&gt;Valid query patterns&lt;/li&gt;
&lt;li&gt;Domain-specific constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fully Dynamic&lt;/strong&gt;: Adapts instantly to schema changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Ownership&lt;/strong&gt;: No dependency on ML teams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Training&lt;/strong&gt;: No model training or retraining required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Tool usage provides explainability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-Query Cost&lt;/strong&gt;: Higher compute cost per query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: Multiple LLM calls may be needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External Dependency&lt;/strong&gt;: Relies on external LLM providers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution 3: Hybrid Approach
&lt;/h2&gt;

&lt;p&gt;Could we combine the best of both worlds?&lt;/p&gt;

&lt;p&gt;The idea: Use a small, fine-tuned base model with MCP for dynamic context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Reality
&lt;/h3&gt;

&lt;p&gt;Most lightweight models (e.g., Llama 8B variants) don't support complex tool usage or reasoning required for MCP. They're trained for direct translation tasks.&lt;/p&gt;

&lt;p&gt;Building a larger model with tool-use capabilities is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Significantly more complex&lt;/li&gt;
&lt;li&gt;Resource-intensive&lt;/li&gt;
&lt;li&gt;Not a near-term option for most teams&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Direct SQL Generation
&lt;/h3&gt;

&lt;p&gt;Why not skip the intermediate query syntax and generate SQL directly?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complexity&lt;/strong&gt;: Easy to generate syntactically correct but semantically wrong queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Logic&lt;/strong&gt;: Existing query layer encodes important domain knowledge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance&lt;/strong&gt;: Duplicating logic in multiple places&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low Cost&lt;/strong&gt;: If the execution layer is already efficient, why bypass it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent SDK vs Custom Implementation
&lt;/h3&gt;

&lt;p&gt;Modern agent frameworks (OpenAI Agents SDK, LangChain, etc.) provide higher-level abstractions. Why build custom?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language Constraints&lt;/strong&gt;: SDK may not be available in your stack (e.g., Python SDK when you need Go)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;: SDK adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network overhead for API calls&lt;/li&gt;
&lt;li&gt;Serialization/deserialization costs&lt;/li&gt;
&lt;li&gt;Potential service-to-service latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Duplication&lt;/strong&gt;: Using external service means duplicating logic and data access&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Control&lt;/strong&gt;: Custom implementation provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fine-grained optimization&lt;/li&gt;
&lt;li&gt;Direct access to data&lt;/li&gt;
&lt;li&gt;Single service boundary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For high-performance, low-latency requirements, a custom implementation integrated directly into your service may be preferable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision Framework
&lt;/h2&gt;

&lt;p&gt;When choosing an NLQ architecture, consider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Schema Stability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frequent changes → Favor dynamic approaches (MCP)&lt;/li&gt;
&lt;li&gt;Stable schema → Fine-tuning becomes viable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Team Capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ML expertise available → Fine-tuning feasible&lt;/li&gt;
&lt;li&gt;Engineering-focused → MCP easier to maintain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cost Profile&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High query volume → Fine-tuned model may be more economical&lt;/li&gt;
&lt;li&gt;Lower volume → MCP per-query costs acceptable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Latency Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sub-second requirements → May need cached models&lt;/li&gt;
&lt;li&gt;Seconds acceptable → MCP works well&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ownership Model&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Centralized ML team → Fine-tuning with shared infrastructure&lt;/li&gt;
&lt;li&gt;Product team ownership → MCP with direct control&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Our Decision: MCP
&lt;/h2&gt;

&lt;p&gt;We chose the MCP approach because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic First&lt;/strong&gt;: Our schema changes frequently enough that retraining overhead would be significant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independence&lt;/strong&gt;: We wanted to move quickly without dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Tool usage provides clear audit trails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Acceptable&lt;/strong&gt;: Query volume doesn't justify training infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experience Value&lt;/strong&gt;: Even if we change approaches later, the work on query datasets and testing will transfer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There's no universal "best" architecture for NLQ systems. The right choice depends on your specific constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schema stability&lt;/li&gt;
&lt;li&gt;Team structure and expertise&lt;/li&gt;
&lt;li&gt;Query volume and latency requirements&lt;/li&gt;
&lt;li&gt;Cost considerations&lt;/li&gt;
&lt;li&gt;Ownership and maintenance preferences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For dynamic systems with evolving schemas, MCP-based approaches offer a compelling balance of flexibility, maintainability, and time-to-market. For stable, high-volume scenarios, the upfront investment in fine-tuned models may pay dividends.&lt;/p&gt;

&lt;p&gt;The key is matching the architecture to your specific needs, not following a one-size-fits-all approach.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nlq</category>
      <category>llm</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
