<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <title>Paradigma Digital</title>
  <link>https://www.paradigmadigital.com/blog/</link>
  <atom:link href="https://www.paradigmadigital.com/feed.xml" rel="self" type="application/rss+xml" />
  <description>Big Data, Blockchain, cultura ágil, desarrollo, diseño… Te ofrecemos toda la información que necesitas para estar al día en tecnología.</description>
  <generator>Eleventy - 11ty.dev</generator>
  <language>en-US</language>
  <lastBuildDate>Wed, 23 Sep 2026 06:45:17 GMT</lastBuildDate>
  <image>
    <url>https://www.paradigmadigital.com/assets/img/logo/favicon.png</url>
    <title>Paradigma Digital</title>
    <link>https://www.paradigmadigital.com/blog/</link>
    <width>192</width>
    <height>192</height>
  </image>
  <item>
        <dc:creator>
            <![CDATA[ Sebastián Rodríguez ]]>
        </dc:creator>
        <title>Building Mobile Apps with AI: From Typing to Directing</title>
        <link>https://en.paradigmadigital.com/dev/building-mobile-apps-with-ai-from-typing-to-directing/</link>
        <pubDate>Tue, 22 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/building-mobile-apps-with-ai-from-typing-to-directing/</guid>
        <description>When the agent doesn't deliver what you need, it isn't failing. You just haven't specified enough. The outcome depends entirely on how precisely you've defined the task, not on which model you use. In this first post of our series on building mobile apps with AI, we explain exactly how to do it.
