<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ashwini Kumar</title>
    <description>The latest articles on DEV Community by Ashwini Kumar (@ashwinisinha).</description>
    <link>https://dev.to/ashwinisinha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3938477%2F34683be6-cb05-4dbe-8723-61294d2701ff.png</url>
      <title>DEV Community: Ashwini Kumar</title>
      <link>https://dev.to/ashwinisinha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashwinisinha"/>
    <language>en</language>
    <item>
      <title>Why Your AI-Generated Code Passes Tests but Fails Production</title>
      <dc:creator>Ashwini Kumar</dc:creator>
      <pubDate>Mon, 18 May 2026 16:06:26 +0000</pubDate>
      <link>https://dev.to/ashwinisinha/why-your-ai-generated-code-passes-tests-but-fails-production-25nd</link>
      <guid>https://dev.to/ashwinisinha/why-your-ai-generated-code-passes-tests-but-fails-production-25nd</guid>
      <description>

&lt;h2&gt;
  
  
  AI coding assistants are fast — but fast in the wrong direction is just a faster way to fail. Here's how specs and BDD scenarios turn AI into a reliable executor, not a fast guesser.
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The views and opinions expressed in this article are solely our own and do not represent those of our employer, Amazon, or any of its affiliates. All content is based on publicly available information and our personal experience. Any references to products or tools are based solely on publicly available information. No confidential or proprietary information has been disclosed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;AI coding assistants have changed the economics of software development. A well-prompted AI can produce in an hour what used to take a day. Teams are shipping faster than ever. And a growing number of those teams are shipping the &lt;strong&gt;wrong thing&lt;/strong&gt; faster than ever.&lt;/p&gt;

&lt;p&gt;The problem isn't the AI. The problem is what you give it to work with.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Is Only as Good as Its Context
&lt;/h2&gt;

&lt;p&gt;When you ask an AI to implement a feature with a vague prompt, it does exactly what you'd expect — it makes reasonable assumptions, fills in the gaps with general software patterns, and produces code that looks correct, compiles cleanly, and is &lt;strong&gt;wrong for your domain&lt;/strong&gt; in ways that won't surface until production.&lt;/p&gt;

&lt;p&gt;This isn't a flaw in the AI. It's a structural reality. AI generates code based on pattern recognition. It doesn't know your business rules. It doesn't know that a missing rent estimate should return a score with &lt;code&gt;confidence: "low"&lt;/code&gt; instead of throwing an error. It doesn't know that negative cash flow shouldn't automatically fail a deal — it should reduce the score by a maximum of 30 points. It fills those gaps with the most statistically likely answer, which is plausible, passes a surface-level review, and &lt;strong&gt;violates your domain logic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The solution isn't better prompting. It's giving the AI a &lt;strong&gt;contract&lt;/strong&gt; to implement against.&lt;/p&gt;

&lt;p&gt;That contract is a &lt;strong&gt;spec&lt;/strong&gt;. The mechanism that enforces it is a &lt;strong&gt;BDD scenario suite&lt;/strong&gt;. Together, they transform AI from a fast guesser into a fast executor — and that distinction is everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Contract: Spec-Driven Development
&lt;/h2&gt;

