<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.protocomet.com/blogs/tag/ai/feed" rel="self" type="application/rss+xml"/><title>ProtoComet - Blog #ai</title><description>ProtoComet - Blog #ai</description><link>https://www.protocomet.com/blogs/tag/ai</link><lastBuildDate>Tue, 28 Jul 2026 07:19:29 +0530</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[One Year Living with AI Coding Assistants: The Good, the Bad, and the Ugly]]></title><link>https://www.protocomet.com/blogs/post/one-year-living-with-ai-coding-assistants-the-good-the-bad-and-the-ugly</link><description><![CDATA[<img align="left" hspace="5" src="https://www.protocomet.com/blog-assets/ai-code-min.png"/>Almost over a year ago, I started using AI coding assistants the way most people do; curious, a little skeptical, and mostly testing whether the hype ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_HOTyrWo8rYGx-ZGBdW4EtA" data-element-type="section" class="zpsection zpdefault-section zpdefault-section-bg "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_ska-zM5jgi6i1pSV1WCHMA" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content-flex-start zpdefault-section zpdefault-section-bg " data-equal-column="false"><style type="text/css"></style><div data-element-id="elm_D-8EsXlsv9WfVbM7Mg-TOw" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"></style><div data-element-id="elm_bsBxDP1OmjYE9Ebe-5KjQQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_bsBxDP1OmjYE9Ebe-5KjQQ"] .zpimage-container figure img { width: 698px !important ; height: 428px !important ; } } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-custom zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/blog-assets/ai-code-min.png" size="custom" data-lightbox="true"/></picture></span></figure></div>
</div></div></div></div></div><div data-element-id="elm_Vd5zXNcvQ1itsMwqK0vzCw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_1eleDkg6TSiAA7zLeaaIZw" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content- " data-equal-column="false"><style type="text/css"></style><div data-element-id="elm_1HsM8DNcSHasLU5IILY86w" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_sEtfTbrIeK8IQouKxoEV-Q" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><div><p>Almost over a year ago, I started using AI coding assistants the way most people do; curious, a little skeptical, and mostly testing whether the hype matched reality. </p><p>Twelve months and thousands of prompts later, after using these tools across greenfield development, legacy modernization, transformation projects, debugging, architecture exploration, and rapid prototyping, I think the reality is much more nuanced than both the hype and the fear.</p><p>This is my experience after one year of living with them every day.</p><h2><br/></h2><h2>The Good</h2><h4><br/></h4><h4>1. AI is exceptionally good at removing mechanical friction</h4><p>One of the biggest advantages is simple: <b>typing is no longer the bottleneck.</b> And that changes a lot.</p><p>Things developers often avoided because they were tedious are suddenly easy to do thoroughly:</p><ul><li>Validating every input properly</li><li>Handling all edge cases</li><li>Returning appropriate HTTP status codes consistently</li><li>Writing defensive checks</li><li>Generating repetitive mappings and DTOs</li><li>Adding structured logging</li><li>Creating boilerplate tests</li><li>Creating configuration scaffolding</li><li>Refactoring repetitive patterns etc.</li></ul><p><br/></p><p>Earlier, many of these things were skipped, partly because they were mentally exhausting, time-consuming and deadlines on your head. Now, implementing them properly is cheap. The result is not just faster development. It is often <b><i>more complete</i></b> development.</p><p><br/></p><h4>2. AI coding assistants are incredible pair programmers</h4><p>This is probably the most important realization I had over the year.</p><p>The best results for me came from <b>collaborative iteration</b>, working with AI much like an intelligent pair programmer:</p><ul><li>Discussing approaches and exploring trade-offs</li><li>Generating small, focused implementations</li><li>Reviewing outputs critically</li><li>Refining the design gradually</li><li>Building the solution step-by-step</li></ul><p>Very similar to how experienced developers naturally work together; significantly accelerated.</p><p>This approach gave me several compounding advantages:</p><p><b>▪️ Full control over architecture, logic, and implementation quality</b></p><p>The system design still stays in your hands. You decide the boundaries, abstractions, data flow, error handling strategy, performance trade-offs, and operational concerns. AI assists. It should not blindly decide.</p><p><b>▪️ Better visibility into what is actually being generated</b></p><p>Smaller iterative prompts produce smaller, understandable outputs. That matters enormously. When AI generates 2,000 lines at once, nobody truly reviews it properly. But when it generates focused units, it becomes much easier to reason about correctness.</p><p><b>▪️ Easier validation and review of generated code</b></p><p>This workflow naturally encourages review. You inspect assumptions, edge cases, null handling, exception paths, performance implications, concurrency concerns, and security implications, instead of trusting giant auto-generated outputs.</p><p><b>▪️ More maintainable and predictable outcomes</b></p><p>Large AI-generated systems often feel random. Iterative collaboration produces systems that feel intentionally engineered. That difference becomes extremely visible after a few months of maintenance.</p><p><b>▪️ Better contextual efficiency for the AI itself</b></p><p>This part is underrated. Smaller, focused prompts produce dramatically better results because the model has clearer intent, less ambiguity, tighter context, and fewer conflicting instructions. The output quality improves substantially.</p><p><br/></p><h4>3. Legacy modernization and transformation projects are where AI truly shines</h4><p>This was indeed the most practically impactful area for me while working on transforming legacy codebases</p><p>In large enterprise systems, simply <i>understanding</i> the codebase can consume enormous time. AI dramatically reduces this cognitive overhead.</p><p>AI tools are incredibly effective at:</p><ul><li>Understanding unfamiliar codebases and explaining legacy flows</li><li>Tracing dependencies and identifying coupling</li><li>Mapping architecture and analyzing impact areas</li><li>Suggesting safe refactors</li><li>Translating old patterns into modern approaches</li></ul><p>I found it especially useful for migration projects, framework upgrades, monolith decomposition, API modernization, database transition work, dependency cleanup, and dead code identification.</p><p>It gives developers the confidence to make changes in systems that previously felt risky to touch. And that confidence directly improves delivery speed.</p><h2><br/></h2><h2>The Bad </h2><h4><br/></h4><h4>1. Vibed code can become a disaster very quickly</h4><p>While <i>Vibe Coding</i> is genuinely useful for: for validating an idea quickly, demonstrating a concept to stakeholders, testing UX flows, building internal demos, or exploring integrations.</p><p>AI is excellent at producing code that <i>looks</i> convincing. But &quot;looks correct&quot; is not the same as scalable, secure, maintainable, observable, fault tolerant, or operationally safe.</p><p>A lot of vibe-coded systems collapse under real-world complexity. Common problems include poor abstractions, hidden coupling, duplicated logic, inconsistent patterns, weak validation, improper error handling, missing observability, concurrency issues, security vulnerabilities, and poor performance characteristics.</p><h4><br/></h4><h4>2. AI amplifies developer capability; both good and bad</h4><p>AI does not automatically create good engineering. <b>It amplifies the person using it</b>.</p><p>A strong developer becomes dramatically faster. A weak developer becomes dramatically more dangerous because now even mediocre understanding can generate large volumes of seemingly sophisticated code. The output may compile. It may even pass initial testing. But hidden design flaws accumulate rapidly.</p><p>This is why fundamentals matter more than ever. Not less.</p><h2><br/></h2><h2>The Ugly </h2><h4><br/></h4><h4>1. A Superpower in the Wrong Hands</h4><p>Here's the most uncomfortable truth: <b>AI does not fix weak fundamentals, it exposes them.</b> And in the wrong hands, it doesn't just fail silently, it manufactures failure at scale, with confidence.</p><p>A developer who can't reason about data structures, complexity, or system design won't recognize when generated code is subtly inefficient, insecure, or architecturally broken. They'll accept whatever was generated, correct or not, because they have no baseline to evaluate it against.</p><p>That is the real danger. Not that AI will replace good developers, but that it will let underskilled developers produce code that <i>looks</i> competent, passes a casual glance, and then fails in production, under load, or worst of all, could easily become a nightmare to fix.</p><h4><br/></h4><h4>2. The illusion of expertise</h4><p>People can now produce systems far beyond their actual understanding. And initially, this creates the illusion of competence.</p><p>But software engineering is not about generating syntax. Real engineering involves trade-offs, constraints, reliability, maintainability, scalability, debugging, operational behaviour, failure management, and long-term evolution.</p><p>Eventually, reality catches up during incidents, scaling problems, debugging sessions, architectural evolution, or production outages. And that is where actual engineering skill becomes unmistakably visible.</p><h4><br/></h4><h4>3. Mediocre developers will struggle unless they upgrade</h4><p>The industry has changed. Developers whose value came mainly from writing boilerplate, repetitive CRUD implementation, framework memorization, or routine coding tasks will increasingly struggle because AI is becoming very good at exactly those things.</p><p><b>The differentiator now is system thinking</b>, architecture, problem decomposition, domain understanding, debugging ability, performance engineering, security awareness, operational maturity, and decision making.</p><p>Fundamentally strong engineers become far more valuable. Superficial skill sets become increasingly exposed. The gap between a strong developer using AI and a weak developer using AI it's widening. The strong developer uses AI to go further. The weak developer uses it to mask how far behind they already are.</p><h2><br/></h2><h2>What actually worked for me?</h2><p><b>Use AI as:</b></p><ul><li>an accelerator and collaborator</li><li>a brainstorming and trade-off discussion partner</li><li>a reviewer and refactoring helper</li><li>a documentation assistant</li><li>a code exploration and comprehension tool</li></ul><p><b>But not as an autonomous engineer.</b></p><p><br/></p><p>The best workflow, at least for me, has been:</p><ol start="1"><li>Think deeply first</li><li>Design consciously</li><li>Break problems into focused, well-defined units</li><li>Collaborate iteratively with AI on each unit</li><li>Review everything critically</li><li>Validate edge cases thoroughly</li><li>Own the final engineering decisions completely</li></ol><p>That combination is incredibly powerful.</p><p><br/></p><h2>Final Thoughts</h2><p>AI coding assistants are not a gimmick anymore. They are already changing how software gets built. And honestly, I cannot imagine going back to developing without them. The productivity improvement is real. The acceleration is real. The assistance is real. And so are the risks. Used thoughtfully, they can help experienced engineers build better software faster than ever before.</p><p><br/></p><p>The future probably does not belong to developers who resist AI. Nor to developers who blindly depend on it.</p><p>It belongs to developers who learn how to <b>collaborate with it effectively while remaining deeply grounded in engineering fundamentals.</b></p></div><br/></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Thu, 02 Jul 2026 20:46:09 +0530</pubDate></item><item><title><![CDATA[AI Can Code. But Can It Behave? Why ATDD Is the Quality Gate Your Team Is Missing.]]></title><link>https://www.protocomet.com/blogs/post/attd-as-quality-gate-in-the-age-ai</link><description><![CDATA[<img align="left" hspace="5" src="https://www.protocomet.com/blog-assets/ATTD_min.png"/>We are living through the most dramatic acceleration in software development history. AI pair programmers write code faster than most teams can review ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_8TARE0FETMmYyU4CH0rgAA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_gBN8wgi6RCK0zZh4hGVnYw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_uRAhcLiESZSyEtYDzzUhuA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_1OCldWaYPKG0t8LdadA_aA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_1OCldWaYPKG0t8LdadA_aA"] .zpimage-container figure img { width: 1110px ; height: 586.11px ; } } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/blog-assets/attd-min-img.png" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_jzixGlWaR3iivpcSDIORHg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center zptext-align-mobile-center zptext-align-tablet-center " data-editor="true"><div style="text-align:justify;"><span>We are living through the most dramatic acceleration in software development history. AI pair programmers write code faster than most teams can review it. Pull requests arrive in minutes. Features ship in hours. And yet, bugs that shouldn't exist still reach production. Systems that work perfectly in isolation still fail their users. The volume of code has increased; the quality of behaviour has not kept pace.</span><br/><span></span><br/><span>This article makes the case that Acceptance Test-Driven Development (ATDD) is not a relic of agile ceremonies past, it is, in fact, the most important engineering discipline for the AI-assisted era we have just entered. If you care about building software that genuinely does what the business needs it to do, read on.</span></div><div style="text-align:justify;"><span><br/></span></div><div style="text-align:justify;"><span><div><h2 style="margin-bottom:16px;text-indent:0px;">What Is ATDD?</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Acceptance Test-Driven Development is a collaborative practice in which<span>&nbsp;</span><strong>acceptance tests are written before any implementation begins</strong>, and those tests are expressed in the language of the business rather than the language of code.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Where TDD asks<span>&nbsp;</span><em>&quot;does this method do what I wrote it to do?&quot;</em>, ATDD asks<span>&nbsp;</span><em>&quot;does this system do what the user needs it to do?&quot;</em></p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The acceptance test becomes the<span>&nbsp;</span><strong>single shared definition of done</strong>,&nbsp;agreed upon by developers, testers, and business stakeholders before a single line of production code is written. Done is no longer a matter of opinion. It is a passing test.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">In practice, ATDD is most commonly expressed using the<span>&nbsp;</span><strong>Given-When-Then</strong><span>&nbsp;</span>syntax popularised by the Gherkin language:</p><pre style="font-weight:400;text-indent:0px;"><code><span><span><img src="/Sat%20Jun%2027%202026.png" alt="" style="width:593.2px !important;height:156px !important;max-width:100% !important;"/></span></span></code><br/><code></code><code><br/></code></pre><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">This scenario is readable by anyone in the organisation. It is unambiguous. It is executable. And it was written before the<span>&nbsp;</span><code>OrderService</code>,<span>&nbsp;</span><code>EmailService</code>, or<span>&nbsp;</span><code>PaymentGateway</code><span>&nbsp;</span>were touched. That is the discipline of ATDD.</p></div><div><h2 style="margin-bottom:16px;text-indent:0px;">A Brief History and Why It Fell Out of Fashion</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">ATDD emerged from the Extreme Programming (XP) movement in the early 2000s, with tools like FitNesse making it possible to write business-readable tests that executed against real code. Behaviour-Driven Development (BDD), popularised by Dan North around 2006, brought the Given-When-Then syntax and tools like Cucumber that made ATDD approachable at scale.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Yet over the following decade, many teams quietly abandoned it. The reasons were legitimate:</p><ul><li>Gherkin scenarios became verbose and unmaintainable at volume.</li><li>Business stakeholders rarely wrote or even read the scenarios after the first sprint.</li><li>Test suites became slow as they grew to cover every edge case.</li><li>Teams treated every unit test as an acceptance test and vice versa, creating confusion.</li><br/></ul></div><div><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The result was that ATDD was often dismissed as overhead. Teams doubled down on unit tests with mocks and shipped faster — at least on the surface.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">What they lost in the process was the thing ATDD provides that nothing else does:<span>&nbsp;</span><strong>a living, executable specification of what the system is supposed to do</strong>, owned jointly by the business and the engineering team.</p></div><div><h2 style="margin-bottom:16px;text-indent:0px;">The Three Amigos: The Human Practice Behind the Tool</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">ATDD is not primarily a testing tool — it is a<span>&nbsp;</span><strong>communication practice</strong>. At its heart is a ritual known as the Three Amigos meeting: a focused, short conversation between a<span>&nbsp;</span><strong>Business Analyst</strong><span>&nbsp;</span>(representing the what), a<span>&nbsp;</span><strong>Developer</strong><span>&nbsp;</span>(representing the how), and a<span>&nbsp;</span><strong>Tester</strong><span>&nbsp;</span>(representing the what-could-go-wrong).</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Before any story is developed, these three perspectives meet to define the acceptance criteria. The output is not a document — it is an executable scenario. This conversation surfaces misunderstandings that would otherwise become bugs. It aligns the team around intent, not assumption. And it produces a test that will live in the codebase long after the sprint ends.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The Three Amigos is where ATDD generates most of its value. The tooling simply preserves and automates what the conversation produced.</p><h2>Is BDD the Same as ATDD? Clarifying a Common Confusion</h2><div><div><p style="margin-bottom:8pt;">At this point, an obvious question arises, because the Given-When-Then scenario above is exactly what most people associate with Behaviour-Driven Development. So are ATDD and BDD simply two names for the same thing? Not quite — and the distinction is worth holding onto.</p><p style="margin-bottom:8pt;"><b><span>ATDD </span></b>is a process discipline. It is the rule that acceptance tests must exist, and must be agreed upon, before coding begins. It says nothing about what language or syntax those tests must use.</p><p style="margin-bottom:8pt;"><b><span>BDD </span></b>is a communication and design discipline. It specifies how behaviour should be described using a shared, structured, plain-language vocabulary (Given-When-Then) so that business and engineering are provably talking about the same thing.</p><p style="margin-bottom:8pt;"></p><div><p style="margin-bottom:8pt;">This relationship can be visualised as three concentric layers, where each layer wraps around — and depends on — the one inside it.</p></div><p></p></div><span><img src="/Sat%20Jun%2027%202026-1.png" alt="" style="width:570.08px !important;height:262px !important;max-width:100% !important;"/></span></div><div><span><span><span>TDD drives the internal design of individual classes. BDD wraps around that with a shared vocabulary so business and engineering describe behaviour identically. ATDD is the outermost discipline that insists the BDD-style scenario must exist and be agreed upon before any of the inner work begins. All BDD is therefore a form of ATDD but ATDD does not strictly require BDD's specific syntax; a team could in principle write acceptance tests in another format and still be doing ATDD.</span></span></span></div><div><span><span><span><br/></span></span></span></div><h2><span><span><span><span><span>Side by Side: TDD, BDD, and ATDD</span></span><br/></span></span></span></h2><div><span><span><span><br/></span></span></span></div><div><span><span><span><div><table border="1" cellspacing="0" cellpadding="0" width="627"><thead><tr><td style="text-align:left;"><p><b><span>Dimension</span></b></p></td><td style="text-align:left;"><p><b><span>TDD</span></b></p></td><td style="text-align:left;"><p><b><span>BDD</span></b></p></td><td style="text-align:left;"><p><b><span>ATDD</span></b></p></td></tr></thead><tbody><tr><td style="text-align:left;"><p><span>Primary question</span></p></td><td style="text-align:left;"><p><span>Does this class work correctly?</span></p></td><td style="text-align:left;"><p><span>Are we describing behaviour in language everyone shares?</span></p></td><td style="text-align:left;"><p><span>Does this feature behave correctly, end to end?</span></p></td></tr><tr><td style="text-align:left;"><p><span>Written by</span></p></td><td style="text-align:left;"><p><span>Developer</span></p></td><td style="text-align:left;"><p><span>Developer, tester, and business analyst together</span></p></td><td style="text-align:left;"><p><span>Developer, tester, and business analyst together</span></p></td></tr><tr><td style="text-align:left;"><p><span>Test boundary</span></p></td><td style="text-align:left;"><p><span>A single class or method</span></p></td><td style="text-align:left;"><p><span>A behaviour, often spanning classes</span></p></td><td style="text-align:left;"><p><span>A vertical slice of the system</span></p></td></tr><tr><td style="text-align:left;"><p><span>Language</span></p></td><td style="text-align:left;"><p><span>Code</span></p></td><td style="text-align:left;"><p><span>Structured plain language (Given-When-Then)</span></p></td><td style="text-align:left;"><p><span>Business language, format flexible</span></p></td></tr><tr><td style="text-align:left;"><p><span>Mocking strategy</span></p></td><td style="text-align:left;"><p><span>Heavy. Isolate every dependency</span></p></td><td style="text-align:left;"><p><span>Minimal. Real collaborators participate</span></p></td><td style="text-align:left;" class="zp-selected-cell"><p><span>Minimal. Only true infrastructure is faked</span></p></td></tr><tr><td style="text-align:left;"><p><span>Core artefact</span></p></td><td style="text-align:left;"><p><span>Unit test</span></p></td><td style="text-align:left;"><p><span>Behaviour scenario</span></p></td><td style="text-align:left;"><p><span>Acceptance test (any format)</span></p></td></tr><tr><td style="text-align:left;"><p><span>Typical tooling</span></p></td><td style="text-align:left;"><p><span>JUnit, NUnit, xUnit, Jest</span></p></td><td style="text-align:left;"><p><span>Cucumber, SpecFlow, Behave, JBehave</span></p></td><td style="text-align:left;"><p><span>Any test framework; often the same as BDD</span></p></td></tr></tbody></table></div><br/></span></span></span></div><div><span><span><span><div><h2 style="margin-bottom:16px;text-indent:0px;">What ATDD Tests and What It Doesn't</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">A common mistake is treating ATDD as a replacement for all other testing. It is not. ATDD sits at a specific layer of the test pyramid, and its power comes from being used at the right layer.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>ATDD acceptance tests cover:</strong></p><ul><li>Core business behaviours and user journeys (the happy path)</li><li>Key business rules that define the product (pricing logic, eligibility criteria, state transitions)</li><li>Cross-cutting flows where multiple components must collaborate correctly</li></ul><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong><br/></strong></p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Unit tests (TDD) still own:</strong></p><ul><li>Complex algorithms and calculations</li><li>Edge cases, error handling, and boundary conditions</li><li>Pure domain logic that benefits from exhaustive permutation testing</li></ul><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong><br/></strong></p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>ATDD does not replace:</strong></p><ul><li>Security and penetration testing</li><li>Performance and load testing</li><li>Exploratory testing</li><li>Infrastructure and configuration validation</li></ul></div><div><h2 style="margin-bottom:16px;text-indent:0px;">ATDD and Architecture: The Hexagonal Connection</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Adopting ATDD seriously will push your architecture in a specific and healthy direction. When your tests exercise real domain objects instead of mocking them, your design is exposed in ways that unit tests with mocks never reveal.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">Classes with too many responsibilities become hard to include in a scenario because they do too much. Anemic domain models become obvious because the test needs to orchestrate five service calls to achieve one business outcome. Tight coupling to infrastructure bleeds into the test setup and makes scenarios brittle.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The natural response to these pressures is the<span>&nbsp;</span><strong>Hexagonal Architecture (Ports and Adapters)</strong><span>&nbsp;</span>pattern. In a hexagonal architecture, your domain core has no dependencies on infrastructure. Adapters connect the domain to databases, APIs, and UIs through defined ports. ATDD tests live at the domain boundary, exercising real business logic while substituting lightweight in-memory adapters for infrastructure.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The result is a codebase that is simultaneously well-tested and well-designed, because the tests create pressure toward good design from day one.</p></div><div><h2 style="margin-bottom:16px;text-indent:0px;">Why ATDD Has Become Critical in the Age of AI</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">This is the conversation the industry needs to have urgently, and few are having it.</p><h4 style="margin-bottom:16px;text-indent:0px;">1. AI generates code at a pace that outstrips human comprehension</h4><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">When a developer writes code, there is inherent friction — the time it takes to think and type — that creates natural checkpoints for reflection. When an AI coding assistant generates a feature implementation in thirty seconds, that friction disappears. Code is produced faster than it can be understood. The risk of shipping code that is syntactically correct but behaviourally wrong has never been higher.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">ATDD acceptance tests are the<span>&nbsp;</span><strong>specification that AI must satisfy</strong>. They are not an afterthought — they are the brief. When you give an AI tool a clear set of Given-When-Then scenarios, you are giving it unambiguous success criteria. The AI's job is to make those tests pass, not to guess at intent.</p><h4 style="margin-bottom:16px;text-indent:0px;">2. AI does not understand business intent, only instructions</h4><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">An AI coding assistant is extraordinarily good at writing code that satisfies the literal prompt it receives. It is not capable of surfacing implicit business rules that the developer forgot to mention. It cannot flag that the scenario it was given is incomplete. It cannot challenge the brief.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The Three Amigos meeting that ATDD requires produces a brief that is explicit, reviewed by multiple perspectives, and expressed as executable scenarios. This is precisely the quality of specification that allows AI tools to operate safely. Vague user stories produce behaviourally ambiguous code, whether written by a human or an AI.</p><h4 style="margin-bottom:16px;text-indent:0px;">3. AI-generated code tends to produce plausible-but-wrong behaviour at the seams</h4><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">In my observation, AI-generated code performs reliably well within a single class or function. Where it tends to introduce subtle defects is at the<span>&nbsp;</span><strong>boundary between components</strong><span>&nbsp;</span>— where one module hands data to another, where a domain event triggers a side effect, where an aggregate boundary is crossed. These are precisely the seams that ATDD tests cover and that unit tests with mocks do not.</p><h4 style="margin-bottom:16px;text-indent:0px;">4. AI accelerates technical debt accumulation</h4><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The faster code is generated, the faster architectural compromises accumulate — unless there is a forcing function. ATDD scenarios that exercise vertical slices make shortcuts visible immediately. If an AI shortcuts through the domain model to hit the persistence layer directly, the acceptance test may still pass today, but it becomes progressively harder to maintain as the shortcut proliferates. ATDD does not prevent shortcuts, but it makes their cost visible sooner.</p><h4 style="margin-bottom:16px;text-indent:0px;">5. Living documentation becomes essential at AI scale</h4><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">When code volume doubles every quarter, no human team can maintain mental maps of what the system does. Traditional documentation falls behind immediately. ATDD scenarios, by contrast, are always current — because they are executed in CI/CD and a failing scenario means a broken build. They are the only form of documentation that is self-maintaining by construction. In an AI-augmented team shipping at high velocity, this is not a nice-to-have; it is the only way to maintain shared understanding.</p></div><div><h2 style="margin-bottom:16px;text-indent:0px;">How ATDD and TDD Work Together in Practice</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The mature engineering team does not choose between TDD and ATDD. It uses both, at the appropriate level, for the appropriate purpose. Here is the discipline in practice.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Step 1: Three Amigos defines the acceptance scenarios</strong><span>&nbsp;</span>Before development begins, the business analyst, developer, and tester collaborate to produce two to five Gherkin scenarios that define the feature. These are committed to the repository. The build is now red.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Step 2: The developer works TDD inside the acceptance test boundary</strong><span>&nbsp;</span>With the acceptance test providing the outer boundary, the developer uses TDD to build the internal implementation class by class, method by method. Unit tests ensure each collaborating class is sound.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Step 3: The acceptance test turns green</strong><span>&nbsp;</span>When the full behaviour is implemented, the acceptance test passes. The feature is done — by definition, not by opinion.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Step 4: Edge cases and error paths are covered by unit tests</strong><span>&nbsp;</span>The acceptance test covers the primary flow. Unit tests cover the permutations. Neither layer duplicates the other's work.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><strong>Step 5: The acceptance test becomes living documentation</strong><span>&nbsp;</span>The Gherkin scenario is published alongside the codebase. New team members — human and AI alike — can read it to understand what the system does.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">This is not a theoretical workflow. Teams practising this discipline consistently report fewer production defects, faster onboarding of new developers, and dramatically reduced regression costs.</p></div><div><h2 style="margin-bottom:16px;text-indent:0px;">Conclusion: The Specification Is the Product</h2><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">The most durable lesson I have drawn from twenty years of building and advising on complex systems is this:<span>&nbsp;</span><strong>the teams that win are the teams with the clearest shared understanding of what done means</strong>.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">In the early days of a project, that understanding lives in people's heads. As the team grows and the codebase matures, it must move into something more durable. Without ATDD, that understanding lives in documents that go stale, in tribal knowledge that leaves with senior developers, and in assumptions that quietly diverge between engineering and the business.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">With ATDD, that understanding lives in executable scenarios that are always current, always precise, and readable by anyone, including the AI tools that are increasingly doing the work of implementation.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;">We are entering an era where the bottleneck in software development is no longer writing code. It is ensuring that the code written by humans, by AI, by the combination of both actually satisfies the intent of the people who asked for it. ATDD is the discipline that closes that gap.</p><p style="margin-bottom:16px;font-weight:400;text-indent:0px;"><span style="font-weight:bold;">Your AI can code. Make sure it knows what to build.</span></p></div></span></span></span></div></div></span><span><br/></span></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Sat, 27 Jun 2026 20:59:26 +0530</pubDate></item><item><title><![CDATA[Agentic cloud operations: The Way We Run the Cloud Is About to Change, And I Think It's Overdue]]></title><link>https://www.protocomet.com/blogs/post/Agentic-cloud-operations</link><description><![CDATA[<img align="left" hspace="5" src="https://www.protocomet.com/blog-assets/agentic_cloud_operations.jpg"/> For the past decade, cloud operations has largely been about managing scale: more infrastructure, more services, more dashboards, more alerts ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_1VlokfrLRFK8Qwvs5VF4dw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_2zpRvsCVTBS5NzY5fDlNtw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_RoaOgxt_T8e7s4O26MkEsQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_u5_nYzaw685LwXHrWnUBbA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_u5_nYzaw685LwXHrWnUBbA"] .zpimage-container figure img { width: 1110px ; height: 624.86px ; } } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/blog-assets/agentic_cloud_operations.jpg" size="fit" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_VvXh4Qv7Ccvy-V90ggXsMA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><p> For the past decade, cloud operations has largely been about managing scale: more infrastructure, more services, more dashboards, more alerts. We built bigger teams, layered on more tooling, and hired our way through the complexity. It worked; until it didn't. </p><p> AI workloads and modern applications are changing the rules. Environments now shift from experimentation to full production in weeks. Infrastructure is continuously updated, scaled, and reconfigured. Telemetry streams from every layer; health, configuration, cost, performance, security, faster than any team can meaningfully process. The reality is that traditional operations simply weren't designed for this level of speed and interconnectedness. </p><p> So what's the answer? I believe it's a fundamental shift in the operating model itself. </p><h3> From Reactive to Agentic </h3><p> What's emerging is what Microsoft is calling<strong><em>agentic cloud operations</em></strong>and it's worth paying close attention to, because the concept goes well beyond another AI feature or dashboard upgrade. </p><p> The idea is this: rather than humans manually correlating signals and triaging issues, AI-powered agents are embedded directly into the operational workflow. They don't just surface insights, they translate them into coordinated, governed action across the full cloud lifecycle. </p><p> Microsoft's<strong>Azure Copilot</strong>is the interface bringing this to life. It's not a bolt-on chatbot. It's a unified environment grounded in your actual Azure setup, your subscriptions, resources, policies, and operational history, accessible through natural language, chat, console, or CLI. And it's backed by a suite of agents built for every phase of the cloud lifecycle. </p><h3> What the Agents Actually Do </h3><p> This is where it gets practical. The agentic capabilities span six key operational domains: </p><p><strong>Migration</strong>: Discovers existing environments, maps dependencies, and identifies modernization paths before anything moves. Later in the lifecycle, it re-enters to identify opportunities for continuous refactoring — making modernization an ongoing practice, not a one-time project. </p><p><strong>Deployment</strong>: Guides well-architected design, generates infrastructure-as-code, and supports governed, repeatable deployment workflows that validate both infrastructure and application rollout before you go live. </p><p><strong>Observability</strong>: Establishes baseline health from the moment production traffic hits and provides continuous, full-stack visibility and diagnosis across applications and infrastructure in ongoing operations. </p><p><strong>Resiliency</strong>: Identifies gaps across availability, recovery, backup, and continuity upfront. In ongoing ops, it shifts to proactive posture management, continuously strengthening protection against risks like ransomware, not just validating configurations after the fact. </p><p><strong>Optimization</strong>: Identifies and executes improvements across cost, performance, and sustainability. Notably, it can compare financial and carbon impact in real time, a capability that's increasingly relevant as organizations manage both FinOps and sustainability commitments. </p><p><strong>Troubleshooting</strong>: Accelerates issue resolution by diagnosing root causes, recommending fixes, and initiating support actions. The goal is to move teams from reactive firefighting to rapid, context-aware incident resolution. </p><p> What matters here is that these agents don't operate in isolation. They work as a connected, context-aware system, correlating real-time signals, understanding operational context, and taking governed action where it matters most. </p></div><br/><p></p></div>
</div><div data-element-id="elm_H7wqSky5e-JpDqVAr70DMw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_H7wqSky5e-JpDqVAr70DMw"] .zpimage-container figure img { width: 892px !important ; height: 665px !important ; } } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-original zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/blog-assets/agentic_cloud_operations_flow.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_F4tzIDRv5iJgfuVlLNj8iQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><h3> Governance Is Not an Afterthought </h3><p> For anyone leading technology in a regulated or mission-critical environment, the governance story matters just as much as the capability story. This is a point I always push teams on when evaluating agentic tooling. </p><p> Azure's approach embeds governance at every layer. Every agent-initiated action honors existing policy, security, and RBAC controls. Actions are reviewable, traceable, and auditable. There are also features like Bring Your Own Storage for conversation history, keeping operational data within your own Azure environment for sovereignty and compliance. </p><p> The framing here is important: autonomy and safety advancing together. Human oversight isn't removed from automated workflows, it's designed to remain central to them. </p><h3> My Take: Why This Matters Now </h3><p> I've seen a lot of &quot;AI for operations&quot; announcements over the years. Most have been incremental, smarter alerting, better anomaly detection, assisted root cause analysis. Useful, but not transformative. </p><p> What's different about the agentic model is that it closes the loop. Insight becomes execution. The system doesn't just tell you there's a problem or an opportunity, it takes action within the boundaries you've defined. That's a meaningful step forward. </p><p> The organizations that will benefit most from this shift are those that start building the right operational habits now: defining clear governance boundaries, investing in observability foundations, and treating AI agents as genuine operational partners rather than novelty tools. </p><p> The cloud is getting more dynamic, not less. Our operating models need to evolve to match it. </p></div><br/><p></p></div>
</div><div data-element-id="elm_eoLQCmHySkixfx8Y9RrDHQ" data-element-type="button" class="zpelement zpelem-button "><style></style><div class="zpbutton-container zpbutton-align-center zpbutton-align-mobile-center zpbutton-align-tablet-center"><style type="text/css"></style><a class="zpbutton-wrapper zpbutton zpbutton-type-primary zpbutton-size-md " href="javascript:;" target="_blank"><span class="zpbutton-content">Get Started Now</span></a></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Fri, 20 Mar 2026 14:31:05 +0530</pubDate></item></channel></rss>