</description>
        <content:encoded>
            <![CDATA[
                <p>When building a mobile app with AI, the temptation is to ask the agent to build the whole thing. And it does build it, but it fails. What decides the outcome isn't which model you use, but how much you've locked down before it writes the first line.</p>
<p>There's a move almost everyone repeats the first time they try building a mobile app with an AI agent: <strong>open the chat, ask it for the entire app in one go, and sit back and wait</strong>. A few seconds later you've got screens, navigation, and something that compiles. It feels like magic.</p>
<p>That feeling lasts right up until <strong>you try to build the second feature</strong> on top of the first one.</p>
<p>Because a model never tells you &quot;I don't know.&quot; <strong>It always hands you something</strong> that looks finished, even when it isn't. And if you haven't marked out the path, that &quot;something&quot; comes from what the model assumes you wanted, not from what you actually wanted. It wanders off, goes its own way, makes its own calls. For an afternoon experiment, that's perfectly fine. For an app headed to production, it's where the problems start.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The problem isn't that it fails — it's that it never fails</h2>
<p>An AI agent always hands you a solution because that's exactly what it's trained to do: <strong>fill the gap with the first thing that lets it deliver something</strong>. And that's the risk: it hands back an answer that looks finished but almost never respects what you've already built, <strong>and it doesn't warn you about what it made up along the way</strong>.</p>
<p>Anyone who's seriously tried this will recognize the example. Throughout this series, we're going to <strong>build a shared-expenses app</strong> — the kind you use to split what a group spends (a dinner, a trip, a shared flat) and figure out who owes who at the end.</p>
<p>So, we start by asking the agent for the add-expense screen, and instead of following the project's architecture, it takes the fast lane. All the logic — UI, API calls, split calculation, parsing, persistence — crammed into a single giant class.</p>
<pre><code class="language-none">// A screen that does EVERYTHING at once:

class AddExpenseActivity : AppCompatActivity() {
    private val db = AppDatabase.get()    // data
    private fun save(amount: Double, payerId: String) {
        lifecycleScope.launch { 

        // business rules stuffed into the UI:

            val members = db.groupDao().members(currentGroupId)
            val share   = amount / members.size   // split
            members.forEach { m -&gt;

             // persistence

                db.balanceDao().add(m.id, share, payerId)                          
}
         // and while it's at it, syncs with the backend right here:

            // direct API call

            val res = api.post(&quot;$BASE_URL/expenses&quot;, body)
            Json.decodeFromString&lt;ExpenseDto&gt;(res) // parsing
            runOnUiThread { showBalance() }        // UI + state
        }
    }
    // ...and below that, 400 more lines drawing the form.
}
</code></pre>
<p>It compiles, it works in the demo, but you've just <strong>broken one of the most expensive rules to break on mobile</strong> (the UI calling the backend directly, with the split baked right into the screen), and the next screen is going to be built on top of it.</p>
<p>If we repeat this on the balances screen, the settle-up screen, and the create-group screen, we'll realize we no longer have an app — <strong>we have a snowball</strong>, where every new piece drags along the mess from the last one, and untangling it costs more than doing it right from the start.</p>
<p>The first time you run into something like this, it takes a while to sink in, because even though it &quot;works,&quot; the solution doesn't hold up. The code is there, it compiles, and the demo goes fine — but the problem was never that one file: it was that <strong>every file after it was going to copy its bad example</strong>.</p>
<p><em>That's the trap of asking and waiting: it doesn't break on day one, it breaks on day 20.</em></p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Defining is the new craft</h2>
<p>Well defined, that same agent gets you moving at a speed that didn't exist two years ago. And the whole difference fits in one word: <strong>defined</strong>.</p>
<p>The more you break the task down and the more tightly you close off what you're asking for, the less room you leave the model to fill in with what you didn't want. Asking for &quot;the add-expense screen&quot; and leaving it at that is not the same as scoping the request so tightly there's no room left for improvisation:</p>
<p><strong>The same screen, tightly scoped:</strong></p>
<ul>
<li><strong>Task</strong>: Composable AddExpenseScreen — UI only</li>
<li>Follows the existing ui/domain/data layer pattern</li>
<li>No business logic or backend calls from the screen</li>
<li>The split is calculated by the SplitExpense use case (already implemented)</li>
<li>Persists to the local DB. Syncing isn't this layer's concern</li>
<li>States: loading / error / data</li>
</ul>
<p><em>One task, one scope, one layer.</em></p>
<p>If you notice, <strong>the second version doesn't leave the agent a single decision it can make up on its own</strong>: the split calculation lives in its own use case, persistence lives in the data layer, syncing lives somewhere else. <strong>The screen just renders</strong>. That same task, directed with this level of precision, usually comes out right on the first try. And when it doesn't, the failure is contained to the UI: there's no need to chase it across five tangled responsibilities.</p>
<p>The concrete difference shows up best when you contrast <strong>how it's asked</strong>:</p>
<pre><code class="language-none">// ✖️ Open-ended - the model decides the architecture for you
&quot;Build me the screen for adding an expense to the group.&quot;

// ✔️ Scoped - you decide and the agent executes
&quot;Composable AddExpenseScreen, UI layer only.
- Takes an AddExpenseUiState and emits events to the ViewModel.
- The split is resolved by the SplitExpense use case — do NOT calculate it here.
- No backend calls from the Composable.
- States to render: loading | error | data.&quot;
</code></pre>
<p>The first version invites the mega-class. <strong>The second one leaves no room to improvise</strong>. That's where the developer's job shifts: the skill isn't just typing code anymore, it's <strong>defining things precisely enough that the code coming out of the agent is yours, not its</strong>.</p>
<p><em>They're not using different models. They're defining things differently.</em></p>
<p>For me, that's the line that separates people who say AI &quot;isn't good for anything serious&quot; from people who actually use it to ship.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Start before the code: let the agent interview you</h2>
<p>The first thing to do when starting an app isn't coding, it's <strong>specifying</strong>. We need to flip the usual script: instead of asking the agent to build, <strong>we ask it to interview us</strong>.</p>
<p>We give it the context of what we want and let it ask questions. It lays out the possible paths, puts the options on the table, tells us which one it recommends, and we make the final call. That interview brings to light the <strong>decisions we didn't even know we had to make</strong> — the same ones that, left unresolved, are exactly what turns into the snowball later on.</p>
<p><strong>Example:</strong></p>
<p><em>- <strong>You</strong>: &quot;I want an app to track shared expenses.&quot;</em><br><br>
<em>- <strong>Agent</strong>: Are groups fixed, or created per event? Is the split even, or by percentage? Do you need offline mode from day one? My recommendation: groups per event, configurable split, no offline for now. Shall we go with that?</em><br><br>
<em>- <strong>You</strong>: Done: groups per event, configurable split, no offline.</em><br></p>
<p>In three questions, the agent has locked down three decisions that, left unasked, it would have assumed on its own — almost always the opposite of what we wanted. That's what specifying is: <strong>surfacing what you'd take for granted before the code takes it for granted on your behalf.</strong></p>
<p>Out of that conversation comes, almost without trying, the <strong>scope of the first version</strong>. The shared-expenses app ended up looking like this:</p>
<p><strong>Shared-expenses app MVP</strong></p>
<ul>
<li>Create a group per event (a dinner, a trip).</li>
<li>Add an expense and record who paid.</li>
<li>Configurable split: even, or by percentage.</li>
<li>Balance screen: who owes who.</li>
<li>Settle a debt and mark it as paid.</li>
</ul>
<p><em>Deliberately out of v1: in-app real payments, multi-currency, and offline mode.</em></p>
<p>Saying out loud what's <em>not</em> included is half the work. Three lines (&quot;no in-app payments, no multi-currency, no offline&quot;) save the agent from the temptation to build a payment gateway nobody asked for, and save you the time of ripping it back out.</p>
<p>You don't need to lock everything down at once, either. <strong>It's enough to close off just enough that the first task has no gaps the model can slip through</strong>. The rest gets defined when its turn comes, one piece at a time.</p>
<p>Defining isn't writing a giant document before you start — it's <strong>not leaving any important decision to chance</strong>. Once those decisions are made, the next step is <strong>writing them down where the agent can check them while it codes</strong> (we'll get to that in the post about context) and breaking the &quot;what&quot; down into closed specs, which is a topic for another article altogether.</p>
<p>Specifying first isn't bureaucracy — it's moving the moment of thinking to before you write the code, when changing your mind costs one sentence instead of a refactor.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Loose to experiment, tight to ship</h2>
<p>It's worth not mixing up two worlds that look alike but aren't. For a <strong>prototype, a quick test, or a weekend of tinkering</strong>, let the agent run loose: it's disposable, and the speed more than makes up for the mess. Nobody's going to maintain that.</p>
<p>For <strong>something headed to production</strong>, open-endedness comes at a cost, with interest. Every shortcut the model invents is technical debt someone — you, three months from now — will have to untangle. The difference between the fun experiment and the maintenance headache isn't in the agent: it's in <strong>how much discipline you put in front of it</strong>.</p>
<p>In the shared-expenses app, that discipline fits into <strong>one rule repeated to the point of boredom</strong>: <strong>the UI never talks to the backend</strong>. The screen asks the domain, the domain decides, the data layer saves locally, and the backend only comes in to sync.</p>
<p>Written down like that, the rule is trivial — and respected on every screen, it's the difference between an app that scales and a snowball.</p>
<pre><code class="language-none">// The layer that decides lives in domain/, outside the screen:
class SplitExpense(private val repo: ExpenseRepository) {
    suspend operator fun invoke(expense: Expense, split: Split) {
        val shares = when (split) {
            is Split.Equal   -&gt; expense.equalShares()
            is Split.Percent -&gt; expense.byPercent(split.weights)
        }
        repo.save(expense, shares)   // to the local DB; sync happens elsewhere
    }
}
</code></pre>
<p>The screen just calls <strong><em>SplitExpense</em></strong> and renders the result. It doesn't know how the split is calculated or where it's stored, and precisely because it doesn't know, the day the split logic changes, only this file gets touched. We'll get into <strong>how to chain these pieces together with the agent</strong> without it skipping layers in another post about development.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Natural language: one more layer, not a threat</h2>
<p>A lot of people still resist this, and almost always for the same reason: <strong>they'd rather see and touch the code with their own hands</strong>. I get it, I come from that world too, but I think that's looking at the shift from the wrong angle.</p>
<p>In the beginning, we programmed the processor directly, in assembly. Then <strong>high-level languages</strong> arrived, and we stopped fighting with registers and memory. Every leap hid the layer below so we could <strong>think at a higher level</strong>. Directing an agent in natural language is the <strong>next rung</strong> on that same ladder: <strong>one more layer of abstraction</strong>, not the disappearance of the craft.</p>
<p>And just like every leap before it, we still need to know what we're building. Whoever coded in C understood what was happening underneath; <strong>whoever directs an agent has to understand the architecture they want</strong>, or the agent will make it up.</p>
<p>In the expenses app, if we're not clear that the split logic lives in the domain layer and not on the screen, the agent decides — and decides badly, not because it's clumsy, but because <strong>nobody told it where each thing belonged</strong>.</p>
<p><em>Abstraction frees you from the keyboard, not from judgment.</em></p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Conclusion</h2>
<p>The invitation is straightforward: try it for real, and do it right. Don't ask for everything at once and expect it to turn out well. <strong>Define it, break it into pieces, let it interview you, and direct it yourself</strong>. Speed shows up on its own once the foundation is locked down.</p>
<p>In the next articles in this series, we'll look at exactly how to lock it down, phase by phase: the <strong>context</strong> the agent reads before touching anything, the <strong>skills</strong> you use to teach it to do things your way, the <strong>specs</strong> that break the work into pieces, and finally, <strong>development</strong>.</p>
<p>If there's one line to take away from all this, let it be this: <strong>with an agent, the bottleneck is no longer writing the code — it's knowing exactly what you want</strong>.</p>
<p>The shared-expenses app we'll be building throughout this series isn't going to fall apart because of the model. It'll hold up based on what we lock down before it writes the first line. And that part, fortunately, is entirely up to us.</p>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Cristina Redondo ]]>
        </dc:creator>
        <title>Problems as Treasures: A Problem Taxonomy for Your Project</title>
        <link>https://en.paradigmadigital.com/organizational-transformation-rev/problems-as-treasures-problem-taxonomy-project/</link>
        <pubDate>Thu, 17 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/organizational-transformation-rev/problems-as-treasures-problem-taxonomy-project/</guid>
        <description>The most common mistake in project management isn't failing to solve problems, but treating them all the same, applying the same urgency and the same approach to an operational incident as to an early sign of something that will become systemic if nobody addresses it before it contaminates the entire ecosystem. Here's a matrix that can help you classify the problem and apply the right solution.
</description>
        <content:encoded>
            <![CDATA[
                <p><em>&quot;Another mess to clean up.&quot;</em> Project management involves an <strong>enormous amount of attention devoted to problems</strong>. In agile we call them impediments and <a href="https://www.paradigmadigital.com/transformacion-organizacional-rev/toma-control-estrategias-gestion-dependencias-activa" target="_blank">dependencies</a>; sometimes we also include <a href="https://www.paradigmadigital.com/dev/gestion-riesgos-entornos-agiles/" target="_blank">risks</a>. In ITIL we distinguish between <strong>incidents and problems</strong>.</p>
<p>The <strong>effect</strong> of <strong>problem management</strong> on projects is an <strong>almost endless chain of decisions</strong> that, at times, drives the business, the technical team, and the management profile that arranges and monitors them as a servant leader to distraction. To handle disagreements and bring some order, we usually turn to a <strong>prioritization matrix</strong> if we're in a sensible, coordinated context. If we're in a different context, we fall back on experience by similarity, and if not, on impulsive decisions based on perceptions, urgencies, or fears.</p>
<p>The problem isn't that problems exist. <strong>The problem is treating them all the same.</strong> Problems aren't challenges, but they can be challenging. Poorly conceptualized challenges (true need, sponsorship, expected outcome, deviations) turn into problems.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Cynefin: understanding the context first</h2>
<p>Almost three decades ago, <strong>Dave Snowden</strong> taught us about <strong>Cynefin and the 5 context domains where problems live</strong>:</p>
<ul>
<li><strong>Clear/Simple</strong>: a stable, obvious, and known cause-effect relationship. Standards exist and no experts are needed.</li>
<li><strong>Complicated</strong>: the cause-effect relationship exists but isn't obvious; you need to analyze it or bring in specialists to find it. More than one correct solution exists once diagnosis is done.</li>
<li><strong>Complex</strong>: the cause-effect relationship can only be understood in hindsight, because the system has many interacting variables that are hard to visualize, with emergent and unpredictable results. Since no established best practices exist, challenges are approached experimentally.</li>
<li><strong>Chaotic</strong>: no cause-effect relationship can be discerned, either before or after, since the environment is in crisis and/or changing too fast. The approach is to first stabilize, then observe, and then try to establish some order toward standardization.</li>
<li><strong>Disorder</strong>: a state in which it isn't clear which domain you're in; there's confusion, and each actor interprets the situation according to their own bias. The goal is to diagnose and classify the situation, moving the problem into one of the four domains above so it can be acted on appropriately.</li>
</ul>
<p>It's an abstract taxonomy that lets us <strong>pinpoint the nature of the challenge</strong>. Before solving, it's worth understanding what type of context we're operating in. There are also frameworks and methodologies that define problem typologies more closely tied to a specific area of work.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">ITIL: incidents and problems are not the same thing</h2>
<p><strong>In ITSM, there's the classic ITIL approach</strong> to problems/incidents from a proactive or reactive standpoint, assessing them with the simple and effective <strong>impact and urgency matrix</strong>.</p>
<p>ITIL reminds us of something basic: putting out the fire and understanding why it started are not the same activity.</p>
<p>Aware that both coexist within a continuous improvement approach, <a href="https://en.paradigmadigital.com/organizational-transformation-rev/itil-5-digital-ecosystems/" target="_blank">ITIL</a> establishes a framework to reduce the probability of impact and places emphasis on avoiding recurrence by learning from experience. To do this, it distinguishes between incidents and problems:</p>
<p><strong>Incident management</strong></p>
<ul>
<li><strong>Objective</strong>: restore the service quickly, &quot;put out the fire,&quot; even by rolling back changes or using workarounds.</li>
<li><strong>Horizon</strong>: short term, focused on operational continuity and user experience.</li>
</ul>
<p><strong>Problem management</strong></p>
<ul>
<li><strong>Objective</strong>: understand why incidents occur and how to prevent them from recurring, through structured root cause analysis.</li>
<li><strong>Horizon</strong>: medium to long term, focused on service stability, reliability, and continuous improvement.</li>
</ul>
<p><strong>In practice, a serious or recurring incident usually triggers the opening of a problem to investigate its causes.</strong> And the findings from problem management usually give rise to change requests to permanently fix the service.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">A matrix for executive problems</h2>
<p>If what we need is an <strong>order of magnitude and logic for executive-level problems</strong>, one that isn't purely tied to technology nor as abstract as Cynefin, I'd like to propose a matrix combining two well-known typologies that you might find inspiring.</p>
<p><strong>I base it on combining Peter Drucker's typology with Art Smalley's:</strong></p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Peter Drucker's generic typology</h3>
<p>Peter Drucker distinguished <strong>four types of problems</strong> that appear in organizations based on how they arise and persist:</p>
<ol>
<li><strong>Truly generic</strong>: cases that are symptoms of a recurring pattern within the organization — today we would call them &quot;systemic.&quot; Drucker explains that most problems are of this nature, and that although symptoms may vary in how they manifest, they are just adaptations of the original. This clears the path considerably if we're able to find the root cause.</li>
<li><strong>Unique</strong>: your organization experiences them only once, but the situation is common in other organizations. They aren't anomalous or rare, and you can seek support by looking at similar situations faced by competitors or partners.</li>
<li><strong>Truly exceptional, truly unique</strong>: singular situations that can't be treated as textbook cases; they usually have complex, multifactorial causes that rarely converge again.</li>
<li><strong>Early manifestations of a new generic problem (Earlys)</strong>: weak signals of a trend that will become recurring if not addressed. Extremely interesting and profitable to tackle before they contaminate the ecosystem.</li>
</ol>
<p>From my experience in Lean, this classification forces you to <a href="https://www.paradigmadigital.com/transformacion-organizacional-rev/kaizen-kaikaku-kakushin-miradas-cambio-lean-management" target="_blank">decide whether to act with improvement responses (Kaizen), design new policies (Kaikaku), or engage in deeper strategic reflection (Kakushin)</a>.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Art Smalley's typology</h3>
<p>Art Smalley also proposes <strong>four types of problems</strong>, but from the angle of how they're approached:</p>
<ol>
<li><strong>Troubleshooting</strong>: a reactive response to &quot;stop the bleeding&quot; and return the situation to the known standard as quickly as possible.</li>
<li><strong>Gap from standard</strong>: using structured problem-solving to eliminate root causes preventing the standard from being met. The measures remain reactive but systematic and planned.</li>
<li><strong>Target state</strong>: a proactive, continuous-improvement approach aimed at reaching a performance level better than the current one, defining a new standard.</li>
<li><strong>Open-ended</strong>: proactive, creative exploration of radical solutions or new models that go well beyond current levels of value.</li>
</ol>
<p>Each type calls for different methods, management cadences, and mindsets. All of them share, as their guiding axis, their relationship to the standard as an ideal.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Crossing the nature of the problem with its method of resolution</h2>
<p>What I apply in projects is a combined matrix. Its power lies in crossing the <strong>nature of the event</strong> (Drucker) with the <strong>resolution methodology</strong> (Smalley). This avoids the <strong>classic mistake of applying &quot;engineering solutions&quot; to &quot;management problems&quot;</strong>, or vice versa.</p>
<p>Drucker helps you understand the nature and recurrence of the problem within the system, while Smalley points you toward the practical resolution approach from Lean.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">How to use this matrix in projects</h3>
<p>This matrix lets you <strong>categorize any deviation</strong> in a project and <strong>select the appropriate resolution &quot;style.&quot;</strong> You can start from the row (Drucker): <em>is this problem generic, unique, exceptional, or an early signal of something that will recur?</em> Then you choose the column (Smalley): <em>should we contain it, tackle a deviation from standard, pursue a target state, or open up a space for innovation?</em></p>
<table>
<thead>
<tr>
<th>Drucker / Smalley</th>
<th>1. Troubleshooting</th>
<th>2. Gap from standard</th>
<th>3. Target state (Kaizen)</th>
<th>4. Innovation (Open-ended)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Generic (Recurring events)</td>
<td>Immediate mitigation of symptoms.</td>
<td>Standardize the process to eliminate the systemic root cause.</td>
<td>Raise the bar on the current standard (e.g., reduce TTM by 20%).</td>
<td>Full redesign of the value stream or architectural change.</td>
</tr>
<tr>
<td>Generic-Specific (One-off event with a common root cause)</td>
<td>Quick patch for the client while the pattern is analyzed.</td>
<td>Adjust the rule that allowed the exception (e.g., QA policy).</td>
<td>Integrate new observability tools.</td>
<td>Assess whether the business or technical model is obsolete.</td>
</tr>
<tr>
<td>Exceptional-Specific (Black Swan)</td>
<td>Pure crisis management. &quot;Put out the fire&quot; with a task force.</td>
<td>Document the exception; usually doesn't require changing the standard.</td>
<td>Create resilience protocols for extreme events.</td>
<td>Pivot or seek solutions radically outside the usual approaches.</td>
</tr>
<tr>
<td>Exceptional-Generic (First warning of a new pattern)</td>
<td>Contain the impact while analyzing whether we're facing a new pattern.</td>
<td>Define the new standard before it becomes a recurring problem.</td>
<td>Plan for the new capability needed for the future.</td>
<td>Invest in R&amp;D to lead the new problem category.</td>
</tr>
</tbody>
</table>
<p>Consciously using this double classification helps <strong>avoid two very common mistakes</strong>: treating strategic crises as simple operational incidents, or, the other way around, using &quot;innovation&quot; when in reality it would be enough to standardize and fix a recurring deviation in the project. Both inappropriate actions are forms of Muda: management waste that should be identified and eliminated.</p>
<p>Problem management is a <strong>cross-functional effort</strong>: it requires participation from development, operations, security, business, and other teams to investigate causes and design effective solutions.<br>
<strong>Once the process for approaching problems is established and understood, problems become the cornerstone of growth and adaptation</strong>: true <a href="https://en.paradigmadigital.com/organizational-transformation-rev/importance-warm-data-change-optimization-processes/" target="_blank">treasures of the organization, levers of competitiveness and learning</a>.</p>
<p>At <a href="https://en.paradigmadigital.com/formula/organizational-transformation/" target="_blank">Rev by Paradigma</a>, thanks to our experience in agility, lean, and digital product design, <a href="https://en.paradigmadigital.com/organizational-transformation-rev/process-optimization-training-roadmap/" target="_blank">we build simple processes</a> for approaching problems in situational or systemic circumstances, which can be surgical or sustained depending on our clients' needs.</p>
<p>Classifying a problem well doesn't automatically solve it, but it keeps you from starting in the wrong place. And in complex projects, that alone is a huge advantage.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">References</h3>
<ul>
<li><a href="https://thecynefin.co/about-us/about-cynefin-framework/" target="_blank">Cynefin Framework</a></li>
<li><a href="https://hbr.org/2007/11/a-leaders-framework-for-decision-making" target="_blank">Snowden &amp; Boone - <em>A Leader's Framework for Decision Making,</em> Harvard Business Review</a></li>
<li>Peter Drucker - <em>The Effective Executive</em></li>
<li><a href="https://www.lean.org/store/book/four-types-of-problems/" target="_blank">Art Smalley - <em>Four Types of Problems</em></a></li>
</ul>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[  ]]>
        </dc:creator>
        <title>RAG Isn&#39;t Dead, It Just Grew Up</title>
        <link>https://en.paradigmadigital.com/dev/rag-is-not-dead-just-grew-up/</link>
        <pubDate>Tue, 15 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/rag-is-not-dead-just-grew-up/</guid>
        <description>Do agents replace RAG? The data says no: aggressive exploration drives up cost without improving accuracy, and using an LLM for retrieval can be 1,431 times more expensive than a specialized embedding model. The agent doesn't replace RAG, it absorbs it as an internal capability. We look at the data in today's post.
</description>
        <content:encoded>
            <![CDATA[
                <p>In 2023 <a href="https://en.paradigmadigital.com/techbiz/retrieval-augmented-generation-corporate-usage/" target="_blank">we talked about RAG</a>. In 2026 <a href="https://www.paradigmadigital.com/dev/podcast-era-agentes-google-io-2026-terremoto-openai-microsoft/" target="_blank">we talk about agents</a>. But in any serious agent, the same old problem when working with information is still alive: <strong>what to retrieve, when, and at what cost</strong>.</p>
<p>This article reviews the scientific literature to <strong>test two hypotheses</strong> that argue for RAG's obsolescence: the redundancy of retrieval given extended context windows (1M+ tokens), and the displacement of this technique by agent-based systems. The data says otherwise on both counts, and it also explains why ignoring them costs you dearly.</p>
<p>If your system still retrieves information the way it did in 2023, this is for you. The question is no longer whether RAG is dead. It's <strong>how much context budget you're wasting without realizing it</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  ">Has RAG really died?</h2>
<p>You've probably seen the same headline on LinkedIn, &quot;X,&quot; or in some technical newsletters: <strong>&quot;RAG is dead.&quot;</strong> It's said with the same conviction as in 2022, when we were promised that prompt engineering would be the profession of the future, or in 2025, when <strong>we were assured that autonomous agents would leave us all jobless</strong>. Like every tech prophecy, there's some truth to it, but also a healthy dose of posturing.</p>
<p>Let's do what we do best: <strong>debunk the myths with data</strong>, not opinions.</p>
<p>In 2023, <strong>RAG (Retrieval-Augmented Generation)</strong> was a simple architecture: a question, an embedding, a fragment search (with luck, a re-ranker), a prompt, and done. It was a series of boxes with arrows, one after another, that got companies excited just by seeing it on a slide. <strong>In 2026 that architecture is history</strong>. Models handle context windows of a million tokens or more, agents grep through repositories, run SQL, call APIs, reformulate a search if the first one doesn't work, and carry working memory across steps. The four-box diagram no longer describes almost any real system.</p>
<p>Hence the controversy of the headline. But my position is different: <strong>RAG has not died</strong>. It has stopped being a closed-off solution to <strong>become a basic piece of engineering</strong>. The fact that it's just one more tool in the system, rather than the whole system, is proof that <strong>the technology has matured</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">From an objective standpoint, what part of RAG really has died</h2>
<p>Before defending RAG, I want to be honest with those who consider it buried, since they have a point. There are pieces of the 2023-era RAG that make no sense in a serious system today. I'm thinking, for example, of <strong>fixed top-k with no justification</strong>, of <strong>512-token chunks</strong> just because, of using a <strong>single embedding as a universal search engine</strong>, or of relying on dense retrieval with no lexical component. That <strong>linear pipeline of five boxes in a row</strong> is, indeed, what has died.</p>
<p>There is a compelling <strong>technical reason</strong> for this shift. More than a failure of power, we've become aware of limits we used to ignore. When generating embeddings, we face an almost impossible balancing act: capturing a text's overall meaning while also distinguishing very fine-grained nuances. This is the so-called &quot;<strong>granularity dilemma</strong>.&quot; Text encoders systematically fail when two passages share the same semantic field but differ in one specific entity or fact.</p>
<p>The interesting part is that model size doesn't solve this on its own. A recent study shows that a model of just <strong>0.1B parameters</strong>, fine-tuned specifically for this task, outperforms 7B models (Xu et al., 2025). The failure isn't one of power, it's one of design. That's why <strong>a single vector search channel never was, and still isn't today, a solid foundation</strong>.</p>
<p>The exact same thing happens with chunking. Splitting into large blocks mixes different entities into the same vector and dilutes the nuance; splitting into tiny fragments gains precision on the entity but loses the context that gives it meaning. That's why the solutions that work in production don't look for an &quot;optimal chunk size,&quot; but instead use schemes like <strong>hierarchical chunking</strong>: index the small fragment, but retrieve the paragraph or document that surrounds it.</p>
<p>Long context has also <strong>genuinely improved</strong>, and I won't dispute that with anyone. There are models today that support windows of one, two, or even ten million tokens, and this obviously shifts the rules a bit as to what's worth retrieving as a unit. Before, you had to chop up a document because it didn't fit whole. Now, in many cases, you can fit the whole document in. That's not marketing, it's a real architectural improvement. But this doesn't justify dumping the entire corpus into a prompt, and this is where the &quot;<strong>infinite context</strong>&quot; narrative starts to collide with the numbers and with reality.</p>
<h3 class="block block-header h--h20-175-500 left  ">Myth 1: &quot;Giant context windows make RAG unnecessary&quot;</h3>
<p>This is the argument that grabs the most headlines: if models already handle windows of one or two million tokens, why bother retrieving anything? Just inject everything. The technical problem is that <strong>a model doesn't pay attention uniformly</strong> across that entire window. This phenomenon is known as <strong>Context Rot (or context degradation)</strong>: the more information we inject, the more noise we introduce, and the worse the model reasons (Liu et al., 2024).</p>
<p>The <strong>RULER benchmark</strong> exposed this mirage back in 2024. At that point, although most models claimed to support windows of 32K tokens or more, <strong>only 50% maintained acceptable performance</strong> under real-world usage conditions (Hsieh et al., 2024).</p>
<p>The result that, in my view, most changes the perspective on this problem is <a href="https://github.com/adobe-research/NoLiMa" target="_blank">NoLiMa</a>. While <strong>RULER</strong> usually lets the model find the answer through mere lexical matching, <strong>NoLiMa</strong> removes that &quot;hint&quot; and forces the model to reason semantically. The results were revealing: of 13 models claiming to support contexts of at least 128K tokens, <strong>11 dropped below 50% of their performance by the time they reached 32K</strong>. Even a benchmark model like GPT-4o went from 99.3% accuracy in short context to 69.7% under long-context conditions (Modarressi et al., 2025)*.</p>
<p>*<em>Given the dizzying pace of new model development, it's essential to verify the specific versions and architectures referenced in Modarressi et al., 2025, before generalizing their results.</em></p>
<p>We should also consider that <strong>almost all of this evidence is measured in English</strong>. When this capability is tested across 26 languages at once, the performance gap between high-resource and low-resource languages triples as the window grows (Kim et al., 2025; Hengle et al., 2026; Wang et al., 2026; Qi et al., 2025).</p>
<p>All of this evidence points in the same direction:</p>
<p><em><strong>Just because a model can afford the cost of reading a million tokens doesn't mean that million tokens is useful attention.</strong></em></p>
<p>That's why I prefer to see retrieval not as a technique competing with long context, but as the <strong>manager of our budget</strong>. Every call to the model is a finite resource that we must divide between instructions, history, memory, and retrieved documents. Retrieval is the function that decides which part of the world deserves to occupy that space. The bigger the window, the more expensive it is to waste it. <strong>Retrieving information precisely is more critical today than ever</strong>.</p>
<h3 class="block block-header h--h20-175-500 left  ">Myth 2: &quot;Agents replace RAG&quot;</h3>
<p>This is, in my view, <strong>the strongest argument from those who consider RAG dead</strong>. Let's examine it closely, though. Most agents decide their next step based on what they just observed, not on a fixed script, and at some point in that loop, the same question almost always comes up: <strong>what do I need to know before continuing?</strong> That question is retrieval, even if it no longer carries that label.</p>
<p><strong>An agent doesn't follow a linear flow</strong>. It must plan, search, evaluate results, decide whether it needs more information, consult tools, and compare before writing a single word. Even when the search strategy becomes multi-level, the operational essence remains <strong>data retrieval</strong>. What has evolved isn't the act of retrieving itself, but the system's orchestrating intelligence to discern which channels to consult and exactly when to execute each strategy.</p>
<p>Current evidence shows that <strong>letting an agent perform exhaustive searches isn't just costly</strong>, it's often <strong>counterproductive</strong>. A recent benchmark, <em>ContextBench</em>, analyzed the behavior of different models (GPT-5, Claude Sonnet 4.5, and Devstral 2) operating as autonomous agents on hundreds of real incidents. The <strong>results dismantle the intuition</strong> that &quot;more searching equals a better answer.&quot;</p>
<p>The analysis is clear: <strong>aggressive exploration</strong>, where the agent runs excessive rounds of search, <strong>drives up token consumption and operational cost</strong>, and, moreover, <strong>doesn't guarantee higher quality</strong> (Li et al., 2026). By contrast, models that adopt a <strong>moderate approach</strong> achieve a <strong>superior balance</strong> and reach <strong>better performance</strong> without needing to saturate the system with redundant queries. The lesson from all this is that aggressive exploration by agents only inflates spend, not accuracy. Reading more doesn't equal retrieving better.</p>
<p>In practice, what we're seeing consolidate in 2026 are <strong>hybrid pipelines</strong> that optimize resources. A successful pattern usually looks like this:</p>
<ol>
<li><strong>Initial retrieval</strong>: combine sparse representations (BM25) with dense embeddings to get a broad set (50-100 candidates).</li>
<li><strong>Re-ranking</strong>: pass that set through a cross-encoder that computes real cross-attention between the query and each fragment.</li>
<li><strong>Selection</strong>: keep only the 5 to 10 most relevant blocks before calling the generator model.</li>
</ol>
<p>This approach is more expensive than a simple embedding, yes, but <strong>infinitely more efficient</strong> than saturating the LLM with a hundred random fragments. As confirmed by the study by Assadi et al. (2026), in semantic search, a good embedding model beats any combination that tries to use an LLM to re-rank results from scratch. Spending the expensive model where it isn't needed not only increases cost; it often doesn't even improve the result.</p>
<p>Another successful pattern, based on an architecture built around a reflective reasoning loop, usually looks like this:</p>
<ol>
<li><strong>Decomposition and planning</strong>: the agent receives the complex query and unfolds a dynamic planning graph to break the problem into sub-tasks, avoiding static sequences.</li>
<li><strong>Intent routing</strong>: it evaluates the type of data required and routes each sub-task to the appropriate specialized retrieval tools (such as vector engines, structured SQL queries, or knowledge graphs).</li>
<li><strong>Execution and retrieval</strong>: it runs queries against the selected channels to extract the necessary empirical evidence.</li>
<li><strong>Self-reflection</strong>: it recursively assesses whether the retrieved evidence is sufficient, accurate, and relevant to resolve the query.</li>
<li><strong>Automatic re-planning</strong>: if the internal relevance or data-sufficiency metric fails, the system triggers automatic re-planning to iterate or search new sources.</li>
<li><strong>Evidential reasoning</strong>: it consolidates and adjusts its strategy in real time, using validated evidence to synthesize the final answer.</li>
</ol>
<p>Obviously, this orchestrating sophistication raises a first-order pragmatic challenge: <strong>accumulated latency and cost per query</strong>. However, delegating every micro-decision of this loop to a frontier LLM is economically unsustainable. Architectures that scale apply a layered approach: they use embedding models and re-rankers (cross-encoders) to filter context efficiently, reserving the heavy LLM only for the final synthesis phase. This specialized filtering drastically reduces noise and operational cost, ensuring that only the highest-quality evidence reaches the reasoning model.</p>
<p>On the other hand, when a query requires connecting related concepts across multiple documents, vectors fail. This is where <strong>knowledge graphs</strong> solve the equation, allowing the model to reason over explicit connections.</p>
<p>These have proven superior to pure vector search (Pan et al., 2024; Chen et al., 2024). In the past, the problem was the cost of building the entire graph. But recent implementations like GraphRAG (Edge et al., 2024) and optimized solutions such as LazyGraphRAG (Edge et al., 2024), HippoRAG (Gutiérrez et al., 2024), or LightRAG (Guo et al., 2025) allow complex semantic relationships to be extracted with reduced indexing costs, with GraphRAG-bench (Xiao et al., 2025) serving as a key reference for evaluating reasoning capability in these environments.</p>
<p>Ultimately, this ecosystem of techniques (from hybrid retrieval to orchestration via agents and knowledge graphs) doesn't offer universal solutions. Success lies in the <strong>modular composition</strong> of these mechanisms according to the complexity and intent of each query.</p>
<p>So the useful debate in 2026 is no longer <em>&quot;RAG or agents?&quot;</em> The right question is: <strong>which retrieval mechanism should each agent use, at what point in its reasoning, and with what budget?</strong> The agent doesn't replace RAG, it absorbs it as an internal capability.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The metric we tend to forget: latency and cost</h2>
<p>In corporate environments, the bottleneck usually isn't the technology, it's <strong>the budget</strong>. Forcing models to process immense contexts by default <strong>wrecks the economic viability</strong> of any product. Precision in filtering information isn't just a technical challenge, it's <strong>financial discipline</strong> so that the cloud bill doesn't eat into the business margin.</p>
<p><strong>A million tokens costs money and time</strong>. Meanwhile, an efficient hybrid search filters data in milliseconds. Forcing the model to process the entire repository before writing the first word drives latency up to several seconds. For a conversational assistant, sending hundreds of thousands of tokens per call isn't just expensive, it's a <strong>terrible user experience</strong>. The goal in production is never to saturate the model with superfluous data, but to deliver, with <strong>great precision</strong>, the few tokens that actually determine the decision.</p>
<p>The providers themselves confirm this by launching features like context caching (Gemini's or Claude's context cache). These tools are a complement to smart retrieval, never a substitute, designed precisely so you don't have to pay for or wait on the same data over and over.</p>
<p>The data backs up this caution. Assadi et al. (2026) show that, although LLMs achieve competitive results, <strong>the cost is disproportionate</strong>. Using a model like Gemini 3.1 Pro for retrieval tasks can be up to 1,431 times more expensive than using a specialized embedding model. Moreover, LLM processing speed is drastically lower. In terms of efficiency, <strong>tokens devoted to &quot;reasoning&quot; account for between 28% and 81% of the total cost</strong>. Often, the model goes back and forth over relevance judgments it had already settled on the first read, inflating the bill without improving the result.</p>
<p>The lesson is clear:</p>
<p><strong>Use embedding models for the bulk of the work and reserve the LLM for the final reasoning that truly needs it.</strong></p>
<p>The question for anyone designing a generative AI system should no longer be &quot;how many tokens does my model support?&quot; but &quot;<strong>what is the optimal context budget for each step of my system?</strong>&quot;</p>
<h2 class="block block-header h--h30-15-400 left  ">So, what do we do with our 2023 RAG?</h2>
<p>It's time to set aside theoretical debates and be pragmatic. If your current system is still anchored in 2023's assumptions, such as static chunking, blind vector search, and a rigid linear flow, it's only natural that the results fall short.</p>
<p>The problem isn't that RAG has died. The problem is that <strong>you're trying to solve today's challenges with an obsolete architecture</strong>. Your pipeline needs to stop being a simple search engine and become a decision-making system.</p>
<p>To modernize it, any production solution must answer these six critical questions:</p>
<ol>
<li><strong>What to retrieve?</strong> Precisely isolate the exact information that resolves the query, going beyond simple similarity.</li>
<li><strong>When to act?</strong> Determine the precise moment for the query so as not to saturate the system with unnecessary searches.</li>
<li><strong>How to search?</strong> Choose the right path (vector, lexical, structured, temporal, hybrid, or agent-assisted) based on the nature of the query.</li>
<li><strong>Who has access?</strong> Guarantee security filters and user permissions before injecting any data into the context.</li>
<li><strong>Is it still current?</strong> Validate the temporal freshness of the information to avoid feeding the model outdated data.</li>
<li><strong>Where does it come from?</strong> Ensure full traceability and exact attribution of sources, a non-negotiable requirement for business decisions.</li>
</ol>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">My hypothesis for 2026/2027</h2>
<p>The term &quot;RAG&quot; has lost the spotlight to the agent narrative, <strong>but information retrieval hasn't disappeared</strong>. It has simply stopped being a standalone component. It no longer needs a name of its own because it is, quite simply, an inherent capability.</p>
<p>Retrieval is the connective tissue of the agent. Whether querying a database, a document, code, or an internal policy, the flow is constant: the agent determines the need, the system validates access, the retriever filters the content, and the model reasons over the selected information.</p>
<p>That's why &quot;has RAG died?&quot; strikes me as the wrong question for 2026. The real unknown we need to solve in every project is more technical and less about appearances: <strong>how much context budget are we wasting?</strong></p>
<p>RAG should no longer be understood as a rigid architecture drawn on a slide, it's a basic function of any generative AI system. The bigger the context windows get, the more vital it becomes to execute this function with precision.</p>
<p>So:</p>
<p><strong><em>What has died isn't RAG. It's your 2023 pipeline.</em></strong></p>
<p>If you found this review useful, share it with anyone still arguing over whether &quot;RAG is dead&quot; instead of discussing how their system should be retrieving.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">References</h3>
<ul>
<li>Assadi, A. E., Muennighoff, N., &amp; Lee, J. (2026). <a href="https://arxiv.org/html/2608.12875v1" target="_blank">The Embedder's Dilemma: LLMs Are Better, but at What Cost?</a>. <em>arXiv preprint arXiv:2608.12875.</em></li>
<li>Chen, Z., Zhang, Y., Fang, Y., Geng, Y., Guo, L., Chen, X., ... &amp; Chen, H. (2024). <a href="https://arxiv.org/abs/2402.05391" target="_blank">Knowledge graphs meet multi-modal learning: A comprehensive survey</a>. <em>arXiv preprint arXiv:2402.05391.</em></li>
<li>Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., ... &amp; Larson, J. (2024). <a href="https://arxiv.org/abs/2404.16130" target="_blank">From local to global: A graph rag approach to query-focused summarization</a>. <em>arXiv preprint arXiv:2404.16130.</em></li>
<li>Edge, J. L. D., Trinh, H., &amp; Larson, J. (2024). <a href="https://www.microsoft.com/en-us/research/blog/lazygraphrag-setting-a-new-standard-for-quality-and-cost/" target="_blank">Lazygraphrag: Setting a new standard for quality and cost</a>. <em>Microsoft Blog.</em></li>
<li>Guo, Z., Xia, L., Yu, Y., Ao, T., &amp; Huang, C. (2025, November). LightRAG: Simple and Fast Retrieval-Augmented Generation. In <em>EMNLP (Findings)</em> (pp. 10746-10761).</li>
<li>Gutiérrez, B. J., Shu, Y., Gu, Y., Yasunaga, M., &amp; Su, Y. (2024). Hipporag: Neurobiologically inspired long-term memory for large language models. <em>Advances in neural information processing systems,</em> 37, 59532-59569.</li>
<li>Hengle, A., Bajpai, P., Dan, S., &amp; Chakraborty, T. (2026, March). Can LLMs reason over extended multilingual contexts? Towards long-context evaluation beyond retrieval over haystacks. In <em>Proceedings of the 19th Conference of the European Chapter of the Association for Computational Linguistics</em> (Volume 1: Long Papers) (pp. 6128-6152).</li>
<li>Hsieh, C. P., Sun, S., Kriman, S., Acharya, S., Rekesh, D., Jia, F., ... &amp; Ginsburg, B. (2024). <a href="https://arxiv.org/abs/2404.06654" target="_blank">RULER: What's the real context size of your long-context language models?</a>. <em>arXiv preprint arXiv:2404.06654</em>.</li>
<li>Kim, Y., Russell, J., Karpinska, M., &amp; Iyyer, M. (2025). <a href="https://arxiv.org/abs/2503.01996" target="_blank">One ruler to measure them all: Benchmarking multilingual long-context language models</a>. <em>arXiv preprint arXiv:2503.01996</em>.</li>
<li>Li, H., Zhu, L., Zhang, B., Feng, R., Wang, J., Pan, Y., ... &amp; Ye, H. (2026). <a href="https://arxiv.org/abs/2602.05892" target="_blank">Contextbench: A benchmark for context retrieval in coding agents</a>. <em>arXiv preprint arXiv:2602.05892</em>.</li>
<li>Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., &amp; Liang, P. (2024). Lost in the middle: How language models use long contexts. <em>Transactions of the association for computational linguistics</em>, 12, 157-173.</li>
<li>Modarressi, A., Deilamsalehy, H., Dernoncourt, F., Bui, T., Rossi, R. A., Yoon, S., &amp; Schütze, H. (2025). <a href="https://arxiv.org/abs/2502.05167" target="_blank">Nolima: Long-context evaluation beyond literal matching</a>. <em>arXiv preprint arXiv:2502.05167</em>.</li>
<li>Pan, S., Luo, L., Wang, Y., Chen, C., Wang, J., &amp; Wu, X. (2024). Unifying large language models and knowledge graphs: A roadmap. <em>IEEE Transactions on Knowledge and Data Engineering,</em> 36(7), 3580-3599.</li>
<li>Qi, J., Fernández, R., &amp; Bisazza, A. (2025, November). On the consistency of multilingual context utilization in retrieval-augmented generation. In <em>Proceedings of the 5th Workshop on Multilingual Representation Learning (MRL 2025)</em> (pp. 199-225)</li>
<li>Su, H., Yen, H., Xia, M., Shi, W., Muennighoff, N., Wang, H. Y., ... &amp; Yu, T. (2025, May). Bright: A realistic and challenging benchmark for reasoning-intensive retrieval. In <em>International Conference on Learning Representations</em> (Vol. 2025, pp. 48941-48991).</li>
<li>Wang, D., Mo, G., Shi, Y., Zhang, C., Zheng, B., Cao, B., ... &amp; Sun, L. (2026, July). All Languages Matter: Understanding and Mitigating Language Bias in Multilingual RAG. In <em>Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)</em> (pp. 7441-7455).</li>
<li>Xiao, Y., Dong, J., Zhou, C., Dong, S., Zhang, Q. W., Yin, D., ... &amp; Huang, X. (2025). <a href="https://arxiv.org/html/2506.02404" target="_blank">Graphrag-bench: Challenging domain-specific reasoning for evaluating graph retrieval-augmented generation</a>. <em>arXiv preprint arXiv:2506.02404</em>.</li>
<li>Xu, L., Su, Z., Yu, M., Li, J., Meng, F., &amp; Zhou, J. (2025). Dense retrievers can fail on simple queries: Revealing the granularity dilemma of embeddings. Passages, 3024, 8.</li>
</ul>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Eider Ogueta ]]>
        </dc:creator>
        <title>Angular Zoneless: The Next Step in the Evolution of Change Detection</title>
        <link>https://en.paradigmadigital.com/dev/angular-zoneless-next-step-evolution-change-detection/</link>
        <pubDate>Fri, 04 Sep 2026 06:30:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/angular-zoneless-next-step-evolution-change-detection/</guid>
        <description>Angular went from checking the entire application every time something asynchronous happened to knowing exactly what had changed thanks to Signals, but it still depended on Zone.js to decide when to trigger that detection. Zoneless closes that loop by removing the need to constantly monitor everything happening in the browser.
</description>
        <content:encoded>
            <![CDATA[
                <p>A while back we published two articles tracing the evolution of change detection in Angular.</p>
<p>First, we understood how Angular was able to &quot;know&quot; when to update the UI thanks to <strong>Zone.js</strong>, the component tree, and change detection strategies. Then we made the leap to <strong>Signals</strong> and saw how Angular began updating only what actually depended on reactive state.</p>
<ul>
<li><a href="https://www.paradigmadigital.com/dev/estrategia-deteccion-cambios-la-magia-de-angular/" target="_blank">Change Detection Strategy: The Magic of Angular</a></li>
<li><a href="https://en.paradigmadigital.com/dev/angular-signals-evolution-reactivity-change-detection/" target="_blank">Angular Signals: The Evolution of Reactivity and Change Detection</a></li>
</ul>
<p>In this third chapter we're going to close the loop. Because if Signals solved <em>what</em> needs to be updated… <strong>Zoneless</strong> completely changes <em>when</em> Angular decides to run change detection.</p>
<p>And yes: <strong>Angular can now run without Zone.js</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  ">From &quot;Angular detects everything&quot; to &quot;Angular detects only what's necessary&quot;</h2>
<p>In the first article we saw that <a href="https://www.paradigmadigital.com/dev/estrategia-deteccion-cambios-la-magia-de-angular/" target="_blank">Angular used Zone.js to intercept asynchronous operations</a>:</p>
<ul>
<li>Clicks</li>
<li>setTimeout</li>
<li>HTTP requests</li>
<li>Promises</li>
<li>Browser events…</li>
</ul>
<p>Every time any of those operations occurred, <strong>Angular triggered a full change detection cycle</strong>. The problem is that Angular didn't actually know whether anything relevant had changed.</p>
<p>It simply assumed:</p>
<pre><code class="language-none">&quot;Something asynchronous happened. Just in case… I'll check the whole application.&quot;
</code></pre>
<p>And that worked really well, but it also meant unnecessary work.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The clock example</h2>
<p>Let's follow exactly the <strong>same example from the previous articles</strong>. We have:</p>
<ul>
<li>A clock that updates every second</li>
<li>A list of users.</li>
</ul>
<pre><code class="language-typescript">@Component({
 selector: 'app-root',
 template: `
   &lt;h2&gt;{{ clock }}&lt;/h2&gt;

   @for (user of users; track user.id) {
     &lt;app-user-row [user]=&quot;user&quot;&gt;&lt;/app-user-row&gt;
   }
 `
})
export class AppComponent {
 clock = '';

 users = USERS;

 ngOnInit() {
   setInterval(() =&gt; {
     this.clock = new Date().toLocaleTimeString();
   }, 1000);
 }
}
</code></pre>
<p>In the first article we saw that:</p>
<ul>
<li>Every second, Angular traversed the entire tree</li>
<li>Recalculated bindings</li>
<li>Executed expressions</li>
<li>Checked every component</li>
</ul>
<p><strong>Even though the users hadn't changed</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">OnPush was the first patch</h2>
<p>Then came <strong>ChangeDetectionStrategy.OnPush</strong>.</p>
<pre><code class="language-typescript">@Component({
 changeDetection: ChangeDetectionStrategy.OnPush
})
</code></pre>
<p>With <strong>OnPush</strong>, Angular stopped checking components &quot;just because,&quot; and only checked them when:</p>
<p>An <strong>@Input</strong> changed</p>
<ul>
<li>An event occurred inside the component</li>
<li>An observable emitted via <strong>async</strong></li>
<li>Or we manually called <strong>markForCheck()</strong><br>
It was much more efficient, but we still depended on <strong>Zone.js</strong> because Angular still needed a global mechanism to say:</li>
</ul>
<pre><code class="language-typescript">&quot;Hey, something asynchronous just happened.&quot;
</code></pre>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Signals changed the rules of the game</h2>
<p>And this is where the big revolution arrived. With <strong>Signals</strong>, Angular no longer needs to &quot;wonder&quot; what changed, <strong>now it knows</strong>.</p>
<pre><code class="language-typescript">clock = signal('');
setInterval(() =&gt; {
 this.clock.set(new Date().toLocaleTimeString());
}, 1000);
</code></pre>
<p>In the template:</p>
<pre><code class="language-html">&lt;h2&gt;{{ clock() }}&lt;/h2&gt;
</code></pre>
<p><strong>Angular automatically registers which parts of the UI depend on each signal</strong>, and when the signal changes:</p>
<ul>
<li>Angular marks only the affected components</li>
<li>It avoids traversing unnecessary branches</li>
<li>It updates only the dependent bindings</li>
</ul>
<p>This already meant a huge performance leap, but there was still an important question left: <strong>if Signals already knows exactly what changes… why do we still need Zone.js?</strong></p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">This is where Zoneless comes in</h2>
<p>The short answer is that <em>we don't need it as much anymore</em>. Angular started introducing support for &quot;zoneless&quot; applications, that is, <strong>applications without Zone.js</strong>, and that completely changes the mental model.</p>
<h3 class="block block-header h--h20-175-500 left  ">What does Zone.js actually do?</h3>
<p>Zone.js <strong>patches browser APIs</strong> to intercept asynchronous tasks:</p>
<ul>
<li>Timers</li>
<li>Events</li>
<li>Promises</li>
<li>XHR</li>
<li>Fetch</li>
<li>etc.</li>
</ul>
<p>Whenever any of those tasks finishes, Angular runs global change detection. The problem is that this comes with <strong>costs</strong>:</p>
<ul>
<li>More unnecessary work</li>
<li>More detection cycles</li>
<li>Worse startup</li>
<li>Harder-to-read stack traces</li>
<li>And more internal complexity</li>
</ul>
<p>In fact, one of the <strong>main goals of Zoneless</strong> is to improve performance, Core Web Vitals, compatibility with modern APIs, and the debugging experience.</p>
<h3 class="block block-header h--h20-175-500 left  ">How does Angular work without Zone.js?</h3>
<p>In zoneless mode, Angular stops &quot;spying&quot; on the entire browser. Instead, it only updates the UI when it receives explicit notifications. For example:</p>
<ul>
<li>A signal changes,</li>
<li>An <strong>AsyncPipe</strong> emits</li>
<li>An Angular event occurs <strong>((click))</strong></li>
<li><strong>markForCheck()</strong> is called</li>
<li>An <strong>@Input</strong> receives a new value</li>
</ul>
<p>In other words: Angular no longer does implicit polling of state. Now the framework itself knows exactly when something relevant has changed, and here lies probably the most important idea of this whole shift: <strong>Angular moves from an implicit reactive model to an explicit one</strong>.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Enabling Zoneless</h3>
<p>Currently, Angular lets you enable it via:</p>
<pre><code class="language-typescript">bootstrapApplication(AppComponent, {
 providers: [
   provideZonelessChangeDetection()
 ]
});
</code></pre>
<p>And removing:</p>
<pre><code class="language-bash">npm uninstall zone.js
</code></pre>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Back to the clock example</h2>
<p>Now, our example changes quite a bit.</p>
<pre><code class="language-bash">@Component({
 selector: 'app-root',
 template: `
   &lt;h2&gt;{{ clock() }}&lt;/h2&gt;
   @for (user of users(); track user.id) {
     &lt;app-user-row [user]=&quot;user&quot;&gt;&lt;/app-user-row&gt;
   }
 `})
export class AppComponent {
 clock = signal('');
 users = signal(USERS);

 ngOnInit() {
   setInterval(() =&gt; {
     this.clock.set(
       new Date().toLocaleTimeString()
     );
   }, 1000);
 }
}
</code></pre>
<p><strong>What happens now every second?</strong></p>
<ul>
<li>Only <strong>clock</strong> changes</li>
<li>Angular marks only that <strong>binding</strong></li>
<li>The user table <strong>doesn't even enter the cycle</strong>.</li>
</ul>
<p>That &quot;check the whole application just in case&quot; no longer exists.</p>
<h2 class="block block-header h--h30-15-400 left  ">So… does Signals replace OnPush?</h2>
<p>Not exactly. Signals and Zoneless greatly improve how Angular schedules change detection, but <strong>OnPush is still important</strong>.<br>
Because Zoneless doesn't change how Angular traverses the component tree; what changes is <strong>when it decides to trigger change detection</strong>.</p>
<p>So:</p>
<ul>
<li><strong>OnPush</strong> still helps limit checks</li>
<li><strong>Signals</strong> still marks specific components</li>
<li><strong>Zoneless</strong> avoids triggering unnecessary global cycles.</li>
</ul>
<p>The three pieces <strong>complement each other</strong>, and in fact, the official documentation itself recommends OnPush as a natural step toward zoneless compatibility.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Something important: Angular still detects events</h2>
<p>There's a very interesting detail here. Even if we remove Zone.js, this still works:</p>
<pre><code class="language-typescript">&lt;button (click)=&quot;increment()&quot;&gt;
 Increment
&lt;/button&gt;&lt;br&gt;
</code></pre>
<pre><code class="language-none">counter++;
</code></pre>
<p>Why? Because events registered through Angular still notify the framework automatically.</p>
<p>But be careful: <strong>this does NOT happen with APIs outside the Angular ecosystem</strong>. For example:</p>
<pre><code class="language-none">element.addEventListener('click', () =&gt; {
 this.counter++;
});
</code></pre>
<p>Here, Angular no longer knows that something changed, and we would need:</p>
<pre><code class="language-none">markForCheck()
</code></pre>
<p>Or use Signals.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What starts to &quot;break&quot; in Zoneless</h2>
<p>This is where the theory gets interesting, because most current Angular applications indirectly depend on <strong>Zone.js's automatic behaviors</strong>.<br>
And when we remove it… certain <strong>surprises</strong> show up. For example, this classic pattern stops working correctly:</p>
<pre><code class="language-typescript">this.userService.users$
 .subscribe(users =&gt; {
   this.users = users;
 });
</code></pre>
<p>If we then display users directly in the template, Angular might not notice the change, because the subscription happens <strong>outside any reactive mechanism</strong> Angular can observe.</p>
<p>The modern solution involves:</p>
<ul>
<li>Using the <strong>async</strong> pipe</li>
<li>Converting <strong>observables to signals</strong></li>
<li>Explicitly calling <strong>markForCheck()</strong>.</li>
</ul>
<p>For example:</p>
<pre><code class="language-typescript">users = toSignal(this.userService.users$);
</code></pre>
<p>Here you can clearly start to see where Angular wants to go: <strong>less implicit magic and more explicit reactivity</strong>.</p>
<p>Another important detail is <strong>Reactive Forms</strong>. Operations like form.patchValue(...) still update the form's internal state… but no longer automatically force change detection.</p>
<h2 class="block block-header h--h30-15-400 left  ">Since which version has Zoneless existed?</h2>
<p>Angular has been evolving this capability over several versions.</p>
<table>
<thead>
<tr>
<th style="text-align:center">Version</th>
<th style="text-align:center">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Angular 17.1</td>
<td style="text-align:center">First experimental internal APIs (ɵprovideZonelessChangeDetection)</td>
</tr>
<tr>
<td style="text-align:center">Angular 18</td>
<td style="text-align:center">Official experimental support via provideExperimentalZonelessChangeDetection()</td>
</tr>
<tr>
<td style="text-align:center">Angular 20.2</td>
<td style="text-align:center">Stable API provideZonelessChangeDetection()</td>
</tr>
<tr>
<td style="text-align:center">Angular 21+</td>
<td style="text-align:center">Zoneless becomes the default behavior</td>
</tr>
</tbody>
</table>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The real paradigm shift</h2>
<p>Angular is leaving behind a &quot;check just in case&quot; model to move to a <strong>model based on explicit reactivity</strong>.</p>
<p>Much more predictable, much more efficient, and quite a bit closer to how <strong>modern frameworks</strong> like Solid or Vue Signals work.</p>
<table>
<thead>
<tr>
<th style="text-align:center">Stage</th>
<th style="text-align:center">What happened</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Classic Angular</td>
<td style="text-align:center">Angular constantly checks everything</td>
</tr>
<tr>
<td style="text-align:center">OnPush</td>
<td style="text-align:center">Angular checks fewer components</td>
</tr>
<tr>
<td style="text-align:center">Signals</td>
<td style="text-align:center">Angular knows exactly what changed</td>
</tr>
<tr>
<td style="text-align:center">Zoneless</td>
<td style="text-align:center">Angular knows exactly when to react</td>
</tr>
</tbody>
</table>
<h2 class="block block-header h--h30-15-400 left  ">Is it ready for production?</h2>
<p>As of today, Zoneless is already part of Angular's official strategy, and the framework is <strong>clearly oriented toward this reactive model</strong>, but that doesn't mean any application can just remove Zone.js tomorrow without further thought. It's worth carefully validating:</p>
<ul>
<li>Third-party libraries</li>
<li>Manual DOM integrations</li>
<li>Legacy code</li>
<li>Reactive forms</li>
<li>SSR</li>
<li>Testing</li>
<li>Patterns based on implicit side effects</li>
</ul>
<p>In fact, Angular strongly emphasizes that the future lies in Signals, the async pipe, OnPush, reactive APIs, and explicit notifications to the framework.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Conclusions</h2>
<p>For years, Angular relied on <strong>Zone.js to detect any possible change</strong> in the application. Then came <strong>OnPush to reduce unnecessary work</strong>. Later, <strong>Signals appeared to enable much more precise reactivity</strong>.</p>
<p>And now <strong>Zoneless finishes closing that evolution by removing the need to constantly monitor everything happening in the browser</strong>.</p>
<p>The combination of Signals, OnPush, and Zoneless lets us build <strong>much more efficient, predictable, and easy-to-reason-about applications</strong>.</p>
<p>But it also requires a much better understanding of <strong>how the framework's reactivity actually works</strong>. Because Angular no longer tries to guess what's happening; now it expects us to be explicit, and that's probably the most important change of all.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">References</h3>
<p><strong>Previous articles in the series</strong></p>
<ul>
<li><a href="https://www.paradigmadigital.com/dev/estrategia-deteccion-cambios-la-magia-de-angular/" target="_blank">Change Detection Strategy: The Magic of Angular</a></li>
<li><a href="https://en.paradigmadigital.com/dev/angular-signals-evolution-reactivity-change-detection/" target="_blank">Angular Signals: The Evolution of Reactivity and Change Detection</a></li>
</ul>
<p><strong>Official Angular documentation</strong></p>
<ul>
<li><a href="https://angular.dev/guide/zoneless" target="_blank">Angular Zoneless Guide</a></li>
<li><a href="https://v18.angular.dev/guide/experimental/zoneless/" target="_blank">Angular v18 Experimental Zoneless Guide</a></li>
<li><a href="https://angular.dev/api/core/provideZonelessChangeDetection" target="_blank">provideZonelessChangeDetection API</a></li>
</ul>
<p><strong>Technical articles and analysis</strong></p>
<ul>
<li><a href="https://dev.to/ricardochl/angular-20-y-el-futuro-sin-zonejs-la-revolucion-zoneless-ha-llegado-a-developer-preview-4k5m" target="_blank">Angular 20 y el futuro sin ZoneJS: la revolución zoneless ha llegado a developer preview</a></li>
<li><a href="https://medium.com/@mr.wahib/zoneless-angular-what-works-what-breaks-and-why-it-matters-ca7b680f817d" target="_blank">Zoneless Angular: What Works, What Breaks, and Why It Matters</a></li>
<li><a href="https://blog.angulartraining.com/what-does-zoneless-angular-mean-0a3a9d2a047d" target="_blank">What Does Zoneless Angular Mean?</a></li>
</ul>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ José Alberto Ruiz Casarrubios ]]>
        </dc:creator>
        <title>Interviewing Thoughtworks&#39; Radar in the Age of AI</title>
        <link>https://en.paradigmadigital.com/techbiz/interviewing-thoughtworks-radar-age-ai/</link>
        <pubDate>Fri, 04 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/techbiz/interviewing-thoughtworks-radar-age-ai/</guid>
        <description>We asked the Thoughtworks Radar about the real state of AI in enterprises. Yes, we asked it. How? By using an advanced RAG built on its last 4 volumes, in interview format. The result is a conversation that goes far beyond the usual trends.
</description>
        <content:encoded>
            <![CDATA[
                <p>One of the reference sources I rely on to get my bearings on technology and the industry is the <strong>Thoughtworks Radar</strong>.</p>
<p>It's a well-known document. Obviously, its content isn't set in stone and it doesn't have the context of the Spanish market as such, but it does provide an <strong>overview of the state of the art and its trend</strong>, since if you follow it across its different volumes, you can see how the concepts it includes evolve.</p>
<p>I believe that at this moment of brutal change and uncertainty in the industry, consulting documents of this type and quality is of vital importance to know what is becoming a proven reality and what should be taken with caution.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The knowledge source: the Thoughtworks Radar</h2>
<p>As I mentioned in the introduction, the <a href="https://www.thoughtworks.com/radar" target="_blank">Thoughtworks Radar</a> is well known. You've probably checked it out more than once, but if not, I encourage you to do so because I find it very interesting, especially in these times of so much change and uncertainty.</p>
<p>Roughly every six months, they publish a volume with what they consider relevant. The volumes are extensive, detailed documents, about 45-50 pages each, organized around <strong>four fundamental pillars</strong>:</p>
<ul>
<li>Techniques</li>
<li>Platforms</li>
<li>Tools</li>
<li>Languages and frameworks</li>
</ul>
<p>For each pillar, a series of &quot;interesting things or items&quot; (<strong>&quot;blips&quot; in their terminology</strong>) are analyzed and classified into four levels:</p>
<ul>
<li><strong>Adopt</strong>: the industry should adopt these items. They are items already consolidated in the sector.</li>
<li><strong>Trial</strong>: worth trying because it's important to understand how to develop these capabilities. Companies should test this technology on projects where the risk can be managed.</li>
<li><strong>Assess</strong>: worth exploring these items with the goal of understanding how they will affect the company.</li>
<li><strong>Hold</strong>: proceed with caution when implementing them.</li>
</ul>
<p><strong>What's really interesting isn't so much which blips are in each block, but the trend</strong>: which blips appear, which ones are &quot;promoted&quot; to trial or adopt, and which ones need to be treated with caution, either because their maturity indicates so or because risks or shortcomings have been detected that need to be taken into account.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The medium for the interview: an advanced RAG</h2>
<p>As could hardly be otherwise these days, <strong>I relied on AI to conduct the interview, but not in the way you might initially think</strong>, using ChatGPT, Gemini, NotebookLM, or similar to analyze the radar and issue conclusions, <strong>but instead building a system that I tried to give as &quot;human&quot; a way of thinking as possible so that this would feel like a real interview</strong>.</p>
<p>The system is based on a <strong>100% serverless architecture on AWS</strong> (Cloudfront, API Gateway, Lambda, Bedrock, Opensearch, DynamoDB, S3), <strong>which can be spun up and torn down via IaC</strong>.</p>
<p>The &quot;core&quot; basically consists of an <strong>advanced RAG with hybrid search</strong> (BM25 + vector embeddings) <strong>over a series of indexed sources</strong> (hierarchical chunking) <strong>in an AWS Bedrock Knowledge Base on Opensearch</strong>.</p>
<p>When a question is asked, the most relevant fragments of the corpus are retrieved and injected into the model's context together with a cumulative summary of the conversation (automatically generated by a lightweight model after each turn and persisted in DynamoDB), thereby maintaining the thread of the interview without relying on the model's native memory.</p>
<p>To try to give the system &quot;a certain human behavior&quot; and make it feel like a real interview, the system prompt is designed so that it acts as a person who works on producing the radar, a member of the Thoughtworks Technology Advisory Board (TAB), who is being interviewed.</p>
<p>For this PoC I decided to set the <strong>knowledge base</strong> within a roughly two-year time range, analyzing the last four volumes:</p>
<ul>
<li>📊 <a href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2024/10/tr_technology_radar_vol_31_en.pdf" target="_blank">Volume 31 (October 2024)</a></li>
<li>📊 <a href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2025/04/tr_technology_radar_vol_32_en.pdf" target="_blank">Volume 32 (April 2025)</a></li>
<li>📊 <a href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2025/11/tr_technology_radar_vol_33_en.pdf" target="_blank">Volume 33 (November 2025)</a></li>
<li>📊 <a href="https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2025/11/tr_technology_radar_vol_33_en.pdf" target="_blank">Volume 34 (April 2026)</a></li>
</ul>
<p>The UI, to which I tried to give a <strong>journalistic editorial style</strong>, allows you to configure both the most important query parameters (model, tokens, retrieved fragments, or even the system prompt) and to explore the radar by ring, quadrant, and edition.</p>
<p>It also allows you to <strong>export the full transcript as a PDF</strong> in a two-column newspaper-style format. At the end of the session, if needed, a second model generates a structured executive report (summary, key themes, trends, and recommendations) based exclusively on what was discussed during the interview.</p>
<article class="block block-image  -inline-block -like-text-width -center lazy-true"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/small/documentos_generados_39ca41e44a.png"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/documentos_generados_39ca41e44a.png 1920w,https://www.paradigmadigital.com/assets/img/resize/big/documentos_generados_39ca41e44a.png 1280w,https://www.paradigmadigital.com/assets/img/resize/medium/documentos_generados_39ca41e44a.png 910w,https://www.paradigmadigital.com/assets/img/resize/small/documentos_generados_39ca41e44a.png 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 75vw"
                  alt="Screenshot of the interview documents, parameter configuration, summary generation, interview PDF generation" title="Generated documents"/></article>
<p>I won't go into much more detail about the project in this article because that's not its purpose (the purpose is the interview itself), and I'll publish a <strong>more technical article soon</strong> with all the details.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Now, the interview</h2>
<p>Now that I've laid out the context in which the interview takes place, let's move on to conducting it and asking the questions. I have to say that, in my opinion, it produced some very significant insights:</p>
<ul>
<li><strong>Hello, let's begin this long-awaited interview. Let's start with the first question. This year, 2026, has been a dizzying one in terms of technology's impact, but from your point of view, how would you describe the evolution of the tech industry over the last few years, up to this current point?</strong></li>
</ul>
<p><em>Good question to kick things off. If I had to sum it up in one sentence: we've gone from enthusiastic experimentation to responsible engineering, but with a lot of noise along the way.</em></p>
<p><em>What we've observed across the last few editions of the Radar is an unprecedented acceleration, but with a recognizable pattern. Every technology cycle follows a similar curve: euphoria, saturation, and then — if the technology has real value — consolidation. With generative AI we've lived through that curve in fast-forward.</em></p>
<p><em>Three or four years ago, the debate was whether LLMs were anything more than a sophisticated toy. Then came the explosion of the ecosystem — RAG, vector databases, guardrails, agent frameworks — which in the 2024 Radar we already described as a &quot;Cambrian explosion.&quot; It was chaotic, but it made sense: the initial simplicity of the text prompt was giving way to real software engineering.</em></p>
<p><em>This is the point we most want to emphasize: <strong>technology matures when it stops being magic and becomes discipline</strong>. And that's exactly what we're seeing now in 2026 with agents, with context engineering, with LLM evaluation patterns.</em></p>
<p><em>But we've also seen what didn't work as expected. <strong>We were initially optimistic about full autonomy for coding agents, and we've had to be honest: the supervised approach is still essential</strong>. Complacency with AI-generated code is a real, documented antipattern, backed by data.</em></p>
<p><em><strong>One of the patterns we keep seeing is that the speed of the tools outpaces the maturity of the practices</strong>. And that has a cost: cognitive debt, AI-accelerated shadow IT, architectures that drift out of control.</em></p>
<p><em>The industry is in an exciting moment, but engineering fundamentals — testing, observability, architectural design — have never been more relevant than they are now.</em></p>
<ul>
<li><strong>I find it very interesting what you said about &quot;engineering fundamentals having never been more relevant than now.&quot; Why are they a key piece now? Haven't they always been?</strong></li>
</ul>
<p><em>Yes, they always have been. But <strong>there's a crucial difference between something being important and its absence being immediately catastrophic.</strong></em></p>
<p><em>Before, if a team had low test coverage or a mediocre architecture, the damage accumulated slowly. There was friction, technical debt, but the system degraded gradually and visibly. Now, <strong>with coding agents generating massive changesets in minutes, that same lack of discipline can destroy a system's coherence within hours. Speed amplifies everything, the good and the bad.</strong></em></p>
<p><em>This is where things get interesting. What we're documenting in the Radar as <strong>codebase cognitive debt</strong> isn't simply traditional technical debt. It's something more subtle and more dangerous: <strong>it's the loss of the collective mental model of how the system works</strong>. When the code is generated by AI and no one reviews it in depth, the team starts operating on a black box that they themselves built without understanding it. The GitClear data is fairly telling on this: more duplicated code, more churn, less refactoring.</em></p>
<p><em>And here's the paradox that worries us most: <strong>coding agents work best on well-structured, well-tested codebases with clean design</strong>. In other words, the practices that some teams were tempted to relax because &quot;the AI will fix it&quot; are exactly the ones that make the AI work well. Good design for humans is also good design for agents.</em></p>
<p><em>That's why in the latest Radar we put things like DORA metrics, context engineering, zero trust, and OpenTelemetry in Adopt. They're not new. They're reminders that without that foundation, the speed AI promises turns into compound debt.</em></p>
<p><em>What has changed isn't the importance of the fundamentals. It's the cost of ignoring them.</em></p>
<ul>
<li><strong>Looking at how things have evolved over the last few years, what points do you consider key for the adoption of AI to be a success today in a company?</strong></li>
</ul>
<p><em>The first thing I'd say is that <strong>the most common failure we see isn't technical. It's organizational.</strong> Companies that are failing with AI don't fail because they chose the wrong model or the wrong framework. They fail because they tried to layer AI on top of a foundation that was already fragile.</em></p>
<p><em>That said, there are several patterns we've documented as critical.</em></p>
<p><em><strong>First, treating context as an engineering asset, not an implementation detail</strong>. Context engineering is in Adopt in the latest Radar precisely because we've seen that organizations that do it well — that design context as a dynamic, managed pipeline — get qualitatively different results. Those that ignore it end up with agents hallucinating or behaving inconsistently.</em></p>
<p><em><strong>Second, invest in feedback signals before scaling</strong>. DORA metrics in Adopt isn't nostalgia. It's a reminder that if you don't measure lead time, deployment frequency, and rework rate, you won't know whether AI is generating real value or just more code. And rework rate specifically is the canary in the coal mine for detecting accumulated cognitive debt.</em></p>
<p><em><strong>Third, govern agents from the start</strong>. Zero trust architecture in Adopt for agents isn't optional. The &quot;lethal trifecta&quot; that Simon Willison describes — private data, untrusted content, external action — describes most useful agents by default. If you don't have least privilege and continuous monitoring from day one, you're building on sand.</em></p>
<p><em><strong>And fourth, and this is perhaps the most counterintuitive part</strong>: the most successful companies are the ones that first invest in cleaning up their codebase and their engineering practices, and only afterward bring in agents. Not the other way around.</em></p>
<p><em>What we repeatedly observe is that AI amplifies whatever already exists. If you have discipline, it amplifies that. If you have chaos, it amplifies that too. And at a speed that leaves no time to react.</em></p>
<ul>
<li><strong>In terms of technologies, over these last few years, which ones have fully settled in and which ones have fallen by the wayside or are fading out?</strong></li>
</ul>
<p><em>This is a question I love because the movement between rings is where you really see whether something has substance or was just noise.</em></p>
<p><em><strong>The ones that have truly settled in:</strong></em></p>
<p><em>OpenTelemetry is perhaps the cleanest example. It moved from Assess to Adopt almost inevitably, because it solved a real problem — observability fragmentation — with the right abstraction. When Datadog, New Relic, and Grafana all adopt the same protocol, you know something has won. That's not hype, that's genuine consolidation.</em></p>
<p><em>RAG — Retrieval-Augmented Generation — reached Adopt in record time. What surprised us wasn't the speed, but that the technique survived the scrutiny of production. It keeps evolving — GraphRAG, Corrective RAG, Self-RAG — but the core pattern held up.</em></p>
<p><em>And in tooling, things like Renovate or Vite: no glamour, no keynote talks, but in Adopt because they simply work and teams don't want to live without them.</em></p>
<p><em><strong>The ones that are fading out or never took off:</strong></em></p>
<p><em>SAFe is still in Hold, and with every edition the language gets harsher. It's not that it isn't used — it's used too much — but we still aren't seeing the results it promises.</em></p>
<p><em>Local coding assistants is an interesting case: they arrived with a lot of expectation for privacy reasons, but we put them in Hold because local models simply don't compete with cloud-based ones in agentic capabilities. Technical reality beat organizational desire.</em></p>
<p><em>And the most telling one: &quot;Replacing pair programming with AI&quot; in Hold. This is almost a statement of principle on our part. Not because AI doesn't help, but because it confuses individual speed with team health. Those are different things.</em></p>
<p><em><strong>The pattern I see</strong>: what settles in solves real friction with durable abstractions. What fades out is usually either a solution looking for a problem, or a local optimization that ignores systemic consequences.</em></p>
<ul>
<li><strong>What do you think are the main risks or antipatterns that have been detected over the last few years and that can do a lot of damage if no action is taken?</strong></li>
</ul>
<p><em>This is perhaps the most important question we can ask ourselves right now, because we're at a point where the speed of adoption clearly outpaces the speed of understanding the consequences.</em></p>
<p><em><strong>The first and most dangerous one: complacency with AI-generated code</strong>. It's not new — we've had it in Hold for several volumes now — but it's getting worse. What used to be a developer reviewing Copilot suggestions is now an agent modifying dozens of files in parallel while the developer supervises at a high level. The risk of automation bias multiplies exponentially. And what you get isn't bad code — it's code that works but that no one fully understands. That leads us directly to the second antipattern.</em></p>
<p><em><strong>Codebase cognitive debt</strong>. We recently introduced this term into Caution, and I think it's one of the most important concepts we've articulated in years. It's not classic technical debt — it's the gap between what the system does and what the team understands it does. With agents generating changes at high speed, that gap silently widens until one day a small change breaks something unexpected, and no one knows why.</em></p>
<p><em><strong>Third: MCP by default</strong>. We explicitly put this in Caution. The pattern we see is: &quot;I have an API, I turn it into an MCP server, done.&quot; Without thinking about the security model, without analyzing toxic flows, without asking whether you really need MCP or whether a CLI script solves the problem just as well. The naive conversion of APIs into MCP is an attack surface that most organizations aren't managing.</em></p>
<p><em><strong>And fourth, one that worries me especially at the organizational level: AI-accelerated shadow IT</strong>. Non-coders building agentic workflows that process sensitive data, with no governance, no audit trail, without IT even knowing. The difference from classic shadow IT is the scale and the speed. What used to take months to become a critical problem now takes weeks.</em></p>
<p><em>The common pattern across all these antipatterns is the same: <strong>AI amplifies speed before the organization has built the necessary control mechanisms</strong>. And when something fails, it fails fast and at scale.</em></p>
<ul>
<li><strong>I find these points very interesting, especially when there's talk of the disappearance of the developer role. And yet, you're detecting many risks associated with automatically generating most of the code without review, increasing technical debt. How does this really affect the developer role? Will this role end up disappearing, or will it become more important than it is now?</strong></li>
</ul>
<p><em>The narrative that &quot;the programmer is going to disappear&quot; is, frankly, one of the most irresponsible ones circulating right now. And I say that with conviction because the data we see in the Radar points in exactly the opposite direction.</em></p>
<p><em>What we're observing is a <strong>transformation of the role, not its extinction</strong>. And that transformation makes it, if anything, more critical and harder to do well.</em></p>
<p><em>Think of it this way: when an agent generates hundreds of lines of code in seconds, who decides whether that solution is architecturally correct? Who catches that the agent solved the problem with thirty nested conditionals instead of applying the Strategy pattern? Who understands the hidden coupling that change introduces? That requires more technical judgment, not less.</em></p>
<p><em>What does disappear — and this is important — is the developer who only knows how to write mechanical code, without understanding design, without understanding systems, without understanding trade-offs. That profile was already declining before AI. What's emerging is a developer who acts more like a <strong>systems engineer and technical director of agents</strong>: someone who knows how to specify intent precisely, who can evaluate output at a high level, who maintains the mental model of the whole system.</em></p>
<p><em>And here's the paradox that concerns us deeply: <strong>AI is lowering the barrier to entry at the same time as it's raising the bar for what it means to do it well</strong>. That creates an enormous gap. You'll have more people generating code, but fewer people capable of understanding what's been generated. And that gap is exactly what feeds the codebase cognitive debt we mentioned earlier.</em></p>
<p><em>**What the Radar consistently reinforces — pair programming, TDD, fitness functions, rigorous code review — aren't relics of the past. They're the mechanisms that let a team maintain collective understanding of the system while the speed of generation skyrockets.</em></p>
<p><em>The developer role doesn't disappear. <strong>It forks</strong>: those who deeply understand systems become exponentially more valuable; those who delegated that understanding to AI become dispensable. AI doesn't eliminate the need for technical judgment. It makes it more expensive when it's missing.</em></p>
<ul>
<li><strong>On another note, you also mentioned &quot;MCP by default,&quot; and I find that very interesting since there was, or still is, a boom around this concept, with MCPs popping up out of nowhere. What real risks does it carry to overuse this concept or use it when it's not really needed?</strong></li>
</ul>
<p><em>The MCP boom is a textbook case of what happens when a technology solves a real problem but the industry overextends it until it becomes a hammer looking for nails.</em></p>
<p><em>MCP has genuine value. When you need structured tool contracts, OAuth authentication boundaries, and governed multi-tenant access, it's the right solution. The problem is that we're seeing teams and vendors use it as a default integration layer, even when a well-designed CLI with decent --help output and structured JSON responses would achieve exactly the same thing without the protocol overhead.</em></p>
<p><em><strong>The first real risk is what we call the &quot;abstraction tax&quot;</strong>. Every protocol layer between an agent and an API loses fidelity. For simple APIs that's tolerable; for complex APIs, those losses accumulate. The agent receives an impoverished version of the original interface, and that translates into degraded behavior or increasingly elaborate prompts to compensate.</em></p>
<p><em><strong>The second risk is a security one, and this is the one that worries us most</strong>. Internal APIs typically expose sensitive data or allow destructive operations. When a human developer consumes them, there's architecture, code reviews, and organizational context that mitigate those risks. When you do a naive API-to-MCP conversion and hand it to an autonomous agent, you remove those safeguards. There's no deterministic way to prevent the agent from misusing those endpoints. And here the lethal trifecta shows up again: private data, untrusted content, external action. Most useful MCP servers meet all three by default.</em></p>
<p><em><strong>The third risk is unnecessary operational complexity</strong>. MCP introduces maintenance, versioning, and governance overhead. If you adopt it without needing it, you're paying that cost without getting the benefit.</em></p>
<p><em>What we recommend is a mandatory question up front: does your system really require protocol-level interoperability? If the answer isn't a clear &quot;yes,&quot; a well-designed CLI or a direct function call is the better option. MCP has its place, but that place isn't &quot;everywhere.&quot;</em></p>
<ul>
<li><strong>I'd also like to talk about the last risk you mentioned, &quot;AI-accelerated shadow IT.&quot; How does this actually affect an organization? What implications does it have in every sense, including costs or security?</strong></li>
</ul>
<p><em>This is one of the risks that worries us most precisely because it doesn't look dangerous until it's already too late.</em></p>
<p><em>What we're observing is a turbocharged version of something that already existed. Spreadsheets that &quot;silently run the business&quot; have been a problem for decades. But now, with tools like Claude Cowork, n8n with AI API integrations, or simply a product manager with access to a coding agent, the jump from &quot;informal automation&quot; to &quot;ungoverned critical system&quot; happens in days, not months.</em></p>
<p><em><strong>The organizational impact is multidimensional.</strong></em></p>
<p><em>On security, the core problem is that these systems are built with no threat modeling, no permissions review, no secrets management. An n8n workflow that connects Slack to a CRM via OpenAI could be exfiltrating customer data without anyone knowing. And here's the lethal trifecta again: private data, untrusted content, external action. That workflow meets all three by default.</em></p>
<p><em>On costs, the problem is invisibility. Finance teams don't see the calls to model APIs piling up on corporate cards or personal cloud accounts. We've seen organizations with dozens of parallel integrations making redundant calls to GPT-4 because no one knew the team next door had already solved the same problem.</em></p>
<p><em>On technical debt and governance, what starts as a throwaway prototype turns into critical infrastructure. No one documents it, no one tests it, and when the original creator leaves, no one knows how it works. It's exactly the Excel-macro pattern, but with the ability to execute actions on external systems.</em></p>
<p><em><strong>What we recommend isn't banning it, but channeling it</strong>. Instrumented internal sandboxes where non-developers can experiment with visibility. A shared catalog of existing workflows to avoid duplication. And clear criteria for determining when a prototype needs to become a production application with real engineering behind it.</em></p>
<p><em>AI democratizes software building. That's genuinely valuable. But democratizing without governing is simply accelerating chaos.</em></p>
<ul>
<li><strong>Thank you so much for all this valuable information you've given us. To wrap up the interview, in a few words, what do you think both industry professionals and companies need to keep in mind in order to survive this tsunami that's already here?</strong></li>
</ul>
<p><em>What we've learned from all these Radar cycles can be condensed into something that might sound paradoxical: the best way to adapt to AI's speed is to invest in what doesn't change.</em></p>
<p><em>Engineering fundamentals — clean code, testing, deliberate design, short feedback loops — aren't nostalgia. They're exactly what allows AI to amplify value instead of amplifying chaos. We've seen it over and over.</em></p>
<p><em>For professionals, the message is clear: don't compete with AI on code-generation speed. Compete on judgment. On the ability to ask the right questions, to spot when an agent is heading down the wrong path, to understand the whole system. That's what AI can't replace yet, and it's what holds the most value right now. Invest in deeply understanding the systems you build, not just in building them faster.</em></p>
<p><em>For companies, the costliest mistake we can see is treating AI as an individual productivity initiative instead of a systemic transformation. If you introduce agents on top of broken processes, undisciplined codebases, teams with no feedback culture, you're simply going to reach disaster faster.</em></p>
<p><em>And there's something I think is critical for both: learning to distinguish between speed and progress. More PRs, more lines of code, more automated workflows aren't progress if the rework rate goes up, if no one understands what's been built, if cognitive debt piles up silently.</em></p>
<p><em>The tsunami is already here, yes. But those who survive won't be the ones who swim fastest. They'll be the ones who know when to swim, when to stop, and when to change direction.</em></p>
<p>If you'd like to have the <a href="https://jaruiz.io/downloads/radar-interview/tech_radar_interview_2026_04_29.pdf" target="_blank">interview content in PDF, you can download it directly</a>.</p>
<figure class="block block-caption  -inline-block -like-text-width -center"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/small/entrevista_tech_radar_en_pdf_b5b2753c33.png"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/entrevista_tech_radar_en_pdf_b5b2753c33.png 1920w,https://www.paradigmadigital.com/assets/img/resize/big/entrevista_tech_radar_en_pdf_b5b2753c33.png 1280w,https://www.paradigmadigital.com/assets/img/resize/medium/entrevista_tech_radar_en_pdf_b5b2753c33.png 910w,https://www.paradigmadigital.com/assets/img/resize/small/entrevista_tech_radar_en_pdf_b5b2753c33.png 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 75vw"
                  alt="Interview in PDF" title="undefined"/><figcaption>Interview in PDF</figcaption></figure>
<p>% text:Conclusions<br>
% level:2<br>
% type:--h30-15-400<br>
% align:left<br>
% endblock</p>
<p>In my opinion, one of the most relevant conclusions is that <strong>engineering fundamentals</strong> (testing, observability, or architectural design) <strong>have never been more critical than now</strong>, not because they are new, but because their absence has immediate, large-scale consequences in an environment where agents can generate new code and massive code changes within minutes.</p>
<p>I like how the interview concludes with a clear message, both for professionals and for organizations, that <strong>the best way to adapt to AI's speed is to invest in what doesn't change</strong>. The key isn't to compete with AI on generation speed, but on judgment, technical criteria, and a deep understanding of systems.</p>
<p>In my opinion, and I believe I share the Radar's view, companies that treat <strong>AI as an individual productivity initiative instead of a systemic transformation</strong> run the risk of reaching <strong>disaster</strong> faster.</p>
<p>I hope you enjoyed the approach I took with this article, and as I mentioned, we'll publish another article with the &quot;making of,&quot; the repository, and the technical details of the RAG used. I'll read you in the comments! 👇</p>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ José Luis Palomino ]]>
        </dc:creator>
        <title>Memory Management and Semantics: The Evolution of Conversational Systems and Natural Language Processing</title>
        <link>https://en.paradigmadigital.com/dev/memory-management-semantics-evolution-conversational-systems-natural-language-processing/</link>
        <pubDate>Thu, 03 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/memory-management-semantics-evolution-conversational-systems-natural-language-processing/</guid>
        <description>After ELIZA, how did we get machines to understand language more like humans do? That's where Word2Vec, RNNs, and LSTMs came into play, striking that delicate balance between semantic representation and memory management to drive the success of conversational systems.
</description>
        <content:encoded>
            <![CDATA[
                <p>In the previous post, <a href="https://en.paradigmadigital.com/dev/do-you-know-eliza-evolution-conversational-systems-natural-language-processing/" target="_blank">we covered some of the most important milestones in conversational systems and NLP</a>, such as the <strong>birth of ELIZA</strong> (1966) and its ability to simulate empathy through syntactic pattern matching.</p>
<p>We also reviewed the <strong>limitations of that approach</strong>, which forced the stochastic transition of the 1980s and 1990s, where statistical models (n-grams and HMMs) started inferring information directly from data. These models quickly ran into data sparsity and the semantic blindness of one-hot encoding.</p>
<p>In this post, we will look at the <strong>introduction of concepts like Word2Vec, Recurrent Neural Networks (RNNs), and Long Short-Term Memory (LSTM) networks</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The Distributed Representation Revolution: Word2Vec</h2>
<p>Traditional systems assigned an <strong>arbitrary index</strong> to each term, creating massive matrices where semantic relationships completely disappeared. This lack of connection prevented software from extracting real value from unstructured data. In 2013, a research team led by Tomas Mikolov introduced Word2Vec.</p>
<p><strong>Word2Vec proposed a model based on shallow neural networks that allows us to represent words in a continuous space</strong>, as dense vectors (usually between 50 and 300 dimensions, instead of tens of thousands). This model improved semantic relationships and word nuances with high precision.</p>
<p>Word2Vec <strong>transformed plain text into dense vectors within a continuous space</strong> and enabled similar concepts to coexist in nearby mathematical regions.</p>
<p>The <strong>Word2Vec architecture</strong> introduced two predictive model variants to compute continuous word representations from large text corpora:</p>
<ul>
<li><strong>Continuous Bag-of-Words (CBOW)</strong>: the neural network predicts the probability of a current target word based on the context window of surrounding words.</li>
<li><strong>Skip-Gram</strong>: operates on the inverse principle of CBOW. It uses the current word to predict surrounding words within a given range or window.</li>
</ul>
<p>Thanks to this approach, it became possible to <strong>capture semantic and syntactic pattern analogies</strong>, such as the famous vector equation: “king – man + woman ≈ queen”.</p>
<p>The model deduced, without external instruction, the vector representing the concept of &quot;royalty&quot; and the vector for &quot;gender,&quot; allowing it to <strong>navigate the lexicon as if it were a map of geographic coordinates</strong>.</p>
<p>All this through simple vector operations and cosine similarity measurements, without resorting to computationally expensive processes.</p>
<p>Its <strong>low computational cost and open-source availability</strong>, published freely for the research community, almost instantly drove the adoption of embeddings across the entire NLP spectrum.</p>
<p>This milestone <strong>paved the way for Deep Learning architectures</strong>, specifically Recurrent Neural Networks (RNNs) and, later, models based on the Transformers architecture (Church, 2017).</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The Arrival of Deep Learning (DL) and Context Management: Recurrent Neural Networks (RNNs)</h2>
<p>Having overcome the challenge of giving meaning to isolated words, the <strong>next big challenge</strong> was <strong>understanding context</strong>. Language is, by nature, a temporal sequence.</p>
<p>Here, <strong>the order of factors does alter (and drastically) the outcome</strong>. That is why a conversational system cannot treat text as simple unordered bags of words; it needs a <strong>dynamic memory</strong> capable of evolving at the same pace as the sentence itself.</p>
<p>DL revolutionized the field of NLP by <strong>enabling the development of much more efficient and powerful models</strong> for managing sequential data. Among the multiple DL architectures, RNNs stand out—they were introduced in the 1980s as an improvement over traditional neural networks.</p>
<p>Unlike traditional networks, where information flows unidirectionally from the input layers to the output layers, <strong>RNN architectures introduced recurrent connections in their hidden neurons</strong>.</p>
<p>This recurrence worked as a <strong>short-term memory</strong> that provided the system with continuous context. In this way, when processing a sequence, RNNs naturally began capturing the temporal dependencies of the text.</p>
<p>However, when implementing deep RNNs in complex tasks like generative chatbots, research teams noticed the <strong>vanishing gradient problem</strong>, a phenomenon that completely sabotaged the system's long-term memory.</p>
<p>During training, via the backpropagation through time algorithm, error calculations require <strong>iteratively multiplying weight matrices</strong>. If those values are less than one, the gradient shrinks exponentially until it vanishes from the equations.</p>
<p>The practical consequence was a <strong>scenario where chatbots forgot the beginning of the sentence by the time they reached the second paragraph of the dialogue</strong>. Traditional RNNs were unable to connect an initial prompt with a final response if the sequence exceeded a certain word limit, ultimately degrading the user experience.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The Long-Term Solution: Long Short-Term Memory (LSTM) Networks (1997)</h2>
<p>To solve the vanishing gradient problem, researchers Sepp Hochreiter and Jürgen Schmidhuber developed <strong>Long Short-Term Memory (LSTM)</strong> networks in 1997, an architecture that would redefine sequential processing.</p>
<p>LSTMs were capable of <strong>preserving relevant information over significantly longer periods of time</strong>. Instead of allowing new data to overwrite previous context, they established a central memory channel protected by <strong>three neural network gates</strong>:</p>
<ol>
<li><strong>Forget gate</strong>: discards obsolete information through filtering that cleans noise from the system. It analyzes the context of the current word and the previous state to return a value between zero and one.</li>
<li><strong>Input gate</strong>: selects new data worthy of being incorporated into long-term memory, preventing storage space from being saturated with irrelevant terms.</li>
<li><strong>Output gate</strong>: determines what portion of the accumulated context should be passed on to the next sequential step, regulating the immediate response inherited by the system.</li>
</ol>
<p>The integration of these structures helped <strong>mitigate the vanishing gradient problem almost entirely</strong>. This allowed for more coherent conversational modeling, where an artificial agent could remember a user's name or intent across multiple dialogue turns.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Conclusions</h2>
<p>In this post, we have analyzed <strong>how the success of conversational systems depended on striking a delicate balance between semantic representation and memory management</strong>.</p>
<p>While Word2Vec transformed word meaning into accessible coordinates, RNN and LSTM architectures enabled machines to capture the sequential and temporal nature of human language.</p>
<p>However, the <strong>quest for an even deeper and more scalable understanding did not stop there</strong>.</p>
<p>In the next post, we will take the big leap into the modern AI era, where we will analyze the arrival of Seq2Seq models, the birth of attention mechanisms, and the Transformers architecture.</p>
<p>See you in the next installment!</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">References</h2>
<ul>
<li><a href="https://www.bioinf.jku.at/publications/older/2604.pdf" target="_blank">LSTM</a></li>
<li><a href="https://arxiv.org/pdf/1808.03314" target="_blank">Fundamentals of Recurrent Neural Network (RNN) and Long Short-Term Memory (LSTM) Network</a></li>
</ul>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Santiago López ]]>
        </dc:creator>
        <title>Beyond Performance: Framework and Key Layers to Implement Green QA</title>
        <link>https://en.paradigmadigital.com/dev/beyond-performance-framework-and-key-layers-to-implement-green-qa/</link>
        <pubDate>Tue, 01 Sep 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/beyond-performance-framework-and-key-layers-to-implement-green-qa/</guid>
        <description>We unpack the Green QA framework, its deployment layers, and the technical metrics needed to audit software power consumption.
</description>
        <content:encoded>
            <![CDATA[
                <p>Just making sure software works isn't the end game for QA teams anymore—<strong>the new engineering frontier is tracking our technical footprint in watts and carbon emissions</strong>.</p>
<p>With regulations like the CSRD kicking in and the push for ESG compliance mounting, <strong>sustainability has shifted from a corporate talking point to a hard architectural constraint and testing requirement</strong>.</p>
<p>In this roundup, <strong>we’re unpacking Green QA</strong>, analyzing the five layers of its deployment framework, and breaking down the core KPIs needed to spot energy inefficiencies across your cloud infrastructure.</p>
<p>We’ll also share actionable strategies to transition toward a contextual testing model, completely stripping out wasted compute cycles from your CI/CD pipelines.</p>
<p>Let’s get into it. 👇</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/what-is-green-qa-quality-that-breathes/"target="_blank">
        <p class="title">
            What Is Green QA? Quality That Breathes
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/que_es_green_qa_calidad_que_respira_960a546264.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/que_es_green_qa_calidad_que_respira_960a546264.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_green_qa_calidad_que_respira_960a546264.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_green_qa_calidad_que_respira_960a546264.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_green_qa_calidad_que_respira_960a546264.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="What Is Green QA? Quality That Breathes" title="undefined"/></div><p class="description">Green Quality Assurance (Green QA) redefines testing to curb power consumption and the software&#39;s carbon footprint without sacrificing test rigor. This framework ties quality engineering directly to ESG criteria and the EU’s CSRD mandate by measuring raw technical impact in watts and carbon emissions. Operationally, it drives teams to streamline test automation suites, eliminate bloated API overhead, and audit cloud infrastructure—making it a critical discipline for aligning modern software development with sustainability targets.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/green-qa-framework-quality-breaths/"target="_blank">
        <p class="title">
            The Green QA Framework: Quality that Breathes
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/framework_green_qa_calidad_que_respira_985b016da2.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/framework_green_qa_calidad_que_respira_985b016da2.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/framework_green_qa_calidad_que_respira_985b016da2.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/framework_green_qa_calidad_que_respira_985b016da2.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/framework_green_qa_calidad_que_respira_985b016da2.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="The Green QA Framework: Quality that Breathes" title="undefined"/></div><p class="description">Adopting Green QA requires a clear, structured methodology. In this post, we unpack the five core pillars of the framework—governance, processes, data, technology, and continuous improvement—while introducing a TMMi-inspired maturity model. This approach establishes a shared-responsibility model across dev and compliance teams, leveraging specialized tooling like Scaphandre for power metering and dedicated SonarQube plugins for static code analysis. Ultimately, it serves as a practical playbook for automating carbon tracking directly inside your CI/CD pipelines.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/green-qa-metrics-quality-breaths/"target="_blank">
        <p class="title">
            Green QA Metrics: Quality That Breathes
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/metricas_green_qa_calidad_respira_f932bbdd0b.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/metricas_green_qa_calidad_respira_f932bbdd0b.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/metricas_green_qa_calidad_respira_f932bbdd0b.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/metricas_green_qa_calidad_respira_f932bbdd0b.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/metricas_green_qa_calidad_respira_f932bbdd0b.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Green QA Metrics: Quality That Breathes" title="undefined"/></div><p class="description">This post wraps up our Green QA series, zeroing in on how to leverage KPIs and OKRs to root out energy drains and digital waste. We’ve bucketed these metrics into four core areas: technical efficiency (energy intensity and compute cycles), environmental impact (carbon footprint per release), ESG compliance, and operational optimization (purging zombie tests and redundant datasets). Finally, we break down the mechanics of auditing this data under frameworks like CSRD, the GHG Protocol, and ISO 21031, ensuring high-level compliance metrics map directly to verifiable technical telemetry.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Nacho Badenes ]]>
        </dc:creator>
        <title>Purpose-Driven Technology Platforms: 8 Decisions That Turn Sustainability into a Competitive Advantage</title>
        <link>https://en.paradigmadigital.com/techbiz/purpose-driven-technology-platforms-8-decisions-sustainability-competitive-advantages/</link>
        <pubDate>Tue, 25 Aug 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/techbiz/purpose-driven-technology-platforms-8-decisions-sustainability-competitive-advantages/</guid>
        <description>Would you still make the same technology decisions if environmental, social, and governance criteria were a starting requirement? Organizations that continue to treat sustainability as a separate layer are making technology decisions that are already obsolete from day one. In this series, we explain why.
</description>
        <content:encoded>
            <![CDATA[
                <p>For years, sustainability and technology have operated on parallel tracks within organizations. One was treated as a corporate commitment, the other as a business enabler. But that paradigm has expired. In this three-part series, we explored a theory that an increasing number of companies are turning into reality: <strong>ESG criteria should not be layered on top of a technology architecture—they should be embedded into its design from the very beginning</strong>.</p>
<p>The starting point is an uncomfortable question: if tomorrow you were given complete freedom to redesign your platform with environmental, social, and governance requirements as a fundamental condition, <strong>would you still make the same decisions you make today?</strong> From there, we built a map of eight key technology decisions where this integration is both possible and necessary.</p>
<p>The conclusion? <strong>Choosing technology means choosing the future.</strong> Purpose-driven platforms are not more expensive or slower; <strong>they are more competitive</strong>, and the organizations that understand this first will gain an advantage that is difficult to replicate.</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/techbiz/purpose-driven-technology-platforms-integrating-esg-criteria-design-stage/">
        <p class="title">
            Purpose-Driven Technology Platforms: Embedding ESG Criteria from the Start
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_integrando_criterios_esg_desde_cero_e31c1bbc21.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_integrando_criterios_esg_desde_cero_e31c1bbc21.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_integrando_criterios_esg_desde_cero_e31c1bbc21.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_integrando_criterios_esg_desde_cero_e31c1bbc21.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_integrando_criterios_esg_desde_cero_e31c1bbc21.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Purpose-Driven Technology Platforms: Embedding ESG Criteria from the Start" title="undefined"/></div><p class="description">Would you make the same technology decisions if ESG were a design requirement rather than an afterthought? This question kicks off the series. We explain why environmental, social, and governance criteria have evolved from a strategic complement into a core business concern, and we introduce the map of eight key technology decisions for building truly purpose-driven platforms.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/techbiz/purpose-driven-technology-platforms-aligning-technology-business-sustainability/">
        <p class="title">
            Purpose-Driven Technology Platforms: Aligning Technology, Business, and Sustainability
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_alineando_tecnologia_negocio_sostenibilidad_1e91f2304f.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_alineando_tecnologia_negocio_sostenibilidad_1e91f2304f.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_alineando_tecnologia_negocio_sostenibilidad_1e91f2304f.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_alineando_tecnologia_negocio_sostenibilidad_1e91f2304f.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_alineando_tecnologia_negocio_sostenibilidad_1e91f2304f.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Purpose-Driven Technology Platforms: Aligning Technology, Business, and Sustainability" title="undefined"/></div><p class="description">We take a deeper look at the first four pillars of the framework: sustainable cloud architecture, responsible AI, inclusive design, and interoperable platforms. Each decision has a direct impact on the three ESG dimensions and, far from being a cost, generates tangible competitive advantages: reduced carbon footprint, greater regulatory trust, broader market reach, and the elimination of silos that hinder innovation.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/techbiz/purpose-driven-technology-platforms-governance-security-digital-resilience/">
        <p class="title">
            Purpose-Driven Technology Platforms: Governance, Security, and Digital Resilience
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_gestiona_protege_arquitectura_57dc5f77dc.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_gestiona_protege_arquitectura_57dc5f77dc.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_gestiona_protege_arquitectura_57dc5f77dc.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_gestiona_protege_arquitectura_57dc5f77dc.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/plataformas_tecnologicas_proposito_gestiona_protege_arquitectura_57dc5f77dc.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Purpose-Driven Technology Platforms: Governance, Security, and Digital Resilience" title="undefined"/></div><p class="description">We complete the framework with the four pillars that ensure the integrity and continuity of the digital ecosystem: data governance and traceability, cybersecurity and resilience, ESG integration across the supply chain, and software lifecycle optimization. Because a purpose-driven platform is not only built responsibly—it is also managed and protected with the same level of awareness.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ 5 authors ]]>
        </dc:creator>
        <title>Deconstructing Corporate Agility: From Strategy to Day-to-Day Reality</title>
        <link>https://en.paradigmadigital.com/organizational-transformation-rev/deconstructing-corporate-agility-from-strategy-to-day-to-day-reality/</link>
        <pubDate>Tue, 18 Aug 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/organizational-transformation-rev/deconstructing-corporate-agility-from-strategy-to-day-to-day-reality/</guid>
        <description>We break down systemic barriers, organizational debt, and the true value of Sprint Zero to bridge the gap between strategy and real-world execution.
</description>
        <content:encoded>
            <![CDATA[
                <p>Let’s be real: <strong>no matter how much AI you throw at a company, technology won’t magically fix a broken organization</strong>. In fact, slapping AI on top of inefficient processes is like dropping a racing engine into a car with no brakes: it just gets you to the crash faster.</p>
<p>True agility isn't about hoarding the latest tools; it’s about building a system where people can thrive and value flows freely without getting choked by corporate silos.</p>
<p>In this roundup, <strong>we’re skipping the abstract fluff and diving into the core pillars of transformation and engineering culture</strong>:</p>
<ul>
<li><strong>Organizational debt</strong>: How to spot and clear out the internal friction that burns your team out way faster than technical debt.</li>
<li><strong>Creative leadership</strong>: Why AI can handle execution but only humans can provide direction, and how to kill the micromanagement habits smothering your team's innovation.</li>
<li><strong>Real-world execution</strong>: The three invisible barriers that cause your best strategic roadmaps to fall apart the moment they hit day-to-day reality.</li>
<li><strong>The &quot;Sprint Zero&quot;</strong>: A strong defense of why slowing down to think up front saves you months of hotfixes and fire drills down the line.</li>
</ul>
<p>Let’s get into it. 👇</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/ai-not-solve-organizational-problems-not-clear-why-transformation/"target="_blank">
        <p class="title">
            AI will not solve your organizational problems if you’re not clear about the “why” behind the transformation
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/ia_no_resolvera_problemas_organizativos_para_que_transformacion_ff71e7bd4b.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/ia_no_resolvera_problemas_organizativos_para_que_transformacion_ff71e7bd4b.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/ia_no_resolvera_problemas_organizativos_para_que_transformacion_ff71e7bd4b.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/ia_no_resolvera_problemas_organizativos_para_que_transformacion_ff71e7bd4b.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/ia_no_resolvera_problemas_organizativos_para_que_transformacion_ff71e7bd4b.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="AI will not solve your organizational problems if you’re not clear about the “why” behind the transformation" title="undefined"/></div><p class="description">AI won’t fix broken organizational systems—it just acts as a mirror that amplifies them. Slapping AI on top of data silos, misaligned goals, and a lack of strategic focus won’t heal your workflows; it just accelerates your bureaucratic drag. While AI is an incredible force multiplier, it requires an architecture and a culture that are actually primed to leverage it. If your foundation is broken, all you&#39;re doing is automating inefficiency.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/leadership-creativity-two-sides-same-coin-digital-age/"target="_blank">
        <p class="title">
            Leadership and Creativity: Two Sides of the Same Coin in the Digital Age
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/liderazgo_creatividad_dos_caras_misma_moneda_2f7087f57a.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/liderazgo_creatividad_dos_caras_misma_moneda_2f7087f57a.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/liderazgo_creatividad_dos_caras_misma_moneda_2f7087f57a.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/liderazgo_creatividad_dos_caras_misma_moneda_2f7087f57a.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/liderazgo_creatividad_dos_caras_misma_moneda_2f7087f57a.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Leadership and Creativity: Two Sides of the Same Coin in the Digital Age" title="undefined"/></div><p class="description">Creative leadership proves that innovation relies on stripping away operational friction and limiting habits—like micromanaging ideas or resting on past laurels. This post breaks down an iterative, four-pillar loop: stoking intrinsic motivation, framing problems with catalytic questions, leading with ethical self-awareness, and rallying teams behind a shared vision. In the AI era, tech handles the execution, but only humans provide the purpose and direction.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/why-srategy-breaks-down-when-it-reaches-operations/"target="_blank">
        <p class="title">
            3 Systemic Barriers No Spreadsheet Can Detect and How to Overcome Them
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/por_que_estrategia_rompe_bajar_operativa_tres_barreras_sistemicas_como_superar_185d93f7a3.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/por_que_estrategia_rompe_bajar_operativa_tres_barreras_sistemicas_como_superar_185d93f7a3.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/por_que_estrategia_rompe_bajar_operativa_tres_barreras_sistemicas_como_superar_185d93f7a3.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/por_que_estrategia_rompe_bajar_operativa_tres_barreras_sistemicas_como_superar_185d93f7a3.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/por_que_estrategia_rompe_bajar_operativa_tres_barreras_sistemicas_como_superar_185d93f7a3.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="3 Systemic Barriers No Spreadsheet Can Detect and How to Overcome Them" title="undefined"/></div><p class="description">When strategic roadmaps fall short, it’s rarely due to a lack of vision—it’s systemic blindness. We break down the three invisible dimensions that derail execution on the ground: the cognitive barrier (the operational breakdown driven by uncertainty and a lack of psychological safety), the structural barrier (the trap of local optimization fueled by siloed incentives), and the flow barrier (value languishing in invisible queues). Overcoming this requires shifting away from old-school command-and-control toward intentional system architecture, leveraging Value Stream Management (VSM) and shared Key Behavior Indicators (KBIs).</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/what-organizational-debt-why-company-need-manage-today/"target="_blank">
        <p class="title">
            What is Organizational Debt and Why Does Your Company Need to Manage it Today?
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/que_es_deuda_organizacional_por_que_empresa_necesita_gestionarla_hoy_43cf66e765.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/que_es_deuda_organizacional_por_que_empresa_necesita_gestionarla_hoy_43cf66e765.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_deuda_organizacional_por_que_empresa_necesita_gestionarla_hoy_43cf66e765.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_deuda_organizacional_por_que_empresa_necesita_gestionarla_hoy_43cf66e765.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/que_es_deuda_organizacional_por_que_empresa_necesita_gestionarla_hoy_43cf66e765.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="What is Organizational Debt and Why Does Your Company Need to Manage it Today?" title="undefined"/></div><p class="description">Much like tracking tech debt in a codebase, enterprises accumulate a silent counterpart: organizational debt. Legacy processes, siloed teams, and blurry ownership constantly stifle initiative. The fix? Mitigating this structural drag by leveraging the exact same engineering patterns and Lean principles used in software development. We’ll break down how to surface organizational debt in a collaborative backlog, prioritize items by business ROI, execute pragmatic, iterative playbooks, and bake in dedicated, ongoing capacity for internal refactoring.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/what-should-be-considered-before-first-sprint/"target="_blank">
        <p class="title">
            What Should Be Considered Before theFirst Sprint?
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/que_tener_en_cuenta_antes_primer_sprint_bf611e19a6.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/que_tener_en_cuenta_antes_primer_sprint_bf611e19a6.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/que_tener_en_cuenta_antes_primer_sprint_bf611e19a6.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/que_tener_en_cuenta_antes_primer_sprint_bf611e19a6.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/que_tener_en_cuenta_antes_primer_sprint_bf611e19a6.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="What Should Be Considered Before theFirst Sprint?" title="undefined"/></div><p class="description">Even though Scrum purists refuse to recognize &quot;Sprint Zero,&quot; engineering reality proves that diving headfirst into cranking out code in Sprint 1 without laying the groundwork is a recipe for disaster. In this post, we break down why a dedicated discovery phase is critical to align expectations, flag risks, establish team working agreements, and shape the initial backlog alongside the client. Front-loading this mitigation is essential for building team trust, crafting an adaptive roadmap, and doing just enough up-front thinking so you don&#39;t have to pay a massive premium down the line.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Alberto Vara Montero y Vanessa Davo Parreño ]]>
        </dc:creator>
        <title>Web Accessibility: 3 Perspectives That Go Beyond Colour Contrast</title>
        <link>https://en.paradigmadigital.com/dev/web-accessibility-three-perspectives-go-beyond-colour-contrast/</link>
        <pubDate>Tue, 11 Aug 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/web-accessibility-three-perspectives-go-beyond-colour-contrast/</guid>
        <description>Web accessibility is not limited to colour contrast or alternative text for images. Accessibility also includes technical decisions such as touch target sizes, the way WCAG 3.0 will reshape accessibility standards in the coming years, and how content creators write for the web. Together, these decisions determine whether a digital product works for everyone or only for a subset of users.
</description>
        <content:encoded>
            <![CDATA[
                <p>When we think about <strong>web accessibility</strong>, we tend to reduce it to a handful of well-known criteria: colour contrast, alternative text for images, and keyboard navigation. But real accessibility <strong>goes much further than that</strong>, and in our recent posts we wanted to explore three perspectives that are often left out of the conversation.</p>
<p>We discuss <strong>technical decisions</strong> that may seem minor but have a huge impact on users with motor impairments or those interacting through touchscreens, as well as <strong>where the international accessibility standard is heading</strong> and <strong>what that evolution means for the people building digital products</strong>.</p>
<p>There is also something that is frequently overlooked: <strong>accessibility is also the responsibility of the people who write content</strong>. Headings, links, emojis, and images are all editorial decisions that can make a significant difference for many users while improving the experience for everyone.</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/target-size-overlooked-aspect-accesibility/">
        <p class="title">
            Target Size: The Great Overlooked Accessibility Criterion
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/target_size_gran_ignorado_accesibilidad_9eeff3d7c1.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/target_size_gran_ignorado_accesibilidad_9eeff3d7c1.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/target_size_gran_ignorado_accesibilidad_9eeff3d7c1.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/target_size_gran_ignorado_accesibilidad_9eeff3d7c1.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/target_size_gran_ignorado_accesibilidad_9eeff3d7c1.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Target Size: The Great Overlooked Accessibility Criterion" title="undefined"/></div><p class="description">A 16x16 pixel icon may seem like a minor detail, but for someone with motor impairments or using a touchscreen, it can become a real barrier. In this post, we explore the WCAG Target Size criterion, the minimum sizes required for AA and AAA compliance levels, how to meet those requirements using padding without altering the visual design, and a browser extension specifically created to analyze these elements directly on any webpage.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/wcag-3-0-how-changing-way-understand-web-accessibility/">
        <p class="title">
            WCAG 3.0: How the Way We Understand Web Accessibility Is Changing
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/wcag_3_0_como_esta_cambiando_forma_entender_accesibilidad_web_89547c4571.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/wcag_3_0_como_esta_cambiando_forma_entender_accesibilidad_web_89547c4571.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/wcag_3_0_como_esta_cambiando_forma_entender_accesibilidad_web_89547c4571.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/wcag_3_0_como_esta_cambiando_forma_entender_accesibilidad_web_89547c4571.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/wcag_3_0_como_esta_cambiando_forma_entender_accesibilidad_web_89547c4571.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="WCAG 3.0: How the Way We Understand Web Accessibility Is Changing" title="undefined"/></div><p class="description">WCAG 3.0 is still a working draft, but it already reveals a profound shift in how accessibility will be evaluated. This post examines the most relevant changes: the new Bronze, Silver, and Gold conformance model, the concept of Functional Performance Statements that describe usage limitations rather than specific disabilities, and the transition from a binary compliance model to one focused on real user experience.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/write-better-everyone-guide-accessible-web-content-writing/">
        <p class="title">
            Write Better for Everyone: A Web Content Accessibility Guide
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/escribe_mejor_todo_mundo_guia_accesibildad_redaccion_contenidos_web_62c0f6158a.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/escribe_mejor_todo_mundo_guia_accesibildad_redaccion_contenidos_web_62c0f6158a.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/escribe_mejor_todo_mundo_guia_accesibildad_redaccion_contenidos_web_62c0f6158a.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/escribe_mejor_todo_mundo_guia_accesibildad_redaccion_contenidos_web_62c0f6158a.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/escribe_mejor_todo_mundo_guia_accesibildad_redaccion_contenidos_web_62c0f6158a.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Write Better for Everyone: A Web Content Accessibility Guide" title="undefined"/></div><p class="description">Accessibility does not start and end with code. Content creators also have a responsibility. This post walks through five editorial best practices: structuring content with hierarchical headings, writing alternative text that conveys meaning rather than simply describing an image, using links that make sense on their own, moderating the use of emojis that screen readers interpret literally, and avoiding visual content that may trigger photosensitive seizures.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ David García Luna ]]>
        </dc:creator>
        <title>The Return of Extreme Programming in the Age of AI</title>
        <link>https://en.paradigmadigital.com/organizational-transformation-rev/return-extreme-programming-age-of-ai/</link>
        <pubDate>Tue, 04 Aug 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/organizational-transformation-rev/return-extreme-programming-age-of-ai/</guid>
        <description>Scrum and Kanban took most of the spotlight for years. Meanwhile, Extreme Programming waited in the background. Now that AI can generate code at unprecedented speed, the question XP has always asked becomes more relevant than ever: what about quality?
</description>
        <content:encoded>
            <![CDATA[
                <p>There is an irony in modern software development: we now have the greatest productivity accelerator in history and, at the same time, teams that are more overloaded, more anxious, and carrying more technical debt than ever before. <strong>Speed without structure is not productivity — it is chaos with good marketing</strong>.</p>
<p>Extreme Programming has been with us for almost thirty years, quietly overshadowed by Scrum and Kanban, yet it has never been as relevant as it is today. Not because the industry has rediscovered it out of nostalgia, but because <strong>the rise of Generative AI</strong> has exposed exactly the problem XP was designed to solve: <strong>how do you move fast without breaking the product or burning out the team?</strong></p>
<p>In this collection, we explore the foundations of XP and its evolution into what Justin Beall calls AI-XP. <strong>AI does not make the framework obsolete — it amplifies it</strong>. From Pair Programming to Cyborg Pairing, from the Planning Game to TDD as a safety net, we discuss <strong>how XP adapts to the AI era</strong>.</p>
<p>That said, <strong>the framework brings its own paradoxes</strong>: are we returning to hyper-documentation so AI can understand us? Is AI becoming the new knowledge silo that XP always tried to eliminate?</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/ai-xp-from-craftsmanship-manifesto-to-ai-era/">
        <p class="title">
            AI-XP: From the Craftsmanship Manifesto to the AI Era
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/ai_xp_manifiesto_craftsmanship_era_ia_82baaa85f2.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/ai_xp_manifiesto_craftsmanship_era_ia_82baaa85f2.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/ai_xp_manifiesto_craftsmanship_era_ia_82baaa85f2.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/ai_xp_manifiesto_craftsmanship_era_ia_82baaa85f2.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/ai_xp_manifiesto_craftsmanship_era_ia_82baaa85f2.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="AI-XP: From the Craftsmanship Manifesto to the AI Era" title="undefined"/></div><p class="description">Kent Beck did not invent anything radically new when he created XP: he gathered what already worked and pushed it to the extreme. Three decades later, Generative AI presents us with the same challenge in reverse: we now have a tool capable of generating code at incredible speed, but without the right structure it only accelerates chaos. In this post, we explore how XP evolves into AI-XP through new feedback loops that integrate artificial intelligence into planning, iterations, and day-to-day execution — along with the paradoxes this new model introduces.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/organizational-transformation-rev/speed-paradox-xp-not-ai-will-keep-team-burn-out/">
        <p class="title">
            The Speed Paradox: Why XP (Not AI) Will Prevent Your Team from Burning Out
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/paradoja_velocidad_xp_no_ia_evitara_equipo_se_queme_febce94698.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/paradoja_velocidad_xp_no_ia_evitara_equipo_se_queme_febce94698.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/paradoja_velocidad_xp_no_ia_evitara_equipo_se_queme_febce94698.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/paradoja_velocidad_xp_no_ia_evitara_equipo_se_queme_febce94698.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/paradoja_velocidad_xp_no_ia_evitara_equipo_se_queme_febce94698.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="The Speed Paradox: Why XP (Not AI) Will Prevent Your Team from Burning Out" title="undefined"/></div><p class="description">If AI never gets tired, should we expect human teams to keep up with that pace? In this second post, we focus on the human side of the equation: sustainable pace, psychological safety, and the end of the lone wolf developer — all principles XP has defended for decades as technical practices, not soft skills. We also examine what happens to Pair Programming once AI enters the equation, why Vibe Coding is a trap, and how TDD paradoxically becomes the most powerful productivity tool of the artificial era.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Vanessa Davo Parreño ]]>
        </dc:creator>
        <title>A Practical Guide to GSAP: How to Implement Dynamic Particle Effects and Cursor Tracking</title>
        <link>https://en.paradigmadigital.com/dev/practical-guide-gsap-how-to-implement-dynamic-particle-effects-and-cursor-tracking/</link>
        <pubDate>Tue, 28 Jul 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/practical-guide-gsap-how-to-implement-dynamic-particle-effects-and-cursor-tracking/</guid>
        <description>A technical guide to implementing smooth particle effects and cursor tracking with GSAP without compromising DOM performance.
</description>
        <content:encoded>
            <![CDATA[
                <p>We’re using the summer weeks to focus on frontend development and the visual polish that truly defines the user experience.</p>
<p>The secret to a memorable UI lies in smooth microinteractions and precise visual feedback as users navigate your site.</p>
<p>In this roundup, <strong>we’re focusing on squeezing every drop of performance out of GSAP (GreenSock Animation Platform) through two hands-on, code-heavy guides</strong>.</p>
<p>We’ll show you how to <strong>build a DOM-based particle effect</strong> by controlling physics variables like gravity and velocity, and how to <strong>implement buttery-smooth cursor tracking that reacts in real time</strong>—all without tanking page load or hurting browser layout performance.</p>
<p>Fire up your editor and give your web projects an extra dose of responsiveness and motion.</p>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/how-use-gsap-create-particle-effects-dom/"target="_blank">
        <p class="title">
            How to Use GSAP to Create Particle Effects in the DOM
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/como_usar_gsap_para_crear_efectos_particulas_dom_2_243a1a8edf.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/como_usar_gsap_para_crear_efectos_particulas_dom_2_243a1a8edf.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/como_usar_gsap_para_crear_efectos_particulas_dom_2_243a1a8edf.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/como_usar_gsap_para_crear_efectos_particulas_dom_2_243a1a8edf.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/como_usar_gsap_para_crear_efectos_particulas_dom_2_243a1a8edf.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="How to Use GSAP to Create Particle Effects in the DOM" title="undefined"/></div><p class="description">There’s no need to bloat your site with heavy animations—sometimes the secret to great UX lies entirely in the subtle visual feedback of microinteractions. In this post, we’ll show you how to spin up a DOM-based particle effect using GSAP and its Physics2DPlugin. We’ll go step-by-step through registering the plugin, querying the essential HTML elements, and dialing in physics variables like gravity, velocity, and particle count. It’s a clean, maintainable workflow leveraging CSS Custom Properties to completely transform how your buttons respond visually.</p></a>
</div>
<div class="block block-link b--default">
    <a href="https://en.paradigmadigital.com/dev/cursor-tracking-gsap-bringing-mouse-movement-life/"target="_blank">
        <p class="title">
            Cursor Tracking with GSAP: Bringing Mouse Movement to Life
        </p>
        <div class="imgWrap"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/huge/curated_lifestyle_8_Ecc_HQ_33_H_Ac_unsplash_c52a715aeb.jpg"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/curated_lifestyle_8_Ecc_HQ_33_H_Ac_unsplash_c52a715aeb.jpg 1920w,https://www.paradigmadigital.com/assets/img/resize/huge/curated_lifestyle_8_Ecc_HQ_33_H_Ac_unsplash_c52a715aeb.jpg 1280w,https://www.paradigmadigital.com/assets/img/resize/huge/curated_lifestyle_8_Ecc_HQ_33_H_Ac_unsplash_c52a715aeb.jpg 910w,https://www.paradigmadigital.com/assets/img/resize/huge/curated_lifestyle_8_Ecc_HQ_33_H_Ac_unsplash_c52a715aeb.jpg 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 38vw"
                  alt="Cursor Tracking with GSAP: Bringing Mouse Movement to Life" title="undefined"/></div><p class="description">Mouse movement is a prime opportunity to level up your UX, and GSAP-powered cursor tracking lets you capitalize on it without sacrificing a single frame. We’ll break down how to build smooth interactive effects and custom cursors mapped directly to pointer coordinates. This technical guide covers real-time event listening, motion smoothing, and how to avoid jank and layout thrashing when manipulating the DOM within complex layouts. It’s a straightforward way to bring a snappy, dynamic feel to your UI.</p></a>
</div>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Javier Ortiz ]]>
        </dc:creator>
        <title>WebMCP: What Google Calls “Optional” Rarely Stays Optional for Long</title>
        <link>https://en.paradigmadigital.com/techbiz/webmcp-what-google-calls-optional-rarely-stays-optional-long/</link>
        <pubDate>Tue, 21 Jul 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/techbiz/webmcp-what-google-calls-optional-rarely-stays-optional-long/</guid>
        <description>WebMCP is an optional recommendation from Google today. HTTPS, mobile-friendly design, and Core Web Vitals once were too. We look at the pattern and what CMOs should prepare before it stops being optional.
</description>
        <content:encoded>
            <![CDATA[
                <p>Every time Google introduces an &quot;optional&quot; standard, I think of Mark Twain:</p>
<p><em><strong>&quot;History doesn't repeat itself, but it often rhymes.&quot;</strong></em></p>
<p>In May 2026, at Google I/O, Google introduced <a href="https://developer.chrome.com/docs/ai/webmcp" target="_blank">WebMCP</a> as a key component of the agentic web: <strong>an open, voluntary standard that &quot;improves your users' experience.&quot;</strong> If you have worked in digital marketing for more than ten years, that language will sound familiar. It is also, word for word, the same language Google used for HTTPS in 2014, responsive design in 2012, and Core Web Vitals in 2020.</p>
<p><strong>None of those recommendations remained optional.</strong></p>
<p>In short: <strong>Google never forces a change overnight. It publishes a recommendation, provides free measurement tools, allows a grace period, and then turns the recommendation into a condition for being visible in its search engine.</strong> WebMCP is currently in phase one of that cycle, and anyone leading marketing in 2026 should read the calendar through the lens of 2014 because, as the saying goes, those who forget the past are bound to repeat its mistakes.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What is WebMCP? The short answer</h2>
<p><strong>WebMCP is a proposed web standard, promoted by Google and Microsoft within the W3C, that allows a webpage to expose structured &quot;tools&quot;—JavaScript functions and annotated forms—that AI agents can invoke directly</strong> instead of blindly interpreting the DOM through scraping.</p>
<p>The practical difference is that today, an agent trying to make a booking on your website &quot;looks&quot; at the page and guesses where to click, which involves high costs and inconsistent results. With WebMCP, your website tells the agent exactly <strong>what it can do and how to do it</strong>. Fewer errors, fewer tokens, more agent-driven conversions, lower system load, and greater efficiency and profitability for agents.</p>
<p>As of July 2026: an origin trial has been available since <a href="https://www.infoq.com/news/2026/06/webmcp-web-agent-standard-chrome/" target="_blank">Chrome 149</a>, Gemini in Chrome is the first consumer, and <strong>Expedia, Booking.com, Shopify, Credit Karma, and Target</strong> are already experimenting with it. All completely &quot;optional,&quot; of course.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Google's pattern: four times optional stopped being optional</h2>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Quality content → Panda</h3>
<p>In January 2011, Google warned on its blog that it would take action against <em>content farms</em>. It was an editorial recommendation: &quot;create useful content.&quot; <strong>On February 23, 2011, Panda arrived and removed 12% of search results from view.</strong> eHow and Suite101 went from empires to footnotes within weeks. The same cycle was repeated in 2022 with the Helpful Content Update: a recommendation from the Quality Rater Guidelines became an algorithmic filter.</p>
<h3 class="block block-header h--h20-175-500 left  ">HTTPS → &quot;Not secure&quot;</h3>
<p>At Google I/O in June 2014, Google launched its &quot;HTTPS Everywhere&quot; campaign: encryption was presented as a best practice. <strong>By August 2014, it was already a ranking signal</strong>, although a &quot;lightweight&quot; one. In July 2018, Chrome 68 began marking every HTTP site as <strong>&quot;Not secure&quot;</strong> in the address bar. Optional lasted four years, and in the end, it was not simply an SEO issue: your website looked broken in front of customers. The browser itself began displaying warnings and blocking access to sites that did not meet what had initially been an optional requirement.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Mobile-friendly → mobile-only</h3>
<p>Google had recommended responsive design since 2012. In February 2015, it set a date: &quot;Starting April 21, mobile-friendliness will become a ranking signal.&quot; Mobilegeddon arrived, marking the first time Google announced the exact day of an update. But the cycle did not end there: in November 2016, it introduced <a href="https://searchengineland.com/google-says-mobile-first-indexing-is-complete-after-almost-7-years-434011" target="_blank">mobile-first indexing</a> as &quot;an experiment&quot;; in 2019, it became the default; and <strong>in October 2023, Google completed the transition to mobile-only indexing: if your website does not work on mobile, it does not exist for Google.</strong> Eleven years from &quot;recommendation&quot; to absolute requirement.</p>
<p>Are you starting to see the pattern?</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Speed → Core Web Vitals</h3>
<p>Speed became a desktop ranking signal in 2010, affecting fewer than 1% of queries: a largely symbolic gesture. For years, Google provided PageSpeed Insights and Lighthouse for free &quot;to help you.&quot; In 2018, the Speed Update brought speed signals to mobile. Then, in May 2020, Google introduced Core Web Vitals with an unprecedented promise: six months' notice before activation. <strong>In June 2021, the Page Experience Update made them a ranking signal.</strong> Metric published, free tool released, grace period granted, ranking factor activated, mass hysteria triggered. The full playbook, executed patiently.</p>
<p>I could also mention AMP—optional in 2015, a de facto toll for appearing in Top Stories in 2016, and largely irrelevant by 2021—or schema.org structured data. The pattern remains the same: <strong>nobody forces you; you simply disappear.</strong></p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Where we are now with WebMCP</h2>
<p>If we overlay the historical timeline onto WebMCP, the picture is clear:</p>
<ol>
<li><strong>Recommendation phase—we are here:</strong> an open standard, a narrative focused on &quot;user experience,&quot; and high-profile early adopters acting as showcases. This is HTTPS in June 2014.</li>
<li><strong>Measurement phase:</strong> an agent-readiness validation tool will arrive, equivalent to the mobile-friendly test or Lighthouse, where the possibility of testing is already being discussed. When Google gives you a free measurement tool, it is not generosity: it intends to score you with it.</li>
<li><strong>Visible advantage phase:</strong> websites using WebMCP will convert better in Gemini in Chrome and agentic search experiences. Case studies from Expedia or Shopify will do the commercial work Google does not need to do itself. Everyone will want to tell a story such as: &quot;We improved conversion for this transaction, in this way, and through this channel.&quot;</li>
<li><strong>Toll phase:</strong> websites without exposed tools will become to agents what websites without a mobile version were in 2015: invisible. No announced penalty will be necessary.</li>
</ol>
<p>Do I have proof this will happen? No. I have four precedents over fifteen years and none pointing in the opposite direction. In my field, we call that a <strong>pattern worth planning around</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What WebMCP looks like in practice: two examples</h2>
<p>The theory behind the pattern is useful, but a CMO makes better decisions when they can see the real cost. WebMCP provides two APIs, and the choice is not technical but commercial: <strong>the imperative API—JavaScript—for transactional actions</strong> such as searching or adding products to a cart, and <strong>the declarative API—HTML attributes—for forms</strong>, where the implementation cost is almost zero.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Example 1: a Shopify ecommerce store</h3>
<p>An agent trying to purchase something from your store today &quot;looks&quot; at the page and guesses: it locates the search box, interprets the product grid, and finds the purchase button. Every step is an opportunity for error. With the <a href="https://developer.chrome.com/docs/ai/webmcp/imperative-api" target="_blank">imperative API</a>, your store declares its two highest-value actions as tools, using the AJAX endpoints Shopify already exposes (<code>/search/suggest.json</code> and <code>/cart/add.js</code>):</p>
<pre><code class="language-javascript">// In theme.liquid or as a snippet: the store declares its tools.

// Tool 1: search for a product (read-only).
await document.modelContext.registerTool({
  name: 'buscar_producto',
  description: 'Searches the catalog for products using free text. Returns name, price, availability, and variants (size, color).',
  inputSchema: {
    type: 'object',
    properties: {
      consulta: { type: 'string', description: 'Search query, e.g. &quot;women\'s running shoes&quot;' }
    },
    required: ['consulta']
  },
  execute: async ({ consulta }) =&gt; {
    const res = await fetch(`/search/suggest.json?q=${encodeURIComponent(consulta)}&amp;resources[type]=product`);
    const data = await res.json();
    return JSON.stringify(data.resources.results.products.map(p =&gt; ({
      titulo: p.title, precio: p.price, url: p.url, disponible: p.available
    })));
  },
  annotations: { readOnlyHint: true } // Tells the agent that this action does not modify anything.
});

// Tool 2: add to cart (sensitive action).
await document.modelContext.registerTool({
  name: 'anadir_al_carrito',
  description: 'Adds a product variant to the cart. It does not complete the purchase: checkout must always be confirmed by the user.',
  inputSchema: {
    type: 'object',
    properties: {
      variantId: { type: 'number', description: 'Variant ID (product + size/color)' },
      cantidad: { type: 'number', description: 'Number of units, 1 by default' }
    },
    required: ['variantId']
  },
  execute: async ({ variantId, cantidad = 1 }) =&gt; {
    const res = await fetch('/cart/add.js', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ items: [{ id: variantId, quantity: cantidad }] })
    });
    const cart = await res.json();
    return `Added to cart. Current total: ${cart.items?.length ?? 1} items.`;
  },
  annotations: { readOnlyHint: false }
});
</code></pre>
<p>There are <strong>three business decisions</strong> hidden in these 40 lines that should not be made by the implementer alone:</p>
<ul>
<li><strong>What you expose and what you do not.</strong> Here, the agent can search and add items to the cart, but checkout remains in the user's hands. Where you draw that boundary is a decision about risk and margin, not code.</li>
<li><strong>What you return.</strong> The agent decides based on the information you provide. If <code>buscar_producto</code> does not return availability, the agent will recommend products that are out of stock. Output design is the new merchandising.</li>
<li><strong>The description is your new copy.</strong> <code>description</code> is what the agent &quot;reads&quot; to decide whether to use your tool or your competitor's. Writing it well is a marketing task, not a systems task.</li>
</ul>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Example 2: a lead-generation form using the declarative API</h3>
<p>For leads, support requests, or quotations, JavaScript is not required: <strong>the <a href="https://developer.chrome.com/docs/ai/webmcp/declarative-api" target="_blank">declarative API</a> turns your existing form into a tool by adding three HTML attributes</strong>. The marginal cost is so low that &quot;we'll do it later&quot; no longer has a technical excuse:</p>
<pre><code class="language-html">&lt;form toolname=&quot;solicitar_presupuesto&quot;
      tooldescription=&quot;Requests a project quote. Collects contact details, project type, and estimated budget. A consultant responds within 24 business hours.&quot;
      action=&quot;/contacto/enviar&quot;&gt;

  &lt;label for=&quot;nombre&quot;&gt;Full name&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;nombre&quot; id=&quot;nombre&quot; required&gt;

  &lt;label for=&quot;email&quot;&gt;Corporate email&lt;/label&gt;
  &lt;input type=&quot;email&quot; name=&quot;email&quot; id=&quot;email&quot; required&gt;

  &lt;select name=&quot;tipo_proyecto&quot; required
          toolparamdescription=&quot;Determines which team the request is routed to.&quot;&gt;
    &lt;option value=&quot;analitica&quot;&gt;Digital analytics and measurement&lt;/option&gt;
    &lt;option value=&quot;cro&quot;&gt;CRO and experimentation&lt;/option&gt;
    &lt;option value=&quot;data&quot;&gt;Data and AI&lt;/option&gt;
  &lt;/select&gt;

  &lt;label for=&quot;detalle&quot;&gt;Tell us about your project&lt;/label&gt;
  &lt;textarea name=&quot;detalle&quot; id=&quot;detalle&quot;&gt;&lt;/textarea&gt;

  &lt;button type=&quot;submit&quot;&gt;Submit request&lt;/button&gt;
&lt;/form&gt;
</code></pre>
<p>The browser translates this into a JSON Schema that the agent can interpret without ambiguity. The agent fills in the fields in front of the user—the form remains visible, with the <code>:tool-form-active</code> focus indicator—and the final submission is completed by the person unless <code>toolautosubmit</code> is added.</p>
<p>And one detail that I find particularly relevant for analytics teams: <strong>the submission event is automatically marked with <code>agentInvoked</code></strong>.</p>
<pre><code class="language-javascript">document.querySelector('form').addEventListener('submit', (e) =&gt; {
  if (e.agentInvoked) {
    // Lead generated by an agent: tag it in your dataLayer / CRM.
    dataLayer.push({ event: 'generate_lead', lead_source_type: 'ai_agent' });
  }
});
</code></pre>
<p>In other words, the standard already includes the component required to <strong>segment human traffic from agentic traffic</strong> in your analytics. If the question in 2015 was, &quot;What percentage of your traffic is mobile?&quot;, the question in 2027 will be: <strong>&quot;What percentage of your leads are generated by an agent?&quot;</strong> Those who start measuring it now will have the baseline everyone else will later need to improvise.</p>
<p>To see it working before changing your own website, Google provides complete demos on GitHub. The <a href="https://github.com/GoogleChromeLabs/webmcp-tools/tree/main/demos/coffee-shop" target="_blank">coffee-shop demo</a> is the closest example to a real ecommerce experience—catalog, cart, and ordering through exposed tools—and the <a href="https://github.com/GoogleChromeLabs/webmcp-tools/tree/main/demos" target="_blank">same repository</a> contains examples of both APIs.</p>
<p><em>Note: WebMCP is currently in an origin trial in Chrome 149+, and the syntax may change. <code>navigator.modelContext</code> was deprecated in Chrome 150 in favor of <code>document.modelContext</code>. These examples use the syntax current as of July 2026.</em></p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What I would do if I were leading digital marketing in 2026</h2>
<ol>
<li><strong>Identify your critical transactions.</strong> Booking, registration, quotation, purchase: these are the &quot;tools&quot; an agent will want to invoke. If you do not know your five highest-value actions, that is the first task—not writing code.</li>
<li><strong>Put WebMCP on the 2027 technical roadmap, not on the &quot;we'll see&quot; list.</strong> The Chrome 149 origin trial allows experimentation today at low cost. Those who tested responsive design in 2013 experienced Mobilegeddon as a routine change; those who waited experienced it as a crisis.</li>
<li><strong>Start measuring agentic traffic now.</strong> Before optimizing for agents, you need to know how many are visiting, what they are trying to do, and where they fail. Without that baseline, every decision made in 2027 will be a blind one.</li>
<li><strong>Do not outsource the judgment.</strong> As with <a href="https://en.paradigmadigital.com/techbiz/cdp-composable-cdp-agentic-cdp-decision-cmo-cant-afford-delegate-it/" target="_blank">CDPs or AI in CRO</a>, technology is the least important part. The value lies in deciding what you expose, to which agents, and under which business rules. That cannot be delegated to whoever happens to implement it.</li>
<li><strong>Be suspicious of the phrase &quot;it's optional.&quot;</strong> That is how every Google requirement begins.</li>
</ol>
<p>The agentic web will not ask whether you are ready, just as Mobilegeddon did not ask in 2015. The good news is that this time, the pattern is already documented and the timeline has been published. <strong>Optional is only phase one.</strong></p>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Javier Ortiz ]]>
        </dc:creator>
        <title>CDP, Composable CDP, or Agentic CDP: The Decision Every CMO Can’t Afford to Delegate to IT</title>
        <link>https://en.paradigmadigital.com/techbiz/cdp-composable-cdp-agentic-cdp-decision-cmo-cant-afford-delegate-it/</link>
        <pubDate>Thu, 16 Jul 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/techbiz/cdp-composable-cdp-agentic-cdp-decision-cmo-cant-afford-delegate-it/</guid>
        <description>For the past decade, CDPs have promised proactive intelligence, and for the past decade the reality has remained the same: marketers enter with the hypothesis they already have, execute it, and move on, because a CDP can execute ideas but has never had one of its own. That’s exactly what changes with an agentic CDP.
</description>
        <content:encoded>
            <![CDATA[
                <p><strong>We have to admit it: this isn't the first time we've had this conversation.</strong> Ten years ago, it was whether to run our own ad server or leave it to the agency. Five years ago, it was whether to build audiences inside media platforms or within our own systems. <strong>Today, the question is whether to adopt a composable CDP or an agentic CDP.</strong></p>
<p>The question changes. The <strong>underlying problem</strong> does not.</p>
<p>Who tells you who your customer is? How much control do you have over that information? How much are you paying for it? Can you activate it whenever you want, or do you depend on IT opening a ticket?</p>
<p>And most importantly—the question that rarely reaches the executive committee: <strong>How long does it take your organization to go from identifying a business opportunity to launching a campaign in production?</strong></p>
<p>That's the real question—not which platform has the best connectors.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What a composable CDP really is and why the metaphor matters</h2>
<p>The formal definition talks about <strong>centralizing and unifying customer data from multiple sources</strong>. In practice, most teams describe it as <em>&quot;a cocktail shaker where you pour all your customer data, then serve each team exactly what it needs.&quot;</em> And while that may sound simplistic, the metaphor is useful because it helps <strong>legal, business, technology, and marketing teams talk about the same project without each interpreting it differently</strong>.</p>
<p>A <strong>composable CDP</strong> is not a product—it is a <strong>design philosophy</strong>. Instead of buying a closed platform that copies your data into its own environment, it uses your existing <strong>data warehouse</strong> (Snowflake, BigQuery, Databricks) as the <strong>single source of truth</strong>, building modular capabilities on top of it: identity resolution, segmentation, and activation.</p>
<p>At the heart of this architecture is <strong>Reverse ETL</strong>. Traditional ETL moves operational data into the warehouse for analysis. Reverse ETL does the opposite: it takes precomputed segments and models (customer lifetime value, churn risk, purchase propensity) and synchronizes them with the systems where business actually happens: CRM platforms, advertising platforms, and marketing automation tools.</p>
<p><strong>The promise is real</strong>: your data never leaves your governed environment, you can replace any component without rebuilding the entire stack, and you maximize the investment you've already made in data modeling.</p>
<p>For organizations with mature data engineering teams and use cases that can tolerate daily or weekly synchronization, this remains a strong architectural choice. The problem lies in what never appears in the original business case.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The cost nobody calculates before signing</h2>
<p>Here's the nuance that rarely appears in a composable CDP sales pitch: <strong>every capability lives in a different vendor, connected through APIs</strong>. That gives engineering teams flexibility—but it also creates a <strong>structural consequence</strong> that few organizations account for.</p>
<p>When a campaign finishes and generates results (opens, clicks, conversions), that information must <strong>travel back through the entire chain</strong>: from the activation platform to Reverse ETL, from Reverse ETL to the warehouse, through dbt model rebuilding, and finally through predictive model retraining. Only then <strong>does the system actually know what just happened</strong>. That cycle is measured in hours—not seconds.</p>
<p>For a weekly email campaign, that latency is acceptable. For an agent that must act, observe the outcome, and improve its next decision during the same customer session, <strong>that latency isn't a technical detail—it is a structural limitation</strong>.</p>
<p>The second cost that rarely enters the initial conversation is <strong>privacy surface area</strong>. Every Reverse ETL synchronization to an external platform creates another copy of personal data outside your controlled environment. In a typical composable stack, an email address or phone number may simultaneously exist in three or more systems: <strong>the warehouse, the Reverse ETL cache, and every activation platform</strong>. Every copy requires its own processing agreement, deletion requests that take days to propagate, and audits that become more complex with every additional vendor.</p>
<p><strong>Costs do not scale linearly</strong>. They grow as the product of data volume, number of connectors, synchronization frequency, and activated tools. At scale, maintenance costs (warehouse compute, synchronization fees, messaging platforms, identity resolution, and two to five engineers dedicated exclusively to the pipeline) can <strong>approach—or even exceed—the cost of an agentic platform with native activation</strong>.</p>
<p>This doesn't make composable expensive or agentic cheap. It simply means that total cost should be evaluated over three years—not based on the first invoice.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Six practices to reduce those costs before making any decision</h2>
<p>Regardless of which architecture you ultimately choose, certain design decisions determine how expensive the platform will be to operate at scale. Making them now saves significant costs later.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">1 <span class="enum-header"></span> A unified event layer from the source</h3>
<p>If every channel reaches the warehouse with its own schema, costly downstream transformations accumulate and your data model becomes technical debt. <strong>Normalizing events across every channel</strong> (paid media, email, web, mobile apps, CRM) <strong>using a common schema</strong> from ingestion reduces future compute costs and makes models reusable.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">2 <span class="enum-header"></span> Partition by date and channel from day one</h3>
<p><strong>Properly partitioned tables</strong> allow models to process only incremental data. It's a design decision that's inexpensive early on but saves substantial resources at scale.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">3 <span class="enum-header"></span> Incremental synchronization based on Change Data Capture (CDC)</h3>
<p>The largest variable cost driver in a composable CDP isn't licensing—<strong>it's the multiplication of rows, synchronization frequency, and destinations</strong>. Replacing periodic full exports with Change Data Capture can reduce transferred data volumes by <strong>5x to 10x</strong> in organizations with relatively stable datasets.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">4 <span class="enum-header"></span> Consolidate activation destinations</h3>
<p>Synchronizing the same audience to four different platforms <strong>multiplies cost without multiplying impact</strong>. Whenever possible, centralize activation in a single destination and redistribute from there.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">5 <span class="enum-header"></span> Define freshness SLAs by use case</h3>
<p>Not every audience needs hourly updates. <strong>Separating</strong> use cases that genuinely require hourly refreshes from those that tolerate daily updates can <strong>reduce compute costs by 3x to 5x</strong> without affecting business outcomes.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">6 <span class="enum-header"></span> Document business rules before activating any agent</h3>
<p>An agent's operating cost is directly correlated with the <strong>quality of the context it receives</strong>. An agent working with poorly structured context requires more iterations, consumes more resources, and produces more discarded hypotheses. Investing time in documenting business objectives, brand constraints, restricted audiences, and business rules before deploying agents is one of the <strong>cheapest—and most overlooked—efficiency levers</strong>. <a href="https://hightouch.com/blog/agentic-cdp" target="_blank">Some organizations have institutionalized this responsibility through dedicated roles that act as the control point between strategy and autonomous agents</a>.</p>
<h2 class="block block-header h--h30-15-400 left  ">What actually changes with an agentic CDP?</h2>
<p>For ten years, CDPs have promised <a href="https://www.g2.com/categories/customer-data-platform-cdp/enterprise" target="_blank">proactive intelligence</a>. And for ten years, the reality has been the same: marketers enter the platform, build the audience they already had in mind, launch the campaign they had already planned, and leave. <strong>The CDP executes ideas but it has never generated one of its own.</strong></p>
<p><strong>The difference isn't a new version, it's what the platform does by default.</strong></p>
<p>An <strong>agentic CDP</strong> continuously runs specialized agents that explore data, identify concrete business opportunities, and generate ready-to-use drafts of audiences, messaging, and campaign content. It doesn't wait for someone to arrive with a hypothesis—it creates one.</p>
<p><em>&quot;The new data source we added has improved our churn model.&quot; &quot;We have high-value segments without active campaigns. Shall we activate them?&quot;</em></p>
<p>The <strong>difference from the AI chat assistants</strong> that nearly every platform now includes lies in the <strong>depth of investigation</strong>. AI chat is excellent for tactical questions like <em>&quot;Which products sold best last month?&quot;</em> but <strong>falls short when faced with open strategic questions</strong>, because it only sees its own platform's data, is optimized for fast responses rather than deep exploration, and loses context during long investigations.</p>
<p>An <strong>agentic CDP keeps specialized agents working in the background</strong> for hours. Some generate hypotheses, others investigate them, a prioritization mechanism ranks them by business impact, and a final validation layer discards anything unsupported by evidence. The outcome is not thirty random &quot;opportunities&quot; every day, but a prioritized, actionable list of what deserves attention right now.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">How can the agent see the entire operation without duplicating data? The Composable Context Layer</h3>
<p>At this point, a perfectly reasonable question arises: if the agent needs access to customer data, active campaigns, creative assets, and business rules, <strong>aren't we just creating another centralized repository with yet another copy of everything?</strong></p>
<p>A well-designed implementation answers <strong>no</strong>. The architectural pattern that makes this possible is the <a href="https://hightouch.com/blog/the-agentic-cdp" target="_blank">Composable Context Layer</a>, which applies the same philosophy as a composable CDP to AI itself: instead of moving all the data to where the AI lives, <strong>it moves the AI to where the data already lives</strong>.</p>
<p><strong>Agents connect directly to the data warehouse</strong> without creating additional copies. They consume tools the organization already uses (Looker, Snowflake Cortex, Databricks Genie), access creative assets where they already exist (DAM platforms, Figma, content repositories), and receive business strategy through structured documents or open protocols such as MCP.</p>
<p>In <strong>production environments</strong>, this pattern can return customer context in approximately <strong>60 milliseconds</strong> for small payloads—fast enough to personalize experiences in real time without waiting for the next batch process. It also allows organizations to define up to ten customized endpoints per role, ensuring <strong>each agent receives only the context required for its specific use case</strong>, including current consent status.</p>
<p>Vendors such as <a href="https://tealium.com/platform-enrichment-orchestration-context-api/?mkt_tok=Njk5LUpMQS0yMDgAAAGiuzyRoXq1Zhak3tgONApzJSRAQUfw3vSKJyhIggHTezdtQlLwTa-GurbprPwX_5GLAUaTlTFRg4OaqveLs-lAyserTka3-nLQ2fHEdLjCqboa8A" target="_blank">Tealium</a> and Hightouch implement this pattern natively. In both cases, warehouse data is not replicated, it is exposed through a governed API.</p>
<p>It's an architecture that simultaneously solves governance and privacy challenges while enabling intelligence. <strong>The data stays where it is; the intelligence goes to the data.</strong></p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">How the system improves itself: cumulative campaign memory</h3>
<p>The second structural difference is <strong>cumulative memory</strong>. Every customer interaction, campaign execution, experiment, and outcome becomes reusable evidence that informs future decisions. <strong>This memory operates at multiple levels.</strong></p>
<ul>
<li>At the <strong>audience level</strong>, the system learns which segments consistently fail to convert, which audiences respond better to SMS than email, and at which point in a customer journey an offer truly changes behavior.</li>
<li>At the <strong>campaign level</strong>, it remembers which subject line characteristics increase open rates among high-value customers and which creative formats perform best for product launches versus evergreen campaigns.</li>
<li>At the <strong>strategic initiative level</strong>, every objective you define (increase purchase frequency, reduce first-time buyer churn) accumulates knowledge from previous executions. The next recommendation therefore starts with historical context instead of a blank slate.</li>
</ul>
<p>The <strong>critical difference</strong> from a composable architecture is that this memory updates continuously within the same environment, without sending data back and forth between multiple vendors. Yesterday's outcome becomes today's input—within the same context and without manual retraining.</p>
<p><strong>You define the business objectives and target metrics.</strong> Agents optimize against those goals within the same activation environment. Silos and alignment meetings become hypotheses and governance.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The question your executive committee should answer</h2>
<p>This is not a technical question, it is an <strong>operating model</strong> question.</p>
<p>How long does it take your organization to move from identifying an opportunity to launching a campaign? Who generates new hypotheses? Who is explicitly responsible for challenging the status quo? How much does the complete process cost—from hypothesis design and legal validation to data ingestion, modeling, and activation?</p>
<p>If the answer is measured in weeks (a brief, a design team, developers or operations assembling audiences and customer journeys) then the problem isn&amp;#39;t talent or media budget.</p>
<p><strong>It's architectural.</strong></p>
<p>And no additional Reverse ETL connectors will solve a limitation rooted in how the learning cycle itself is fragmented across vendors.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Ask yourself three questions to understand where you stand</h2>
<p><strong>Activation cadence</strong></p>
<p>Can your business tolerate daily or weekly synchronization, or do you need the system to act and learn during the customer's current session?</p>
<p><strong>AI maturity</strong></p>
<p>Are your use cases limited to batch-trained models updated hourly or daily, or do you require continuous real-time decision-making?</p>
<p><strong>Team capacity</strong></p>
<p>Can your data team sustainably maintain a multi-vendor architecture, or does that operational burden compete with more strategic engineering priorities?</p>
<p>Organizations confidently answering <em>&quot;batch processing is enough&quot;</em> and <em>&quot;we have the team to maintain it&quot;</em> have a <strong>perfectly legitimate case</strong> for remaining with a composable architecture—as long as they implement the efficiency practices described earlier.</p>
<p>Organizations answering <em>&quot;we need a real-time closed learning loop&quot;</em> or <em>&quot;we already spend more maintaining connectors than developing strategy&quot;</em> are, perhaps unknowingly, describing the <strong>business case for an agentic CDP</strong>.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">What every CMO should demand before signing</h2>
<p>Regardless of which vendor sits at the table, there are <strong>five verifications</strong> every CMO should insist on before committing to any architecture.</p>
<ul>
<li><strong>True zero-copy architecture.</strong> Require proof that data is not silently replicated. For agentic platforms, verify that the Composable Context Layer operates without copying data outside your governed environment.</li>
<li><strong>End-to-end compliance.</strong> Ensure certifications (SOC 2 Type II, ISO 27001, GDPR, CCPA) cover the entire platform—not only storage.</li>
<li><strong>Verifiable governance.</strong> Confirm role-based access control, protected data filtering, approval workflows, and auditable logs. For agentic platforms, also verify configurable guardrails defining which audiences agents cannot modify and which brand constraints they must respect.</li>
<li><strong>Native compatibility.</strong> Certified integration with your existing warehouse—without custom engineering.</li>
<li><strong>Real time-to-value.</strong> Production use cases measured in weeks, not quarters. For agentic platforms, ask for evidence that cumulative memory genuinely improves recommendations over time rather than only during the initial deployment.</li>
</ul>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The decision isn't binary but it is urgent</h2>
<p>A <strong>hybrid deployment</strong>—using an existing warehouse while adding agentic capabilities only where they create value—may well be the <strong>right balance</strong> during the transition.</p>
<p>What <strong>isn't reasonable</strong> is continuing to treat this decision as merely a technical discussion to be settled in a data architecture meeting while competitors are already running campaigns that optimize themselves without waiting for the next sprint.</p>
<p>It's also worth remembering that <strong>the success of these initiatives depends less on the chosen technology than on having clear executive sponsorship, a well-defined business case, and change management capable of keeping technology, business, and customer teams aligned</strong> throughout the entire transformation. A perfectly selected agentic architecture can fail just as easily as a poorly chosen composable one if nobody has first established who makes decisions, what success looks like, and how long-term commitment across teams will be maintained.</p>
<p>These are never short-term projects. Even in the world of Reverse ETL, there is always an ongoing <strong>business-as-usual (BAU)</strong> operational burden.</p>
<p>The <strong>CDP market is consolidating</strong> because organizations that have already closed the learning loop inside a single platform are making better decisions, faster, than those still rebuilding models every time a campaign ends.</p>
<p>If you're evaluating this transition, the right question isn't which platform has the longest feature list.</p>
<p>It's <strong>which partner can help you evaluate the decision honestly</strong>, including the scenarios where the correct answer isn't necessarily the easiest one to sell.</p>

            ]]>
        </content:encoded>
    </item><item>
        <dc:creator>
            <![CDATA[ Sergio Torres ]]>
        </dc:creator>
        <title>Concurrent AI Agents: How to Get the Most out of MCP with Java Virtual Threads</title>
        <link>https://en.paradigmadigital.com/dev/concurrent-ai-agnets-how-get-most-out-mcp-java-virtual-threads/</link>
        <pubDate>Tue, 14 Jul 2026 06:00:00 GMT</pubDate>
        <guid isPermaLink="true">https://en.paradigmadigital.com/dev/concurrent-ai-agnets-how-get-most-out-mcp-java-virtual-threads/</guid>
        <description>Java Virtual Threads don’t make algorithms run faster. Instead, whenever an agent blocks on a network operation, the JVM unmounts the virtual thread and releases the underlying platform thread so it can continue handling other requests. This makes it possible to scale from supporting just a handful of concurrent agents to thousands on the same machine without sacrificing performance or incurring additional cloud infrastructure costs.
</description>
        <content:encoded>
            <![CDATA[
                <p>Thinking about an <strong>AI agent</strong> naturally brings to mind <strong>intelligent systems and automation</strong>. But have you ever considered what happens behind the scenes at the infrastructure and concurrency level?</p>
<p>With the <a href="https://www.paradigmadigital.com/dev/podcast-mcps-y-skills-llegan-gemini-diferencias-clave-y-casos-uso/" target="_blank">Model Context Protocol (MCP)</a>, LLMs can connect to our databases, APIs, and internal tools. However, every external call introduces latency—and more latency. If we add <a href="https://www.paradigmadigital.com/dev/ventajas-virtual-threads-java-21/" target="_blank">Java Virtual Threads</a> to the equation, AI agent orchestration suddenly has an efficient way to avoid overwhelming our servers.</p>
<p>In this post, we'll explore <strong>MCP integration in Java with Spring AI</strong>, move on to <strong>Virtual Threads</strong>, and see how they become a lifesaver when thousands of AI agents are running concurrently. Welcome to the world of scalable AI with Java.</p>
<h2 class="block block-header h--h30-15-400 left  ">Why use Virtual Threads with MCP?</h2>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Why high concurrency is essential for AI</h3>
<p>We first need to understand <strong>what happens when an LLM uses a tool through MCP</strong>. The heavy CPU computation is delegated to the language model itself, but what remains is fundamentally <strong>an I/O-bound problem</strong>. An AI agent spends <strong>99% of its time waiting</strong>: waiting for the LLM to decide which tool to call, waiting for the network, or waiting for the MCP server to return data.</p>
<p>Now imagine this <strong>scaled to thousands of concurrent users</strong> running on traditional thread pools. The outcome is easy to predict: the server runs out of memory before the LLM has even generated its first token. If you truly <strong>intend to deploy AI agents in production</strong>, that's when it's time to <strong>switch to Virtual Threads</strong>.</p>
<h3 class="block block-header h--h20-175-500 left  ">Why this combination?</h3>
<p>The <strong>Model Context Protocol (MCP)</strong> is the new open standard for connecting AI clients with external tools and data servers. Combining Spring AI's MCP support with a JVM running Virtual Threads provides several compelling advantages:</p>
<ul>
<li><strong>Blocking without the cost</strong>: Virtual Threads (available since Java 21) are ultra-lightweight threads managed by the JVM, as explained in <a href="https://www.paradigmadigital.com/dev/ventajas-virtual-threads-java-21/" target="_blank">this article</a> by our colleague Daniel Peña. Whenever an agent performs a blocking HTTP or gRPC request to an MCP server, the JVM <strong>unmounts</strong> the virtual thread and releases the underlying platform thread so it can continue serving other requests.</li>
<li><strong>Clean imperative programming</strong>: Forget about chaining complex reactive pipelines with frameworks like WebFlux just to deal with asynchronous AI APIs. You can write straightforward sequential code that's easy to debug and maintain.</li>
<li><strong>Massive scalability</strong>: Move from supporting a handful of simultaneous agents to thousands on the same machine, dramatically reducing cloud infrastructure costs.</li>
</ul>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Core concepts: Host, Server, and Virtual Threads</h3>
<p>The <strong>combination of MCP and modern Java</strong> revolves around three core components:</p>
<ul>
<li><strong>MCP Host (client)</strong>: In our case, a Spring Boot/Spring AI application. Think of it as the team's playmaker—it communicates with the LLM and orchestrates every tool invocation.</li>
<li><strong>MCP Server</strong>: An independent microservice or process exposing the actual tools (database connectors, system utilities, APIs, etc.).</li>
<li><strong>Virtual Threads</strong>: Java's execution engine that allows every AI agent session to run in its own dedicated thread without performance penalties.</li>
</ul>
<p>Now that we understand these building blocks, <strong>how do we configure the entire ecosystem?</strong> Let's walk through a practical example.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Preparing a Java project for AI and MCP</h2>
<p>Once we've decided to build highly concurrent AI agents, we'll configure our environment <strong>step by step</strong> using <strong>Spring Boot and Spring AI</strong>.</p>
<p>First, create your project (if you haven't already) using, for example, <a href="https://start.spring.io/" target="_blank">Spring Initializr</a>, making sure you're using <strong>Java 21 or later</strong>.</p>
<p>In your build.gradle (or pom.xml if you're using Maven), add the required Spring AI and MCP dependencies:</p>
<pre><code class="language-none">plugins {
    id 'java'
    id 'org.springframework.boot' version '4.0.6'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
}

ext {
    set('springAiVersion', &quot;2.0.0-M4&quot;)
}

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-mcp-client'

    implementation 'org.springframework.ai:spring-ai-starter-model-ollama'

    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

dependencyManagement {
    imports {
        mavenBom &quot;org.springframework.ai:spring-ai-bom:${springAiVersion}&quot;
    }
}

tasks.named('test') {
    useJUnitPlatform()
}
</code></pre>
<p>To unlock the concurrency benefits we've been discussing, add the following line to your <strong>application.properties</strong> file so Spring Boot delegates blocking operations to Virtual Threads:</p>
<pre><code class="language-yaml">spring.threads.virtual.enabled=true
</code></pre>
<p>Once configured, let's build a <strong>very simple AI service</strong>. This component acts as our MCP Host, connecting to a local MCP server (for example, a Node.js or Python process exposing corporate information) and <strong>handling user requests</strong>:</p>
<pre><code class="language-bash">package com.example.ai.mcp;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class AgentService {

    private final ChatClient chatClient;

    // Spring AI automatically configures the MCP client and exposes its tools as ToolCallback beans.
    public AgentService(ChatClient.Builder chatClientBuilder, List&lt;ToolCallback&gt; mcpTools) {
        this.chatClient = chatClientBuilder
                .defaultTools((Object) mcpTools.toArray(new ToolCallback[0])) // Bind the MCP server tools
                .build();
    }

    public String askAgent(final String userPrompt) {
        return this.chatClient.prompt()
                .user(userPrompt)
                .call()
                .content();
    }
}
</code></pre>
<p>In this implementation, the <strong>ChatClient dynamically discovers the available tools</strong> exposed by the MCP server. When <code>askAgent()</code> is invoked, the LLM <strong>evaluates the user's prompt</strong> and, whenever it requires external data, transparently calls the appropriate MCP tool through a blocking network request.</p>
<p>Because <strong>Virtual Threads are enabled</strong>, the underlying platform thread is immediately released while waiting for the network response, allowing the JVM to continue processing other AI interactions.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">The &quot;Matryoshka Effect&quot; of blocking in AI agents</h2>
<p>In a <strong>traditional web application</strong>, such as an API querying a database, a thread handles the HTTP request, blocks while reading from the database, receives the data, and returns a response. <strong>There is only a single I/O wait</strong>.</p>
<p>With an AI agent communicating through an external MCP server, what I like to call the <strong>Matryoshka blocking effect</strong> appears—a blocking operation nested inside another blocking operation.</p>
<p>When we invoke <code>askAgent()</code>, this is what happens inside a single thread:</p>
<ol>
<li><strong>First blocking operation (sending the prompt to the LLM):</strong> Spring AI sends the user's prompt to the language model and waits for the network response.</li>
<li><strong>The LLM makes a decision:</strong> the model analyzes the request and concludes: <em>&quot;I don't have that information—I need to call the getInvoice tool.&quot;</em> And no, don't look for that method in the code above—that's the beauty of MCP. The protocol exposes the available tools, and the model decides which one it needs.</li>
<li><strong>Second blocking operation (calling the MCP server):</strong> Spring AI intercepts the model's decision and sends a network request to the external MCP server hosting the corporate tool. The thread blocks again while waiting for the MCP response.</li>
<li><strong>Third blocking operation (returning to the LLM):</strong> the MCP server replies, Spring AI forwards the resulting JSON back to the language model, and the thread blocks one final time while the LLM generates the final answer.</li>
</ol>
<p>If we used <strong>traditional platform threads</strong> (<code>java.lang.Thread</code> backed by operating system threads), a single user interacting with the AI agent would monopolize a physical thread for several seconds across multiple nested network operations.</p>
<p>With <strong>Virtual Threads</strong>, the JVM performs its magic. Every time one of these three network waits begins, the virtual thread immediately releases its underlying <strong>Carrier Thread</strong>. That platform thread instantly starts serving other requests, while the virtual thread is resumed later—possibly on a completely different platform thread—as soon as the network data becomes available.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">&quot;I believe it, but I want to see it&quot;: inspecting Virtual Threads in the logs</h3>
<p>Nothing beats a real demonstration. Let's <strong>modify the service</strong> we created earlier so it prints the current thread before invoking the ChatClient, allowing us to visualize concurrency:</p>
<pre><code class="language-java"> package com.example.ai.mcp;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.stereotype.Service;

@Service
public class AgentService {

    private final ChatClient chatClient;

    // ObjectProvider keeps the MCP client optional so local startup doesn't fail.
    public AgentService(ChatClient.Builder chatClientBuilder, ObjectProvider&lt;SyncMcpToolCallbackProvider&gt; mcpToolCallbackProvider) {

        mcpToolCallbackProvider.ifAvailable(provider -&gt; chatClientBuilder.defaultToolCallbacks(provider.getToolCallbacks()));

        this.chatClient = chatClientBuilder.build();
    }

    public String askAgent(final String userPrompt) {
        System.out.println(&quot;THREAD DEBUG -&gt; &quot; + Thread.currentThread());

        return this.chatClient.prompt()
                .user(userPrompt)
                .call()
                .content();
    }
}
</code></pre>
<p>After <strong>starting our Spring Boot 4 application and sending a few requests</strong>, the console produces something like this:</p>
<article class="block block-image  -inline-block -like-text-width -center lazy-true"><img src="https://www.paradigmadigital.com/assets/img/defaults/lazy-load.svg"
          data-src="https://www.paradigmadigital.com/assets/img/resize/small/consola_spring_boot_4_152fde6f65.png"
          data-srcset="https://www.paradigmadigital.com/assets/img/resize/huge/consola_spring_boot_4_152fde6f65.png 1920w,https://www.paradigmadigital.com/assets/img/resize/big/consola_spring_boot_4_152fde6f65.png 1280w,https://www.paradigmadigital.com/assets/img/resize/medium/consola_spring_boot_4_152fde6f65.png 910w,https://www.paradigmadigital.com/assets/img/resize/small/consola_spring_boot_4_152fde6f65.png 455w"
          class="lazy-img"  
                  sizes="(max-width: 767px) 80vw, 75vw"
                  alt="" title="undefined"/></article>
<p>How should we interpret this output?</p>
<ul>
<li><strong>VirtualThread[#57...]</strong> confirms that the request is no longer running on a Tomcat thread but inside its own independent <strong>Virtual Thread</strong>.</li>
<li><strong>ForkJoinPool-1-worker-2</strong> represents the actual operating system thread (<strong>Carrier Thread</strong>) currently executing that virtual thread.</li>
</ul>
<p>If Spring AI's MCP client tracing were enabled, we'd observe that during the tool invocation the <code>VirtualThread[#57]</code> pauses, immediately releasing <code>worker-1</code>, allowing another request (such as <code>VirtualThread[#65]</code>) to use the CPU without delay.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">Simulating high-concurrency workloads</h3>
<p>To truly appreciate the scalability, we can expose the service through a <strong>simple REST controller</strong>. Under heavy incoming traffic, we'll see the system continue responding smoothly without exhausting the connection pool.</p>
<pre><code class="language-java">package com.example.ai.mcp;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(&quot;/api/v1/agent&quot;)
public class AgentController {

    private final AgentService agentService;

    public AgentController(AgentService agentService) {
        this.agentService = agentService;
    }

    @PostMapping(&quot;/ask&quot;)
    public String ask(@RequestBody String prompt) {
        // Spring Boot automatically maps this request to a Virtual Thread.
        return agentService.askAgent(prompt);
    }
}
</code></pre>
<p>Suppose we <strong>simulate 500 users</strong> simultaneously querying the AI agent, where each request requires the LLM to call tools taking <strong>1.5 seconds</strong> to respond.</p>
<p>A traditional server configured with a pool of 200 platform threads would quickly run out of execution capacity.</p>
<p>With Virtual Threads, however, <strong>the JVM creates 500 lightweight virtual threads</strong>. They start instantly, wait for MCP I/O without consuming platform threads, and terminate cleanly after producing their responses.</p>
<p>Everything stays responsive. Everything just works.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Common pitfalls—and how to avoid them</h2>
<ul>
<li><strong>Confusing CPU speed with concurrency</strong></li>
</ul>
<p>Virtual Threads do <strong>not</strong> make local AI algorithms or JSON parsing faster. Their real power lies in eliminating the cost of waiting for I/O. If your workload involves heavy local numerical computation, traditional threads or dedicated thread pools remain the appropriate solution.</p>
<ul>
<li><strong>Ignoring external system limits</strong></li>
</ul>
<p>Just because your application can support thousands of concurrent connections doesn't mean your database or remote MCP server can handle 10,000 simultaneous requests. Always configure sensible timeouts and properly size your HTTP and gRPC connection pools.</p>
<ul>
<li><strong>Failing to monitor the JVM</strong></li>
</ul>
<p>When AI workloads spawn thousands of Virtual Threads, monitoring becomes essential. Tools such as <a href="https://docs.oracle.com/es/solutions/oci-jms-advanced-features/jdk-flight-recorder1.html" target="_blank">JDK Flight Recorder</a> (JFR) help identify scheduler bottlenecks and unexpected blocking behavior.</p>
<h2 class="block block-header h--h30-15-400 left  add-last-dot">Conclusion</h2>
<p>We now have the <strong>essential building blocks for developing the next generation of enterprise AI architectures</strong> using today's most advanced standards.</p>
<p>Combining MCP's flexibility for decoupling business tools with the robustness and efficiency of <strong>Java Virtual Threads</strong> allows us to <strong>finally dispel the myth that Java is too heavy or too slow</strong> for modern AI ecosystems. (Long live Java!)</p>
<p>If you're coming from traditional web development, the <strong>mindset shift</strong> required to design autonomous, network-connected AI agents is substantial. The key is to <strong>experiment, measure infrastructure behavior under load, and continuously refine your tool orchestration flows</strong>.</p>
<p>Building production-ready, massively scalable AI agents is no longer an unattainable goal. And with the pace at which this ecosystem is evolving, the future looks even more promising.</p>
<h3 class="block block-header h--h20-175-500 left  add-last-dot">References</h3>
<ul>
<li><a href="https://modelcontextprotocol.io/" target="_blank">Model Context Protocol (MCP) Official Documentation by Anthropic</a></li>
<li><a href="https://spring.io/projects/spring-ai" target="_blank">Spring AI Project Official Reference and MCP Integration Guide</a></li>
<li><a href="https://openjdk.org/jeps/444" target="_blank">JEP 444: Virtual Threads Specification - OpenJDK</a></li>
<li><a href="https://www.google.com/search?q=https://docs.spring.io/spring-boot/docs/current/reference/html/features.html%23features.spring-application.virtual-threads" target="_blank">Spring Boot Reference Guide: Production-ready Features &amp; Virtual Threads</a></li>
<li><a href="https://github.com/modelcontextprotocol" target="_blank">Anthropic MCP GitHub Repository and Ecosystem Tools</a></li>
</ul>

            ]]>
        </content:encoded>
    </item>
</channel>
</rss>