&lt;p&gt;A spec is not a PRD. It's not a Jira ticket. It's a precise, unambiguous description of what a system must do — inputs, outputs, rules, edge cases, error states — written &lt;strong&gt;before any code exists&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When an AI reads a spec, it stops guessing. Every rule is explicit. Every edge case is named. The AI has no gaps to fill because the spec filled them first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Deal Score Calculation
  &lt;span class="err"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;property&lt;/span&gt; &lt;span class="err"&gt;price,&lt;/span&gt; &lt;span class="err"&gt;rent&lt;/span&gt; &lt;span class="err"&gt;estimate,&lt;/span&gt; &lt;span class="err"&gt;assumptions&lt;/span&gt; &lt;span class="err"&gt;(rate,&lt;/span&gt; &lt;span class="err"&gt;down&lt;/span&gt; &lt;span class="err"&gt;payment,&lt;/span&gt; &lt;span class="err"&gt;taxes)&lt;/span&gt;
  &lt;span class="err"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;score&lt;/span&gt; &lt;span class="err"&gt;0–100,&lt;/span&gt; &lt;span class="err"&gt;grade&lt;/span&gt; &lt;span class="err"&gt;A–F,&lt;/span&gt; &lt;span class="err"&gt;confidence&lt;/span&gt; &lt;span class="err"&gt;level&lt;/span&gt;

  &lt;span class="err"&gt;Rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="err"&gt;- Grade maps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;80+&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;A,&lt;/span&gt; &lt;span class="err"&gt;65–79&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;B,&lt;/span&gt; &lt;span class="err"&gt;50–64&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;C,&lt;/span&gt; &lt;span class="err"&gt;35–49&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;D,&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;35&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;F&lt;/span&gt;
  &lt;span class="err"&gt;- Missing rent estimate → score still computed, confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;"low"&lt;/span&gt;
  &lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="err"&gt;Negative&lt;/span&gt; &lt;span class="err"&gt;cash&lt;/span&gt; &lt;span class="err"&gt;flow&lt;/span&gt; &lt;span class="err"&gt;reduces&lt;/span&gt; &lt;span class="err"&gt;score&lt;/span&gt; &lt;span class="err"&gt;by&lt;/span&gt; &lt;span class="err"&gt;max&lt;/span&gt; &lt;span class="err"&gt;30&lt;/span&gt; &lt;span class="err"&gt;points,&lt;/span&gt; &lt;span class="err"&gt;not&lt;/span&gt; &lt;span class="err"&gt;automatic&lt;/span&gt; &lt;span class="err"&gt;failure&lt;/span&gt;
  &lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="err"&gt;Price&lt;/span&gt; &lt;span class="err"&gt;above&lt;/span&gt; &lt;span class="err"&gt;$800k&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="err"&gt;flag&lt;/span&gt; &lt;span class="err"&gt;"high&lt;/span&gt; &lt;span class="err"&gt;price&lt;/span&gt; &lt;span class="err"&gt;tier",&lt;/span&gt; &lt;span class="err"&gt;no&lt;/span&gt; &lt;span class="err"&gt;score&lt;/span&gt; &lt;span class="err"&gt;penalty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare what an AI produces &lt;strong&gt;with and without&lt;/strong&gt; this spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt without spec: "implement deal score calculation"

AI output:
- Returns 0 for missing rent estimate          ← wrong
- Fails immediately on negative cash flow      ← wrong
- No price tier flagging                       ← missing
- Passes all generic unit tests                ← tests share the same blind spots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt with spec: "implement deal score calculation per this spec: [spec above]"

AI output:
- Handles missing rent estimate, returns confidence: "low"   ✓
- Caps cash flow penalty at 30 points                        ✓
- Flags high price tier without penalizing score             ✓
- Grade mapping matches spec exactly                         ✓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same AI. Same tool. &lt;strong&gt;The spec is the only variable.&lt;/strong&gt; The spec didn't slow the AI down — it directed it. The AI's speed is now working for you instead of against you.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Guardrail: BDD Scenarios
&lt;/h2&gt;

&lt;p&gt;The spec tells the AI &lt;strong&gt;what&lt;/strong&gt; to build. BDD scenarios tell the AI — and your CI pipeline — &lt;strong&gt;whether it built it correctly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;BDD scenarios are written in plain language (typically Gherkin) that describes system behavior from the outside. They are independent of implementation. The AI cannot game them by writing tests that match its own code, because they were written from the spec &lt;strong&gt;before the code existed&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Missing rent estimate
  &lt;span class="nf"&gt;Given &lt;/span&gt;a property priced at $450,000
  &lt;span class="nf"&gt;And &lt;/span&gt;no rent estimate is available
  &lt;span class="nf"&gt;When &lt;/span&gt;the deal score is calculated
  &lt;span class="nf"&gt;Then &lt;/span&gt;a score is still returned
  &lt;span class="nf"&gt;And &lt;/span&gt;the confidence level is &lt;span class="s"&gt;"low"&lt;/span&gt;

&lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Negative cash flow
  &lt;span class="nf"&gt;Given &lt;/span&gt;a property with negative monthly cash flow of -$400
  &lt;span class="nf"&gt;When &lt;/span&gt;the deal score is calculated
  &lt;span class="nf"&gt;Then &lt;/span&gt;the score is reduced by no more than 30 points
  &lt;span class="nf"&gt;And &lt;/span&gt;the deal is not automatically failed

&lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; High price tier
  &lt;span class="nf"&gt;Given &lt;/span&gt;a property priced at $850,000
  &lt;span class="nf"&gt;And &lt;/span&gt;a monthly rent estimate of $4,500
  &lt;span class="nf"&gt;When &lt;/span&gt;the deal score is calculated
  &lt;span class="nf"&gt;Then &lt;/span&gt;the &lt;span class="s"&gt;"high price tier"&lt;/span&gt; flag is present
  &lt;span class="nf"&gt;And &lt;/span&gt;the score is not penalized for price alone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you give an AI these scenarios alongside the spec, it has a &lt;strong&gt;verifiable definition of done&lt;/strong&gt;. It can run the scenarios against its own output, catch failures, and self-correct before a human ever sees the code. The scenarios are not just tests — they are the &lt;strong&gt;AI's feedback loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why BDD scenarios are more valuable in an AI-driven workflow than traditional unit tests. Unit tests written by AI share the same assumptions as the code AI writes. BDD scenarios written from the spec are assumption-free. They describe &lt;strong&gt;behavior&lt;/strong&gt;, not internals.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI as a Spec Stress-Tester
&lt;/h2&gt;

&lt;p&gt;The relationship between AI and specs isn't one-directional. AI is also one of the most effective tools for &lt;strong&gt;finding gaps in a spec&lt;/strong&gt; before implementation begins.&lt;/p&gt;

&lt;p&gt;Give an AI your spec and ask it to break it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt: "Given this spec, what edge cases are missing?

Rules:
- Score is 0–100
- Missing rent estimate → confidence: 'low'
- Negative cash flow reduces score by max 30 points"

AI response:
- What if both rent estimate AND cash flow data are missing simultaneously?
- What if price is $0 or negative — validation error or score of 0?
- What if cash flow is exactly $0 — is that negative or neutral?
- What if compounding penalties push the score below 0?
- Is there a maximum rent estimate that should be flagged as suspicious input?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every one of those questions is a potential production bug. Answered in the spec, they cost nothing. Discovered after deployment, they cost a sprint, a hotfix, and a post-mortem.&amp;gt; &lt;strong&gt;AI-assisted spec review is the highest-leverage use of AI in the entire development cycle&lt;/strong&gt; — because it eliminates bugs before a single line of code is written.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Full AI-Driven Workflow
&lt;/h2&gt;

&lt;p&gt;Here's what a feature cycle looks like when AI, specs, and BDD scenarios work together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1 — Spec authored by humans, stress-tested by AI
  → Tech lead, PM, and senior engineer write the spec
  → AI is asked: "what edge cases are missing from this spec?"
  → Gaps are resolved before implementation begins
  → Spec committed to the repo alongside the code it governs

Day 2 — Scenarios written from the spec
  → Engineers and QA convert spec rules into BDD scenarios
  → AI generates adversarial scenarios: "write scenarios that would
     catch a naive implementation"
  → Every rule has at least one scenario; every edge case has one too

Day 3 — AI implements against spec + scenarios
  → AI is given spec and scenarios as context
  → AI implements to pass scenarios, not to satisfy a vague description
  → AI runs scenarios locally, self-corrects, opens PR with green scenarios

Day 4 — Human review, focused on architecture
  → Reviewer sees passing scenarios — behavioral correctness is already verified
  → Review focuses on approach, performance, and maintainability
  → Review is faster because the question "does this do the right thing?" 
     is already answered

Day 5 — CI enforces the contract forever
  → Scenarios run on every commit
  → Any future AI-generated change that breaks behavior fails the build
  → The spec is permanently enforced without anyone having to remember it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The human's role in this workflow shifts toward high-judgment work: writing specs, reviewing architecture, resolving edge cases. The high-volume work — implementation, test generation, gap analysis — goes to AI. &lt;strong&gt;That's the right division of labor.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI-Generated Tests Are Not Enough
&lt;/h2&gt;

&lt;p&gt;A common mistake teams make when adopting AI tools is asking the AI to write tests alongside the implementation. This feels productive. It produces coverage numbers. It doesn't protect you.&lt;/p&gt;

&lt;p&gt;AI-generated tests share the same assumptions as AI-generated code. If the AI misunderstood the spec (or there was no spec), the tests will validate the &lt;strong&gt;wrong behavior confidently&lt;/strong&gt;. You end up with a green test suite that proves the code does what the AI &lt;em&gt;thought&lt;/em&gt; you wanted, not what you actually needed.&lt;/p&gt;

