<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Data Lead]]></title><description><![CDATA[On data infrastructure, trustworthy AI analytics and leading data teams]]></description><link>https://blog.thegroundlayer.io</link><image><url>https://substackcdn.com/image/fetch/$s_!en71!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F942c3331-70b8-4cfc-bcb0-e290cb59694e_830x832.jpeg</url><title>The Data Lead</title><link>https://blog.thegroundlayer.io</link></image><generator>Substack</generator><lastBuildDate>Tue, 03 Nov 2026 18:01:26 GMT</lastBuildDate><atom:link href="https://blog.thegroundlayer.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jose Coto]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thedatalead@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thedatalead@substack.com]]></itunes:email><itunes:name><![CDATA[Jose Coto]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jose Coto]]></itunes:author><googleplay:owner><![CDATA[thedatalead@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thedatalead@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jose Coto]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[What is hillclimbing all about and what does it have to do with agentic analytics?]]></title><description><![CDATA[Or what can Miley Cyrus teach us about evals]]></description><link>https://blog.thegroundlayer.io/p/hillclimbing-evals-data-agents</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/hillclimbing-evals-data-agents</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Tue, 27 Oct 2026 07:02:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/04d11211-c76e-4c33-9b89-e8f378b026f1_2400x1600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No. This is not an article about hiking. And, sorry to disappoint Miley Cyrus fans, but it&#8217;s not about her either. It&#8217;s actually about both, and about neither. It&#8217;s about running evaluations (evals) for agentic analytics and why using methods like hillclimbing can be key to improving your data agent&#8217;s accuracy.</p><p>But first, let&#8217;s start with a dramatization, based on real life, of a company that has just connected Claude to their warehouse (reader discretion is advised).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p>Clara: &#8220;I just updated the investor deck. It was super easy this time! I asked Claude to get the numbers directly from the data. And I&#8217;ve been creating these cool dashboards too. Look!&#8221;</p></blockquote><p>Three hours later&#8230;</p><blockquote><p>Clara: &#8220;Just double-checked with the data team. Turns out the numbers were completely wrong. Good thing I hadn&#8217;t sent the deck yet.&#8221;</p></blockquote><p>Clara was lucky this time, but who knows how many people out there are blindly trusting whatever their agent confidently presents to them as facts. Without a way to verify your agent&#8217;s output, you&#8217;re in for a wild ride through uncharted territory. Evals help you regain control and visibility over your agent&#8217;s actions.</p><p>The idea behind evals is simple. There&#8217;s no better way to understand how your agent performs than giving it a series of tasks and grading its output against accepted answers. For example, you know the answer to &#8220;What was our revenue in 2025?&#8221; But does your agent? That&#8217;s where your evals come in. </p><p>As Anthropic explains in their post <a href="https://www.anthropic.com/research/demystifying-evals-for-ai-agents">demystifying evals for AI agents</a>, there are two types of evals you can run:</p><ul><li><p><strong>Capability</strong>: These evals measure whether your agent can do the task you&#8217;re giving it well. For example: can your agent provide accurate revenue numbers? Can it quote the correct average revenue per store? Having a good overview of these questions will show you your agent&#8217;s weak spots.</p></li><li><p><strong>Regression</strong>: You need to make sure that every step forward doesn&#8217;t come with two steps back. That&#8217;s where your regression evals help out. For example, after you add more context or change your documentation, does the agent still get the revenue numbers right? What about after that naming change or that new model? Is the agent still passing the evals, or have you spotted any backsliding?</p></li></ul><p>Of course, you can&#8217;t create an eval for every potential question your stakeholders might ask your data agent. That would be impossible. However, this doesn&#8217;t mean you should just give up and accept that your agent is an impenetrable black box.</p><p>Think about it this way. You&#8217;re suddenly thrown into a vast, dark forest without a map (or cell phone coverage). You have two options: YOLO it and run around, or try to find your way out systematically. That&#8217;s what evals give you: an admittedly imperfect but important way to measure your progress toward your goal.</p><p>Now, let&#8217;s swap the forest for a hilly landscape, put on our hiking boots and start our climb.</p><h2>What is hillclimbing all about?</h2><p>There are very few instances where names in the industry make sense. &#8220;Hillclimbing&#8221; is one of those rare exceptions. The name already provides us with a clear mental picture. Just imagine. You are at the bottom of the mountain (or hill) and your goal is to get to the top.</p><p>Now, let&#8217;s translate this picture into our agentic world. No matter which tasks we introduce agents to, most likely they will perform well in some areas and really poorly in others. Knowing where these areas are gives us our first picture: our <strong>baseline</strong>. It will help us identify what we need to modify. From there, the goal is to go uphill.</p><p>Things are no different in analytics. <em>Introducing agents as interfaces with which our stakeholders interact implies making sure we know what our agents can do well and where they need assistance. Additionally, we need to develop a proper way to test whether our interventions are actually helping. Evals give us both.</em></p><p>The process involves four steps: setting up a baseline, identifying where to improve, making one group of changes at a time and evaluating them, and iterating for further improvements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wJCN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wJCN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 424w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 848w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wJCN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142658,&quot;alt&quot;:&quot;The hillclimbing loop for evals: set a baseline, identify where to improve, make one group of changes and evaluate, iterate&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/221756697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The hillclimbing loop for evals: set a baseline, identify where to improve, make one group of changes and evaluate, iterate" title="The hillclimbing loop for evals: set a baseline, identify where to improve, make one group of changes and evaluate, iterate" srcset="https://substackcdn.com/image/fetch/$s_!wJCN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 424w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 848w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!wJCN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47b06d29-70a3-431a-af5e-1943c807a6a5_2400x1280.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Set up your baseline</h3><p>To set your baseline, you need three things:</p><ul><li><p>First, come up with a relevant set of questions from your stakeholders. As data specialists, you&#8217;ve already got this. You know which questions are constantly coming to you that your agent has to get right. To look for possible blind spots, check your warehouse and dashboards; they will help you discover the main queries your stakeholders are running. If you have already set up your data agent, ask your stakeholders. Can they point you to cases where the agent got something wrong?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p></li><li><p>Second, you need to decide which method you are going to use to grade your agent&#8217;s answers. This is done on an answer-by-answer basis. In some cases, you&#8217;d want to see whether the agent is giving you the right number or text. In others, you&#8217;d also want to evaluate the quality of the explanation.</p></li><li><p>Third, provide the right answers. This is what your agent will be tested against.</p></li></ul><p>The third point is less straightforward than you&#8217;d think. While building my own evaluation set, I noticed how open-ended some of my questions were and how much knowledge is tacit. For example, a question that might seem simple at face value, like &#8220;What was our revenue last month?&#8221;, has more than one interpretation. To start with, what is revenue? But also, how do we calculate last month? Is it the last 30 days, the last 28 days or the last calendar month?</p><p><em>The solution is not to make your questions more precise. On the contrary. Remember, good evals should get as close as possible to the way your final users are interacting with your agent.</em> And there are very strong reasons to believe your stakeholders are not asking: &#8220;Please agent, provide me with a sum of our income before taxes for the last 28 days.&#8221; That&#8217;s what evals are all about: you want to test your agent exactly as your final users would and not spell things out for it. Instead, decide what your business means by &#8220;revenue&#8221; and &#8220;last month,&#8221; and write that into your expected answer. Teaching your agent those definitions is part of the climb. Also, make sure the environment you are running your evals in matches the one from your final user as closely as possible.</p><h3>Identify where you need to improve</h3><p>Once you have your eval set (aka golden set), go ahead and run it. You should run your evals more than once.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> Why? Remember that agentic systems are non-deterministic. In each run they can yield a different answer. Also, if you are using an LLM judge as the grading method, randomness will affect its grading as well.</p><p>After you have run your evals a number of times, you will observe that some groups begin to form based on their outcomes:</p><ul><li><p>Always passing: your eval passes in every run. These evals won&#8217;t help you identify places where your agent can improve; however, they should be part of your regression evals. They can help you identify if your agent is backsliding.</p></li><li><p>Never passing: your agent fails its eval on every run. This is your main case for improvement.</p></li><li><p>Flip flops: your eval passes in some runs and fails in others. Either your data agent or your grading model is showing inconsistency. Identify the source of the inconsistency and check if remediation is possible.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QeU3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QeU3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 424w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 848w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!QeU3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172163,&quot;alt&quot;:&quot;Eval results grouped into always passing, never passing and flip flops across runs&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/221756697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Eval results grouped into always passing, never passing and flip flops across runs" title="Eval results grouped into always passing, never passing and flip flops across runs" srcset="https://substackcdn.com/image/fetch/$s_!QeU3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 424w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 848w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!QeU3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98bcdd7-5c49-45ca-920e-57a7212299bb_2400x1280.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There&#8217;s no better way to understand what your agent is doing than by digging into its <strong>traces</strong>. Your agent's traces record all the steps it took and the tools it called when trying to provide an answer. I would normally start with the never-passing and flip-flop evals. Digging into the traces will help you answer: Is the agent using the right tables? Is it correctly interpreting the units in the tables? Do multiple sources in your warehouse confuse your agent about which one it should use? In other words, the traces will help you spot what needs to be changed to increase your agent&#8217;s passing rate.</p><p>At this point, it is very tempting to jump straight into action and start fixing what your agent did wrong. Resist the urge. Before that, check your passing evals. If, in the process, you discover that some passing marks are not well-deserved or your evals are to blame for some of the failures, you need to do some <strong>calibration</strong>.</p><p>Calibration is the process of adapting your evals and/or expected answers to make sure they are really covering what you want them to.</p><p>For example, it might be that your eval is <strong>passing for the wrong reasons</strong>. Say you asked your agent to give you the top three labels in your dataset, and you use a simple text match (contains) as your grading method. If the names of those three labels come up in the answer but aren&#8217;t named as the top three, your test will silently pass. Also, you might discover that your agent&#8217;s <strong>answer is correct, but the grading is failing it</strong>. For example, you have identified that your agent should only use certain sources from your warehouse. However, it turns out it can also get to the same answer by using others. You should decide whether you want to allow your agent to use that route. Additionally, your <strong>expected answer might be too vague</strong>, which leads to inconsistent grading.</p><p>The idea behind calibration is that sometimes failures have nothing to do with the agent itself, but with the way you have set up your evals. To repeat a point I made before: it does not mean shaping the eval and framing the question in a way no stakeholder would ask. It also does not mean changing your expected answer to match what the agent said; otherwise your agent will be speaking in an echo chamber. The expected answer should be adjusted to what the business means.</p><p>Once you&#8217;ve calibrated and re-run your evals, congrats! You now have a baseline. We are at the bottom of the hill right now, with an admittedly incomplete but useful map of how to climb it.</p><h3>Make one group of changes and evaluate them</h3><p>Your baseline will give you some paths for improvement. Here&#8217;s a piece of advice. Don&#8217;t pursue all the paths at the same time. You&#8217;ll probably get lost. You want to check whether your intervention is having the desired effect. If you change five different things at the same time, could you say which one did the trick?</p><p>For that reason, think about identifying and collecting the changes you want to apply in logically consistent groups. For example, if your baseline was determined by the evals you ran after connecting your agent to the raw data layer, a logically consistent next step could be: what happens if we document the raw layer? As a further step, you can figure out what extra benefit you&#8217;ll get by cleaning up your data and generating some models. You can then move on to adding more documentation, a semantic layer, etc. I&#8217;d start simple, first with the steps that demand the least effort. By making small incremental changes, you might realize in the process that the more expensive steps are not really worth it.</p><p>After adding your changes, it&#8217;s eval time again. Run the same evals you had when creating your baseline. Run them more than once to deal with their intrinsic variance.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> Compare the evals one by one and check what their status is across the runs. Are the ones that were failing passing now? How about the ones that were constantly flipping? Did you find any regressions?</p><p>How do you identify real improvements? Check your passing evals and compare them to the baseline. Note, again, that there&#8217;s a randomness component to evals, so make sure you don&#8217;t mistake noise for signal (e.g. all your improvements could just be flip-flop evals that happened to pass in every run). You have a strong case for improvement when a previously never-passing eval passes in all runs. If your flip flops are now consistently passing, check the traces to understand whether this new stability is well-founded.</p><p>Look beyond the number of passing evals. The truth might be hidden behind it. If you pull back the curtain, you might discover that your previously failing evals are now passing, but some that were always passing are now flip-flopping or failing. Even if, in the best case, you see an overall increase in passing evals, you might have inadvertently introduced some regressions. To catch them, check your always-passing evals first: they&#8217;re your regression evals.</p><p>Armed with this evidence, you have to decide whether you keep the change, and this becomes your new baseline, or whether you want to undo it because it is leading you in the wrong direction.</p><p>That&#8217;s what hillclimbing is all about. It is a series of small conscious steps, where you apply changes, you run your evals and then you check whether there&#8217;s an actual improvement. And you keep on repeating this same process, again and again, in your quest to get to the top.</p><h2>Are we there yet?</h2><p>It&#8217;s natural to think that, at a certain point, after all the steps we have taken in the right direction, we should reach the top. Finally, it&#8217;s time to sit down and enjoy the view.</p><p>Well, not really. Data agents work in constantly changing environments, and the evals need to keep up with that. Here are some reasons why the process of running evals and hillclimbing should be a constant part of your development flow:</p><ul><li><p>Remember that your evals only cover a very small subset of the infinite number of questions your stakeholders can ask. If you keep improving on the same set of evals, you will end up overfitting: your agent will get perfect scores on your eval set, but that might not carry over to the actual questions your users are asking.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a> To avoid this, rely on your users to inform you about cases where your agent is falling short of the task. Additionally, if possible, constantly inspect some real interactions of users with your agent to find failures. This will allow you to create new evals and will be key for further accuracy gains.</p></li><li><p>Your data is always changing. New tables or data models are added, old models are retired, new corner cases need to be documented. Each of those is a new reason to check your evals and see whether there are new areas that you need to cover.</p></li><li><p>AI is always changing. New, more capable models are constantly coming out. Don&#8217;t assume that new models behave like old ones. Use your evals to prove it.</p></li><li><p>By this point, you should already have a number of evals that your agent should always pass. These evals allow you to identify regressions. Constantly run your evals so you can quickly react in case you observe some backsliding.</p></li></ul><p>&#8220;The top&#8221; is always moving, as you discover new ways in which you need to improve your agent. And that&#8217;s good. Every step you take comes with a lesson about your agent, and earns it a bit more of your stakeholders&#8217; trust. Miley Cyrus said it best: <em>&#8220;There&#8217;s always gonna be another mountain / I&#8217;m always gonna wanna make it move / Always gonna be an uphill battle&#8230; It&#8217;s the climb.&#8221;</em></p><h2>Let&#8217;s do some hill climbing together!</h2><p>In the coming articles, we will climb together. We are going to put the theory developed here into practice. We will start with a data agent connected only to the raw layer and see how much we improve from our baseline when we start adding documentation, models and better instructions.</p><p>We will use <a href="https://thehonestagent.dev/">The Honest Agent</a>, an open-source tool I created that helps with running and reviewing evals for your data agent. You can find the repo <a href="https://github.com/jlcoto/the_honest_agent">here</a>. Install it and follow along!</p><p>If you already work with dbt, The Honest Agent will feel very familiar (e.g. simple commands like <code>run</code> and <code>--select</code>). And, just to keep things extra dbt, we are going to use its best-known dataset: the Jaffle Shop.</p><p>And now, let&#8217;s start climbing!</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Ideally, you have some observability of your agent in production. This will help you catch the errors your stakeholders might not even be aware of.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>The number of times you want to run your evals is decided case by case. I recommend you do it at least three times (as I will do in the example I will present). Three runs give you a rough indication of which of the three groups your eval belongs to (always passing, never passing and flip flops). Note that running evals incurs token costs. There&#8217;s a trade-off to be made here between minimizing the variance of your passing rate and the budget you are willing to spend on it.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>See previous footnote.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>In the following articles we will use a technique known as holdout to reduce the risk of overfitting.</p></div></div>]]></content:encoded></item><item><title><![CDATA[The Honest Agent: Put trust into your AI analytics]]></title><description><![CDATA[Is your AI analytics agent telling you the truth?]]></description><link>https://blog.thegroundlayer.io/p/the-honest-agent-put-trust-into-your</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/the-honest-agent-put-trust-into-your</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Thu, 15 Oct 2026 15:16:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dAom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dAom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dAom!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!dAom!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!dAom!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!dAom!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dAom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:947132,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/220530358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dAom!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!dAom!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!dAom!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!dAom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44c387f4-0f64-4de7-8c65-4c369c4ef761_2400x1260.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;Let&#8217;s connect our warehouse to Claude.&#8221; I welcomed the suggestion with both excitement and trepidation. At that time, I remember being equally in awe of the opportunities it would open as alarmed by everything that could potentially go wrong. Let me give you a free tour of what went through my mind.</p><p>The part of me that got excited saw everything this would make possible.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>In most organizations, the data team is seen as the one standing between other teams and the insights they need. &#8220;Bottleneck&#8221; and &#8220;gatekeeping&#8221; are not an unusual pairing when someone is talking about the data team. &#8220;Isn&#8217;t that dashboard or metric simple enough? Why do I need to create a ticket that will be thrown into the backlog, anyway?&#8221; At last, the data would be at the stakeholders&#8217; fingertips.</p><p>I was also excited for the data team. Gone would be the days of doing the menial work of writing yet another ad-hoc query, creating really complex dashboards no one would look at, or pulling out fresh numbers so they could be imported into an Excel sheet.</p><p>A real win-win.</p><p>On the other hand, I also saw how opening up the gates could be problematic. In my experience, the best measure of success of a data team is whether they can build trust in the metrics they produce. A well-governed data architecture. Music to my ears.</p><p>Trust in data is built by being consistent and predictable. Metrics need to be deterministic. You don&#8217;t want last quarter&#8217;s revenue to jump from one day to the next. You don&#8217;t want 20 different dashboards reporting 20 different numbers for the same KPI.</p><p>AI agents are, by nature, probabilistic. Give your agent instructions to write a paragraph. The same instructions can generate multiple versions. Which one is the right one? For text, it might not matter, but for data, it does.</p><p><em>The main challenge in the age of agentic analytics is to give your agent the right harness. You need to constrain its behavior and make it as deterministic as possible.</em></p><p>Yet I felt there was so much out there that focused on the cosmetic work and the presentation layer (did someone say dashboards?) while overlooking what&#8217;s inside.</p><p>That&#8217;s what motivated me to create <a href="https://thehonestagent.dev/">The Honest Agent</a>. I certainly want to reap the benefits of agentic analytics. But I recognize that this is only possible if people can trust the answers the agent gives them.</p><p>Do you actually know whether your agent is being honest, or are you blindly trusting the numbers it gives you?</p><h2>How does the Honest Agent work?</h2><p>Remember the last time you had to take a test? You were given a set of questions that would be graded against the accepted answers.</p><p>This is exactly what The Honest Agent does. As simple as that. You first define the set of questions, ideally business-critical ones (the ones you really don&#8217;t want the agent to get wrong), and then provide the accepted answers for them. Then it&#8217;s quiz and report time.</p><p>If you already use dbt, The Honest Agent will feel very familiar. <em><strong>Think of it as dbt for your agent evals</strong></em>: you go from running your evals to the report in three simple commands.</p><p>I will briefly go through the main components here. <a href="https://thehonestagent.dev/docs/">Check the docs</a> if you want to dig deeper.</p><h3>Connect to your MCP server</h3><p>The Honest Agent connects to your analytics MCP server, the same one your users reach through tools like Claude Cowork.</p><p>I&#8217;ve tested the setup with Snowflake and MotherDuck. It should work with any MCP server you can reach with a URL and a token. If yours connects another way, reach out and I&#8217;ll look at adding it.</p><h3>Choose your testing model</h3><p>The Honest Agent needs an LLM to talk to your analytics MCP server and to grade the answers. For this, you need an API key from <a href="https://platform.claude.com/">Anthropic</a> or <a href="https://platform.openai.com/login">OpenAI</a>, depending on which provider your organization uses. Note that this is an API key, not a Claude or ChatGPT subscription.</p><p>When selecting a model, check which ones are used in your organization (e.g. Claude Sonnet 5.5 or Opus 5.5). This gets you closer to the answers people are getting. The Honest Agent also lets you compare results across models (more on that later).</p><p>Note that each evaluation run incurs costs, and these vary with the model you select.</p><h3>Define your evals</h3><p>Defining your evals is just a matter of writing them down in YAML. Each eval can check two things:</p><ul><li><p><strong>Accuracy</strong>: is the agent giving you the right answer?</p></li><li><p><strong>Provenance</strong>: is the agent looking at the right sources?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X6SI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X6SI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 424w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 848w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 1272w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!X6SI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png" width="1456" height="1186" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1186,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:836616,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/220530358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X6SI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 424w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 848w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 1272w, https://substackcdn.com/image/fetch/$s_!X6SI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58eab7e-85bb-480c-b088-713368f3d386_2800x2280.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Why check both? They point to different issues.</p><ul><li><p>Your agent might ace accuracy and fail provenance. For example, instead of the table with the aggregated and curated numbers, it looks at some intermediate ones. It got to the right answer, but do you want your agent relying on those intermediate tables?</p></li><li><p>Your agent might use the right sources and still fall short on accuracy. It consulted the right tables as part of its work, but got lost along the way.</p></li></ul><p>In my experience, good evals are the ones that cover the questions your users are constantly asking. Take some time to define them. Dig into your warehouse logs and talk to your stakeholders to find out. You won&#8217;t be able to cover all the questions, but you can try to cover the most important ones.</p><p><a href="https://thehonestagent.dev/docs/writing-evals/">Check the docs</a> for details on how to write evals and all the options around them.</p><h3>Run your evals</h3><p>You can run your evals with one simple command:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;3dccbda1-211e-4427-ada8-f819c2f0d165&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">honest-agent run</code></pre></div><p>The run command also offers options to run only a subset of your evals, in the same style as dbt, e.g. <code>honest-agent run --select tag:smoke</code>. <a href="https://thehonestagent.dev/docs/running-evals/">Check the docs</a> to learn more.</p><h3>Build and serve your report</h3><p>Call me biased, but the report is what all the evaluations are about. A score can only tell you so much if you can&#8217;t dig deeper into the questions that failed, the SQL that was run and the steps your agent took.</p><p>Building and serving the report is just two commands away:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;f243830e-10d9-4e3b-8d5f-1585b2da8a50&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">honest-agent report
honest-agent serve</code></pre></div><p>The report has three sections:</p><h4>Overview</h4><p>In one screen, you can quickly compare your agent&#8217;s scores. The heatmap gives you an overview of the different eval runs and helps you to spot drifts; click any cell to open that answer. The Below threshold list shows the evals that didn&#8217;t pass, and why they failed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RTIw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RTIw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 424w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 848w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 1272w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RTIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png" width="1456" height="1191" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1191,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:404709,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/220530358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RTIw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 424w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 848w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 1272w, https://substackcdn.com/image/fetch/$s_!RTIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0cd621-85bc-4d8e-8064-dbb137fac47f_2880x2356.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Model comparison</h4><p>Want to check how different models compare on your evals? Say you want to see how Sonnet 5.5 scores against Haiku 5.5. Or you want to check how OpenAI models compare to Anthropic&#8217;s. This is your page.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ud_e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ud_e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 424w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 848w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 1272w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ud_e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png" width="1456" height="1498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:407666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/220530358?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ud_e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 424w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 848w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 1272w, https://substackcdn.com/image/fetch/$s_!Ud_e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab9ff23-925a-4d58-b59c-5cccbdd9a026_2880x2963.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The heatmap lets you spot the performance gaps across models. You can also track each model&#8217;s scores over time. As your data and setup change, you&#8217;ll see which model keeps up, and whether a cheaper one is good enough for the questions your team actually asks.</p><h4>Result page</h4><p>Admittedly, this is the page where I spend most of my time. It&#8217;s like opening a window into your agent&#8217;s decision-making process. You can get there by clicking an eval&#8217;s cell in the heatmap, or from the Below threshold list in the Overview.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29fb0ae8-e865-43ec-b4be-4b424c0460f7_2880x2500.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23288dfb-5b77-47b9-93c9-b5a2ffb5bfe7_2464x2398.png&quot;}],&quot;caption&quot;:&quot;Result page screen&quot;,&quot;alt&quot;:&quot;Result page screen&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4da72739-f64b-4bbe-9a42-21e1bb1b1d08_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>Besides a closer look at how the agent scored on accuracy and provenance, it helps you understand the causes behind those scores.</p><p>This is also where The Honest Agent differs most from general-purpose eval tools, which mostly judge the answer as text. In analytics, the answer is a number that came from a query, so The Honest Agent looks at the query too:</p><ul><li><p>Every SQL query the agent ran is extracted and shown to you, so you can quickly check its logic.</p></li><li><p>That SQL is parsed to find the tables it actually read, and compared with the sources your team trusts. Getting the right number from the wrong table shows up as a failure, not a pass.</p></li></ul><h3>Make it part of your CI/CD pipelines</h3><p>The evals are only useful if you keep running them. Because The Honest Agent is a CLI, it fits easily into any scheduler you already use to run your data pipelines. If an eval falls below its threshold, the run fails, so you&#8217;ll notice.</p><p>You can also configure a Slack webhook to get alerted when your evals fall below their thresholds.</p><h3>Is The Honest Agent your ultimate solution to build trust in your agentic analytics?</h3><p>As the creator of a tool that has &#8220;honest&#8221; in its name, I should hold myself to the same standard: No. The Honest Agent won&#8217;t be your ultimate solution, but it can certainly help you along the way.</p><p>There are two limitations you should be aware of:</p><ul><li><p>Each eval is a single, fresh question. In the real world, users interact with agents in a series of questions and answers, where context builds up and shapes the next reply. Multi-turn evaluation is something I want to explore in coming iterations.</p></li><li><p>You can only catch errors in the questions you are tracking. Think about the millions of questions your users could ask of your data. It is impossible to foresee and evaluate all of them.</p></li></ul><p>Even with these limitations, The Honest Agent already sheds some light on what used to be a black box. Think about it: if your agent fails to answer a simple question with a fresh context, it is most likely also getting it wrong in longer conversations with your users. And while you can&#8217;t catch every error your agent might make, wouldn&#8217;t it be great to catch the most important and most frequently asked ones? This is where The Honest Agent can help.</p><h3>Try it out!</h3><p><a href="https://thehonestagent.dev/">The Honest Agent</a> is open source. You can <a href="https://github.com/jlcoto/the_honest_agent">check the repo on GitHub,</a> and <a href="https://thehonestagent.dev/docs/getting-started/">follow the setup guide here</a>. If you&#8217;d like to see it in action first, have a look at <a href="https://the-honest-agent.pages.dev/report/">the demo report</a>.</p><p>Note that it&#8217;s still in alpha, so there might be some breaking changes while I keep developing it. I&#8217;d also be very happy to get your feedback: feel free to reach out in the comments or on <a href="http://www.linkedin.com/in/jose-coto">LinkedIn</a>.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Provenance only sees SQL. If your agent answers through a semantic layer or a search tool, with no SQL involved, its provenance can&#8217;t be checked yet.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Harness Engineering for Agentic Analytics ]]></title><description><![CDATA[Or how to teach your agent how to ride a bike]]></description><link>https://blog.thegroundlayer.io/p/harness-engineering-for-agentic-analytics</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/harness-engineering-for-agentic-analytics</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Mon, 07 Sep 2026 17:18:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/495d76c4-f2fa-4be6-815d-945f801a6e8b_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Remember when you first learned to ride a bike? Your first rides would probably be alongside someone older, perhaps your mom or dad. You would wear protection gear, like knee pads and a helmet. And, if you were like me, your bike would have those small training wheels attached to the back wheel to help you keep your balance.</p><p>During those first rides you would get used to the feeling of being on a bike but more importantly they would be full of safety instructions: how to cross the road, how to signal that you are turning and how to be aware of other vehicles. Till the day arrived, when the training wheels came off and without even knowing, off you went.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Harness engineering is like teaching your agent how to ride a bike. It&#8217;s those knee pads, helmet, training wheels and all those rules you needed to learn way back then to make it possible to ride a bike without harming yourself. Analogously, an agent is not only the model (aka bike) but also the controls, information, and guidelines it has to follow to arrive at a good destination.</p><p>In mathematical terms:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RlLv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RlLv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 424w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 848w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 1272w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RlLv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png" width="1186" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:1186,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49737,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/214604489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RlLv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 424w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 848w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 1272w, https://substackcdn.com/image/fetch/$s_!RlLv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33dab23b-dbc0-4c27-ba5f-c3e9efc2b493_1186x376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In bike terms:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EYQ1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EYQ1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 424w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 848w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 1272w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EYQ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png" width="1202" height="362" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:362,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52344,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/214604489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EYQ1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 424w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 848w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 1272w, https://substackcdn.com/image/fetch/$s_!EYQ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a4b609-5481-4bda-811d-5745c1c9e314_1202x362.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The importance of the harness: going beyond models</h2><p>Harness is the whole ecosystem your model is packed with: e.g. tools, context management, basic rules. A model without a harness is, essentially, a clever chatbot.</p><p>Time after time, it has been proven that with a better harness, open models can operate and even surpass the performance of frontier models. Take for example the <a href="https://www.faros.ai/blog/harness-engineering">findings from Faros AI</a>. Across 211 real engineering tasks spanning 12 repositories, they tested several model-and-harness combinations, and the open-weight models didn&#8217;t just match the frontier ones, they actually outperformed them on quality, at roughly half the cost.</p><p>This finding holds just as true in the agentic data world. By this point, it is a known fact that, no matter how advanced your model is, if you feed it messy and ambiguous data, it will confidently set you up for failure. Less complex models beat more powerful ones when they have access to clear, structured, and documented data, which is really just another way of saying a better harness.</p><p>Anthropic&#8217;s work on their self service analytics is testament to that. According to <a href="https://claude.com/blog/how-anthropic-enables-self-service-data-analytics-with-claude">their own account</a>, accuracy went from below 21% to consistently above 95%, and what drove that jump was work on the harness: decreasing data ambiguity, improving modeling, creating a semantic layer, and building structured skills. Using another agent to aggressively challenge the results, meanwhile, added only 6% accuracy at the cost of 32% more tokens and 72% higher latency.</p><h2>What goes into building an agentic analytics harness?</h2><p>Another way of thinking about the models that companies like Anthropic or OpenAI make available is to consider them as general purpose models. Going from a general purpose model to a highly specialized one in your specific area is a matter of providing it with the right harness.</p><p>When talking about harness engineering one might get the false impression that it&#8217;s a single discipline. Surely, there are some principles that apply across the board, like tracing, observability, and validation, but the way you build your harness is highly domain dependent. After all, the whole point is specializing your agent for a particular job. An agent that is great at debugging your backend application might fail at the simplest data retrieval task.</p><p>In analytics, the goal is clear: you want your agent to get to the right answer. The problem: there&#8217;s only one such right answer. The harness you build needs to constrain the non-deterministic traits inherent in the agent&#8217;s behavior. Given a question, the agent needs to point to the correct answer, over and over. There&#8217;s a lot of work to get there, as attested in <a href="https://claude.com/blog/how-anthropic-enables-self-service-data-analytics-with-claude">Anthropic&#8217;s own post </a>and this <a href="https://martinfowler.com/articles/making-data-ready-for-agentic-ai.html">Thoughtworks piece</a> on getting your data ready for agentic AI.</p><p>So far, my impression is that the debate has been focused very much on the side of context and information retrieval, and for very good reasons. Context plays a very important role in analytics. A well-maintained context reduces ambiguity and keeps your agent honest.</p><p>However, concentrating only on context risks ignoring other important elements of the ecosystem that agents operate in and that constrain their behavior. That&#8217;s why I prefer speaking about harnesses. Sure, context is part of the harness, but there are also other components, all posing their own set of challenges for steering your agent&#8217;s actions:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!utJa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!utJa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 424w, https://substackcdn.com/image/fetch/$s_!utJa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 848w, https://substackcdn.com/image/fetch/$s_!utJa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 1272w, https://substackcdn.com/image/fetch/$s_!utJa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!utJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png" width="1456" height="1868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1868,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:475715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/214604489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!utJa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 424w, https://substackcdn.com/image/fetch/$s_!utJa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 848w, https://substackcdn.com/image/fetch/$s_!utJa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 1272w, https://substackcdn.com/image/fetch/$s_!utJa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F566f96c2-1409-419c-afd0-412f3c0ed534_1779x2283.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Agentic Analytics demands data harness engineering</h2><p>How is AI changing a data practitioner&#8217;s role? As more and more analytics work is delegated to agents, we will soon start seeing where this approach falls short. An agent will always provide you with an answer. But can you trust it?</p><p>Building those specialized harnesses will be key to using data agents reliably. Future data practitioners need to understand how to work with agents and how to build and evaluate the harnesses these agents are working with.</p><p>This means looking far beyond modeling and documentation and having an understanding of how agents work: How do agents generate their context? How can we generate better skills? Do we have the tools to check what answers they are providing to our stakeholders? Do we have appropriate tests to check for quality drifts?</p><p>In other words, to borrow from the metaphor this article started with, data practitioners are those parents teaching the agent how to ride the bike. Our work is now getting the agent properly equipped to make the ride successful.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Agentic Analytics: Dream or Hallucination?]]></title><description><![CDATA[What it takes to make agents reliable]]></description><link>https://blog.thegroundlayer.io/p/agentic-analytics-dream-or-hallucination</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/agentic-analytics-dream-or-hallucination</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Sun, 21 Jun 2026 20:18:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a35fd7b7-99e9-4718-b983-c5bca3ac2904_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s 7am and you&#8217;re ready to start your morning commute. Your phone lights up with a push notification: &#8220;Data agent: your daily subscription metrics.&#8221; Subscriptions are up, churn is down, and your coffee just started tasting better. You say to yourself: we&#8217;re on a winning streak.</p><p>You think back, smiling, to that bygone era when you needed to contact the overwhelmed data analyst, create a ticket, and pull every lever to get it prioritized. Data is now where it needs to be: at the heart of the company, pumping every decision, one Slack message away.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>You share the news with finance. Instead of celebration, you&#8217;re met with a chill. Those new subscriptions you were so excited about never turned into actual revenue. Right. It was too good to be true. A dream, or technically speaking, a hallucination.</p><h3>Agentic Analytics: the quest for following the right path</h3><p>Think about the time you asked your favorite AI tool to build a document or presentation for you. You might need to do some small tweaks, change the tone, and so on. But there were many different ways the task could have been done well.</p><p>Data is different. Your task is to land on a single answer (say, the number of subscriptions) and that answer has to be correct.</p><p>As Anthropic puts it in <a href="https://claude.com/blog/how-anthropic-enables-self-service-data-analytics-with-claude">their article</a> on enabling self-service analytics with Claude, some domains, like coding, have a much wider solution space (the range of answers that would all be acceptable). In data, the path is narrow. Coding is an open-ended space where creativity pays off, and tests and docs catch wrong answers for you. Analytics is the opposite: there&#8217;s often, in their words, &#8220;only a single correct answer using a single correct source,&#8221; with no deterministic way to prove it&#8217;s right.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hD5V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hD5V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 424w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 848w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hD5V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png" width="1456" height="703" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:703,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90532,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/202998340?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hD5V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 424w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 848w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!hD5V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13c8dc1-15ee-4e6b-96eb-db2e3cd79135_2320x1120.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The main task in this new agentic analytics work is to narrow the path the agent takes and lead it to the right solution. The good news is that most of this can already be built with your current stack, if you&#8217;ve been following good data practices. Being ready for the agentic era means doubling down on modeling, documentation, and validation. As Anthropic found, that&#8217;s the difference between an agent that&#8217;s right 21% of the time and one that&#8217;s right 95%.</p><h3>3 pillars for Agentic Analytics</h3><p>In the new agentic world, context is king. Context, in my view, is the ecosystem in which the agent operates and makes its decisions. In the data world, two pillars build that context: data modeling and documentation. A third one keeps it honest: validation, making sure the context is correct and stays that way as the business changes.</p><h4>Data modeling foundations</h4><p>We&#8217;ve all been there. You need to put together a quick report on subscriptions. You go digging and find five different datasets that could work, each giving a slightly different number. So you muster some courage and go straight to the source, trying to connect the tables yourself. You spot a c_id (customer, maybe?) but nothing obvious to join it to. You give up. You go for one and hope for the best.</p><p>Agents are no different. Five models all covering the same concept don&#8217;t narrow the agent&#8217;s path to the right answer, they widen it. And when it isn&#8217;t clear how those models connect, the way that c_id had nowhere obvious to join, the agent is left guessing the same way you were.</p><p>The bottom line: creating data models for agents is no different from creating them for humans. Think of them as data products. They should be intuitively easy to work with, where dimensional modeling earns its keep. They should reduce ambiguity, so no two models do the same thing. Your organization&#8217;s metrics should be codified in a semantic layer, so they resolve to a single definition. And tests and freshness checks keep your sources reliable.</p><h4>Documentation</h4><p>Remember that surge in subscriptions that never turned into revenue? Finally your analyst had some time to check it out. The data was &#8220;technically&#8221; correct, but the surge came from a migration of old accounts to the new subscription provider.</p><p>If you&#8217;ve worked with data, you know the numbers you see are only part of the truth. The business context and the processes that produce them matter just as much. This kind of knowledge is cumulative, scattered across the organization, and often not written down anywhere.</p><p>This is where documentation sets a different bar in the agentic world. It&#8217;s not just keeping your dataset descriptions up to date. It means capturing all that process and business logic, the things that usually live in people&#8217;s heads, in a written form an agent can actually retrieve and use. Think about the documentation you wish you&#8217;d had when you were onboarded.</p><p>Your documentation should cover at least three things. First, your <strong>data sources</strong>: what each one is, what its columns mean, how it relates to others, and what events to account for when interpreting results (remember the subscription migration?). Second, <strong>business context</strong>: the campaign that drove a spike in registrations, the roadmap change that shifted a metric, the things that explain why the numbers look the way they do. Third, <strong>skills</strong>.</p><p>Skills, as Anthropic describes them, are the procedural knowledge that tells the agent how to navigate everything you&#8217;ve documented: which sources to consult first, how to handle ambiguity, and when to hold back rather than answer from a missing or conflicting source. It&#8217;s the layer Anthropic credits with the largest gains in accuracy.</p><h4>Validation</h4><p>Let&#8217;s say you&#8217;ve invested the time and effort: proper documentation, business context, sharpened agent skills. Is that it?</p><p>That&#8217;s only part of the work. Data sources and agent development move fast, and your context goes stale with them. Anthropic watched their own accuracy drift from 95% to 65% in a single month before they started actively maintaining it. So you need to keep your context current and keep checking that your agent&#8217;s quality hasn&#8217;t degraded over time.</p><p>A best practice here is to move context and modeling into the same repository and treat context like any other code change. You can also add a skill that checks, whenever you update a data model, whether the documentation needs updating too.</p><p>Another important part is constantly checking your agent&#8217;s accuracy. Think of it like quizzing it on the same questions you already know the answers to. Then, when you ship a new model version or edit a skill, you can see whether it actually helped or quietly made things worse.</p><p>Can we guarantee the agent will always get it right? Not really. At least, not yet. If you think about it, there&#8217;s a catch in that 95% accuracy Anthropic reports, one they acknowledge themselves. You can only measure accuracy on questions you already know the answer to. The silent failures, by definition, are the ones that never make it into your test set. You can&#8217;t quiz the agent on a mistake you don&#8217;t know it&#8217;s making. But that&#8217;s why validation is central, and never finished. You can&#8217;t eliminate the silent failures, but you can keep shrinking the space where they hide: catching drift, harvesting corrections, sanity-checking the numbers that matter most.</p><h3>Conclusion</h3><p>The agentic analytics era is here to stay. As I&#8217;ve argued, whether agents succeed in your organization hinges on reducing ambiguity and narrowing their options down to the single right answer.</p><p>That demands doubling down on some good old data practices, like building intuitive data models and investing the time to document them. It also means adopting new ones: curating your business context, sharpening your agent skills, and keeping everything honest with continuous validation.</p><p>And it demands accepting a trade-off. Democratizing data through agents means there will be cases where someone trusts a wrong answer without ever realizing it. The real challenge ahead isn&#8217;t building the agent, it&#8217;s making sure that when it&#8217;s wrong, you find out before a bad decision gets made.</p><p>That world, where your 7am Slack digest steers you right instead of wrong, is a dream well within reach. But it isn&#8217;t built by pointing an agent at your warehouse and hoping for the best. What separates dream from hallucination? It&#8217;s the unglamorous work underneath: the models, the documentation, the validation. Get it right, and it stays a dream.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[dbt just got quacking]]></title><description><![CDATA[the missing piece for collaborative DuckDB workflows]]></description><link>https://blog.thegroundlayer.io/p/dbt-just-got-quacking</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/dbt-just-got-quacking</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Mon, 25 May 2026 10:45:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kJW0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you are following the news coming from DuckDB, most likely your feed has been &#8220;quacking&#8221; lately. On May 12th 2026, the folks at DuckDB labs had a <a href="https://duckdb.org/2026/05/12/quack-remote-protocol">major announcement</a>: now it is possible for DuckDB instances to speak to each other. The protocol is appropriately called, you guessed it, quack.</p><p>At this point, a small confession. I welcomed all the excitement around quack, however I was struggling to understand what impact it would have on my own work. I went back and forth on my current workflow trying to identify use cases. I did find some small optimizations, but nothing that would match all that excitement in my timeline.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>And, then, in one of those episodes where the answer had been in front of you the whole time but you failed to realize it, I had my aha moment: our dbt workflow. Quack is the missing piece DuckDB needed to make dbt team workflows work.</p><p>Let me explain. So far, DuckDB was great at what it promised. It was a super optimized analytics warehouse that you can run on your machine. Meanwhile, dbt is now the de facto tool most data teams use to transform their raw data in meaningful models. Your DuckDB + dbt combo workflow normally involves reading data from some cloud storage provider (like s3) and performing all the transformations on your local machine.</p><p>While this worked very well when developing in isolation, things got complicated quite quickly the moment you wanted to work in a more collaborative setup. Let me clarify this with an example.</p><p>Let&#8217;s say Ana is currently working on a new customer churn model. dbt and DuckDB means that she can work in a very isolated way and run all the models on her machine. That&#8217;s great. The problem starts when, let&#8217;s say her colleague Alex, wants to inspect Ana&#8217;s model, to validate her calculations. The complete development isolation had one considerable tradeoff: no simple way to share Ana&#8217;s work. Alex would have to ask for her file.</p><p>This is exactly what quack changes. It allows DuckDB instances to talk to each other. For dbt, this means that now Ana can run her models in a common DuckDB database shared by the team. If Alex needs to check Ana&#8217;s work, he can simply, for example, check <em>dev.ana.customer_churn</em>. In other words, quack has opened the possibility for dbt development flows that are more collaborative and akin to the experience developers have when working with other warehouses, like snowflake or BigQuery with possibly one big twist.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kJW0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kJW0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 424w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 848w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kJW0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png" width="1456" height="774" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:774,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253434,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/199169124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kJW0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 424w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 848w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!kJW0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c0b5d6-869d-45cf-ae2b-7464f6ea4d48_2694x1432.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Unlike traditional warehouses, with dbt + DuckDB + quack developers can use their local machines to do the transformations and then write those changes to the shared DuckDB instance when ready. This also has a meaningful cost implication: computation happens on the developer&#8217;s own machine, not on a cloud warehouse billing by computation time. Compared to running every dbt model against Snowflake or BigQuery, the savings can be significant.</p><p>If you are a data team running on a small budget, this could be the stack you were looking for. Spin up a small shared DuckDB instance, configure your dbt targets, and you are good to go. Additionally, developers can take advantage of their local machines to build their models, something a traditional cloud warehouse simply doesn&#8217;t allow. Just keep in mind, quack is still in its initial stages and under development. However, the promise is there: your dbt development will soon get quacking and cheaper.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Radical Support]]></title><description><![CDATA[OKRs that work for your analytics team]]></description><link>https://blog.thegroundlayer.io/p/radical-support</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/radical-support</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Wed, 06 May 2026 16:57:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7-oy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7-oy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7-oy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7-oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png" width="574" height="301.35" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1df212ca-d288-46c5-9205-412f2131421c_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:574,&quot;bytes&quot;:73203,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thedatalead.substack.com/i/196467649?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7-oy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!7-oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1df212ca-d288-46c5-9205-412f2131421c_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You know the feeling. Just when you are wrapping up the meeting about the definitely last changes to a report &#8212; the last ones, they swear &#8212; you are distracted by a Slack notification in the management channel: &#8220;@here, don&#8217;t forget that next Tuesday we are going to discuss our next quarter&#8217;s OKRs. Start adding your suggestions! &#128522;&#8221;</p><p>At this point, you have already started scratching your head, trying to come up with some possibilities. You already know the theory. Yes, the objective needs to be inspiring. Yes, you want your key results to be SMART! By then, you have probably forgotten what each letter of that acronym means, except for the M (hint: measurable). After all, aren&#8217;t metrics exactly what the data department is good at?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>After writing a couple of sentences, you soon discover it is a dead end. A couple of hits to the backspace key puts you back at the beginning. Clean slate. After trying again, you hit the backspace key again. This time, harder. Yes, setting OKRs as an analytics team is frustrating. There&#8217;s something in the whole OKR setup that does not quite seem to capture the wide array of activities an analytics team regularly conducts.</p><h3><strong>OKRs: the case for radical focus</strong></h3><p>The real power of OKRs stems from their capacity to focus efforts around one or two bold objectives a company wants to achieve within a defined timeframe. That is Christina Wodtke&#8217;s argument in her book Radical Focus. It is this sense of clarity and alignment that allows companies to track progress, stay accountable, learn and celebrate all the actions contributing towards their goals.</p><p>If you are a data lead reading Wodtke&#8217;s book, you probably won&#8217;t find that any purely analytics objective should make it to the winners&#8217; podium of your company&#8217;s OKRs. And that&#8217;s fine. Don&#8217;t get me wrong, analytics and reporting tasks are really important, but they are not the core of your business. In Wodtke&#8217;s terms, these are supporting teams, much like finance or legal.</p><h3><strong>Making OKRs work for your analytics team</strong></h3><p>So, how can you tie your analytics team back to the OKRs and reap the benefits they are set to bring? After all, there are two important things OKRs provide: focus and a sense of accomplishment. These are key drivers for team productivity and morale.</p><p>There are a couple of ways.</p><h4><strong>Working with the company OKRs, making them your own</strong></h4><p>Emphasize both within and beyond your team how your work is supporting the company&#8217;s OKRs.</p><p>Let&#8217;s say this quarter&#8217;s objective is all about conversion. Why not highlight that dashboard your team created to help track conversions? Or the tracking setup your team put together? Or the experiment you helped to run?</p><p>These are all meaningful contributions your team made that helped drive this OKR. In this way your team will not only internalize that OKR (and as a by-product help them prioritize their work) but also help them establish a direct connection between their work and the company&#8217;s larger objectives; something analysts consistently struggle with.</p><h4><strong>Creating your own team OKR, tuning your processes</strong></h4><p>Think about that team process that is not quite working yet. For example, you have identified serious gaps in the data onboarding process you provide for other teams that you want to close. Or, perhaps, your experimental setup is not quite where you want it to be.</p><p>These are all activities worth turning into a proper objective. If you decide to go that route, there are a couple of things to keep in mind.</p><p>First, make sure you get buy-in from leadership. After all, OKRs are about sending a strong message about what you want to focus on and should help you prioritize. It will also keep you and your team accountable. A good way to secure that buy-in is to make a clear connection between the process gap you want to address and the company&#8217;s quarterly OKRs.</p><p>Second, remember that this is a team OKR and your team is there to support the company. If you ever have to choose between your team&#8217;s OKR and the company&#8217;s, the choice is simple: company OKRs always come first.</p><p>These two strategies are not mutually exclusive. You can do both. The first one (working with the company OKRs) should be part of your regular quarterly exercise. The second one (tuning your processes) is not a must. You can turn to it whenever you feel your team and organization could benefit from some process tuning.</p><h3><strong>Radical support to achieve radical focus</strong></h3><p>OKRs can be wonderful when done correctly. In Wodtke&#8217;s framework, they enable your organization to radically focus on those one or two objectives you want to achieve. For analytics teams, this means admitting that your work is there to support the company and probably won&#8217;t be directly reflected in a company goal.</p><p>This is not a bad thing. It does not mean your team&#8217;s contributions are unimportant, or that OKRs have nothing to offer your team. The trick is doubling down on your supportive role. As great films need great supporting actors, companies need radical support to achieve radical focus. And there is nothing small about that.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Data Lead! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Gift of Voice]]></title><description><![CDATA[What your team is trying to tell you before they quit]]></description><link>https://blog.thegroundlayer.io/p/the-gift-of-voice</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/the-gift-of-voice</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Sun, 26 Apr 2026 19:29:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!en71!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F942c3331-70b8-4cfc-bcb0-e290cb59694e_830x832.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#8220;I&#8217;m not happy with the direction we are going&#8221;. It was supposed to be our usual 1:1. Suddenly, it took an unexpected turn. As a manager these are probably not the words you wanted to hear, especially from a high performing team member that usually keeps to themselves.</p><p>Part of our role as managers is to foster a harmonious working environment that lets teams thrive. It was not easy realizing that the purported equilibrium I tried to maintain was not there in the first place. After licking my battle wounds, I realized: actually this person is giving me the chance to act before the worst outcome: &#8220;I quit&#8221;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This realization brought me back to one of my favorite political science books: <em>Exit, Voice, and Loyalty</em> by Albert Hirschman. In his work, Hirschman explores different strategies people deploy in the face of a deteriorating product. As the title says, we can either remain using the product despite its lower quality (loyalty), buy another one (exit), or raise this issue to the supplier (voice).</p><p>Hirschman offers a compelling critique of why exit, normally emphasized as a market correcting mechanism, is not the only way people show their discontent. By voicing discontent, people are giving a chance for course correction.</p><p>The parallels in teams and organizations are striking. In the face of deteriorating conditions, members can decide to stay silent, quit and find another job, or raise their voice to enact change.</p><p>This is no different in any team, and as a manager you probably want to avoid exit. Here there are two mechanisms at play, one is within your realm of control and the other one is not. Let&#8217;s start with the latter.</p><p>People&#8217;s ability to exit depends on the exit options. In other words, if the job market is bad (as it currently is) people do not actually have a high chance of exiting. In the long term, you cannot rely on a bad market to keep your organizations together because conditions change quickly. Retention built on the scarcity in the market is just a delayed exit.</p><p>The second mechanism is where you have a real lever. You can encourage voice by lowering its cost. Companies try to do this by institutionalizing processes, like 1:1s, surveys, and feedback loops. But these are only as good as the trust underneath them. What actually lowers the cost of voice is the belief that speaking up won&#8217;t be held against you, and that someone is genuinely listening.</p><p>Voice is a real gift, and it works on two levels. First, it is a testament to the trust the person is placing in you. Second, it provides you with invaluable information on what is not working and what you can do to correct it. The next time someone on your team says &#8216;I&#8217;m not happy with the direction we are going,&#8217; consider yourself lucky.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Ready to change your Ferrari for a Toyota?]]></title><description><![CDATA[Why embracing small data might be the next big thing]]></description><link>https://blog.thegroundlayer.io/p/ready-to-change-your-ferrari-for</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/ready-to-change-your-ferrari-for</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Mon, 06 Apr 2026 19:21:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!en71!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F942c3331-70b8-4cfc-bcb0-e290cb59694e_830x832.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It was the beginning of the 2010s. Big data and all of its applications were all you could hear about. And I, who at that time, was pivoting towards getting a job in the industry couldn&#8217;t have chosen a better time to do so. At least, that was the promise.</p><p>Determined to crack open what big data was all about, I enrolled in the big data coursera track. Through a series of videos and online tutorials, engineers very excitedly went into great detail about big data formats, computational architecture, clusters, nodes and many other words that were foreign to my novice ears. The peak of the course came when we were tasked to write our own MapReduce job in Cloudera. For me it felt like a lot of hard work just to get a simple count.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Then luck struck. Twice. First, I did get a data analyst role. And second, the job did not entail writing MapReduce jobs! However, the big data movement was very much still alive touting its next promise: warehouses. The promise was enticing: forget about managing clusters. Simply concentrate on what you can do best: writing elegant SQL.</p><p>That promise has held up for the most part. I have spent most of my career working with different warehouses; starting with Redshift, followed by a brief stint with BigQuery and currently working with Snowflake. Despite some minor differences, the common thread is that I can simply concentrate on writing SQL while the underlying architectural complexity is hidden away from me.</p><p>Warehouses work well. However, this simplicity comes with a price tag. Sometimes, a big one. A colleague of mine learned it the hard way. A single query to get a monthly count was racking up hundreds of dollars. To limit this potentially unchecked spending, companies have to set up a whole system of guardrails, query optimization and resource monitoring.</p><p>So while warehouses made it technically easy to store and access your data, the real barrier was costs. Big data comes with a big budget. And big budgets are nowhere to be found in startups and mid-size companies.</p><p>Is there another way? In his post <a href="https://motherduck.com/blog/big-data-is-dead/">big data is dead</a>, Jordan Tigani, co-founder of MotherDuck and former founding engineer of Google BigQuery, certainly believes so. He makes two compelling arguments:</p><ul><li><p>You probably don&#8217;t have big data</p></li><li><p>Even in the unlikely case you have big data, most of your queries are accessing only a small fraction of it</p></li></ul><p>That begs the question: when is data big? A simple answer is whenever you cannot process or analyze it on your own laptop. Turns out that according to a <a href="https://www.vldb.org/pvldb/vol17/p3694-saxena.pdf">Redshift fleet study</a> <a href="https://motherduck.com/blog/redshift-files-hunt-for-big-data/">analyzed by Tigani</a>, only around 5% of datasets in Redshift actually have big data. The remaining 95% can probably be analyzed on your own machine.</p><p>Meanwhile, our laptops have quietly become more powerful and their computational capacity has grown at a faster speed than our data. Data for which originally the MapReduce framework was invented can now often be analyzed on your laptop in seconds.</p><p>Even when our data is big, it is generally the case we are not accessing all of it at once. Think about how data is used in your company. With the exception of some deep dive analysis, the most accessed data is usually the most recent. This is the data that powers your dashboards and normally is already pre-aggregated in some kind of daily, monthly or yearly metrics.</p><p>This was also found in the Redshift analysis cited before. Only 0.03% of queries executed by customers were against more than 10TB of data. A whopping 67% were querying less than 1GB worth of data.</p><p>If we don&#8217;t really have big data, has the industry been optimizing for the wrong use case all along? In other words, are we building our whole infrastructure around a Ferrari when probably a reliable Toyota would do the job?</p><p>This is exactly the bet DuckDB and MotherDuck are making. Their promise relies on squeezing the most out of your single machine. Once you remove all the unnecessary architectural complexity, queries are not only faster but also substantially cheaper. If you do not have big data &#8212; and most likely you don&#8217;t &#8212; it is time to reconsider. Are you sure you need the costly Ferrari, or has the time come to switch to a Toyota?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What My Research Methods Professor Taught Me About OKRs]]></title><description><![CDATA[At a certain stage in my life, I was at a crossroads: did I want to be in academia or go into the industry?]]></description><link>https://blog.thegroundlayer.io/p/what-my-research-methods-professor</link><guid isPermaLink="false">https://blog.thegroundlayer.io/p/what-my-research-methods-professor</guid><dc:creator><![CDATA[Jose Coto]]></dc:creator><pubDate>Sun, 22 Mar 2026 14:56:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!en71!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F942c3331-70b8-4cfc-bcb0-e290cb59694e_830x832.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At a certain stage in my life, I was at a crossroads: did I want to be in academia or go into the industry? What at that moment certainly felt like a life-changing decision, after having lived in both worlds, I noticed they are not as far apart as I had originally considered them to be.</p><p>This thought hit me as I was going through different YouTube videos about strategy, OKRs and all the big words that are now an established part of startup parlance. I had a moment of d&#233;j&#224; vu. Wait a minute. I have heard this before.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I was suddenly thrown back into my first research methods classes and this simple yet poignant question my advisor would drill me with: so, Jos&#233;, what is the question you are trying to answer?</p><p>Turns out I was not alone back then. In the industry there are committees, boards and countless meetings trying to nail down what problem their product is actually solving.</p><p>And, again, to quote my advisor: the methods should follow your question and hypothesis and not the other way around. This is no different in the industry. The mission, vision, strategy, OKRs and roadmap should follow your question and hypothesis and not be a replacement for the lack of one.</p><p>As planning for the new quarter starts and you find yourself buried in sticky notes, Miro boards and workshops, trying to translate it all into strategy documents, OKRs and initiatives, connect with your inner advisor and ask yourself: what is the problem we are trying to solve here? Just as in school, answering might be difficult and thought provoking, but in exchange everything that follows will come naturally from it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.thegroundlayer.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jose's Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>