&lt;p&gt;BDD scenarios written from the spec before implementation are the only tests that are truly independent of the AI's assumptions. They describe what the system must do from the outside. The AI cannot write them correctly without the spec — and if it tries, the gaps in the spec become immediately visible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// AI-generated unit test (no spec):&lt;/span&gt;
&lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;returns 0 when rent estimate is missing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// ← validates wrong behavior&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="c"&gt;# BDD scenario (from spec):&lt;/span&gt;
&lt;span class="nf"&gt;Given &lt;/span&gt;no rent estimate is available
&lt;span class="nf"&gt;When &lt;/span&gt;the deal score is calculated
&lt;span class="nf"&gt;Then &lt;/span&gt;a score is still returned        &lt;span class="c"&gt;# ← catches the wrong behavior&lt;/span&gt;
&lt;span class="nf"&gt;And &lt;/span&gt;the confidence level is &lt;span class="s"&gt;"low"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The BDD scenario catches exactly what the AI-generated test missed. That's not a coincidence — it's the structural difference between &lt;strong&gt;tests that describe implementation&lt;/strong&gt; and &lt;strong&gt;tests that describe behavior&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Compounding Advantage
&lt;/h2&gt;

&lt;p&gt;The real payoff of this approach isn't in a single feature cycle. It's what happens to the codebase over time.&lt;/p&gt;

&lt;p&gt;Every feature built with a spec and BDD scenarios adds a &lt;strong&gt;permanent behavioral contract&lt;/strong&gt; to the codebase. Six months later, when an AI is asked to refactor the scoring engine, the scenarios tell it immediately whether the behavior survived. The AI doesn't need to read the original spec, find the original engineer, or guess at intent. It runs the scenarios. They pass or they don't.&lt;/p&gt;

&lt;p&gt;This is the compounding advantage: &lt;strong&gt;every spec and scenario written today makes every future AI interaction with that code safer and faster.&lt;/strong&gt; The codebase becomes a set of contracts that AI can execute against with confidence, rather than a codebase it has to interpret and guess at.&lt;/p&gt;

&lt;p&gt;Teams that build this way are not just shipping faster today. They are making every future sprint faster too.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Practical Setup
&lt;/h2&gt;

&lt;p&gt;The tooling to run this workflow end to end exists today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spec files:&lt;/strong&gt; Markdown committed to the repo, co-located with the code they govern. AI reads them as context on every implementation prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario files:&lt;/strong&gt; Gherkin syntax, run by Cucumber (JS/Java/Ruby), pytest-bdd (Python), or SpecFlow (.NET). Committed to the repo, run in CI on every commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI tools:&lt;/strong&gt; Claude Code, GitHub Copilot, Cursor — any assistant that accepts file context. The spec and scenario files are the context. Quality of output scales directly with quality of spec.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI enforcement:&lt;/strong&gt; GitHub Actions, AWS CodePipeline, or any CI system. Failing scenario blocks the merge. No exceptions, no overrides.&lt;/p&gt;

&lt;p&gt;The spec and scenarios are not documentation overhead. They are the &lt;strong&gt;interface between human intent and AI execution&lt;/strong&gt;. Remove them and AI is fast and unpredictable. Keep them and AI is fast and contract-bound.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rule That Makes It Work
&lt;/h2&gt;

&lt;p&gt;One rule, enforced without exception:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🚫 No scenario, no code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If a behavior isn't described in a scenario, it doesn't get implemented — by a human or an AI. If the AI wants to handle a case the spec didn't cover, the scenario gets written first. That either updates the spec or surfaces a disagreement that gets resolved before the code exists.&lt;/p&gt;

&lt;p&gt;This rule feels like friction. It &lt;strong&gt;is&lt;/strong&gt; friction — once, upfront, where it costs almost nothing. It eliminates the friction that compounds: the rework, the regression, the hotfix, the post-mortem, the sprint lost to &lt;em&gt;"that's not what I meant."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;AI coding tools are not going to slow down. The teams that figure out how to direct them precisely will compound their advantage over the teams that are still prompting vaguely and reviewing hopefully.&lt;/p&gt;

&lt;p&gt;The spec is the precision. The BDD scenarios are the enforcement. Together they give AI exactly what it needs to stop guessing and start executing — against a contract that humans defined, scenarios verify, and CI protects on every commit forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fast AI with no contract is a liability. Fast AI with a contract is a force multiplier.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Write the spec first. Write the scenarios second. Let the AI do the rest.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Authors
&lt;/h2&gt;

&lt;p&gt;**Written by &lt;a href="https://www.linkedin.com/in/ashwini-kumar-profile/" rel="noopener noreferrer"&gt;&lt;strong&gt;Ashwini Kumar&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/malcolmrjones/" rel="noopener noreferrer"&gt;&lt;strong&gt;Malcolm Jones&lt;/strong&gt;&lt;/a&gt; — Software Engineers @ Amazon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The views and opinions expressed in this article are solely our own and do not represent those of our employer, Amazon, or any of its affiliates.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>productivity</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
