<?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>Forem: Prakhar</title>
    <description>The latest articles on Forem by Prakhar (@prakharb).</description>
    <link>https://forem.com/prakharb</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%2F3707198%2Fcfd64f7e-c639-4b81-ab0b-39858a25bd4d.webp</url>
      <title>Forem: Prakhar</title>
      <link>https://forem.com/prakharb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/prakharb"/>
    <language>en</language>
    <item>
      <title>Voice AI Agents That Actually Close Deals (Not Just Demo Well)</title>
      <dc:creator>Prakhar</dc:creator>
      <pubDate>Sat, 11 Apr 2026 09:12:42 +0000</pubDate>
      <link>https://forem.com/prakharb/voice-ai-agents-that-actually-close-deals-not-just-demo-well-1c53</link>
      <guid>https://forem.com/prakharb/voice-ai-agents-that-actually-close-deals-not-just-demo-well-1c53</guid>
      <description>&lt;p&gt;The voice AI demo is always the same. You call in, the agent greets you warmly, understands your request, handles it perfectly. The room applauds. You ship it.&lt;/p&gt;

&lt;p&gt;Then a real customer calls in with a toddler screaming in the background. Asks something the agent wasn't trained on. Gets frustrated. Hangs up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's the gap. And it's enormous.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where voice AI actually works
&lt;/h2&gt;

&lt;p&gt;The wins are real. The numbers back them up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inbound qualification.&lt;/strong&gt; The first 90 seconds of a sales call — "what are you looking for, what's your company size, what's your timeline" — that's pattern matching with a voice interface. The models are good enough now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Needle proved it at scale.&lt;/strong&gt; 60,000 calls per month with Bland AI. 81% fully resolved without humans. 92% cost reduction vs. human agents. $1M/year in savings. That's not a demo. That's a production system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Appointment scheduling.&lt;/strong&gt; Structured conversation, clear outcome, no nuance needed. Voice AI handles it cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-sale check-ins.&lt;/strong&gt; "How was your onboarding?" Low-risk, high-volume, perfect for AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multilingual support.&lt;/strong&gt; One agent, 30+ languages. Try staffing that with people.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you're actually paying
&lt;/h2&gt;

&lt;p&gt;The pricing models are wildly different. Most people don't understand them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Per minute&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bland AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.11–$0.14&lt;/td&gt;
&lt;td&gt;Bundled (everything included)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retell AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.07–$0.31&lt;/td&gt;
&lt;td&gt;Unbundled (depends on LLM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Synthflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.15–$0.24&lt;/td&gt;
&lt;td&gt;Unbundled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vapi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.23–$0.33&lt;/td&gt;
&lt;td&gt;Platform fee + providers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bundled = one price for everything (LLM, speech-to-text, text-to-speech, telephony). Unbundled = you pay for each component. Cheaper if you choose wisely. More moving parts to manage.&lt;/p&gt;

&lt;p&gt;For context: a human inside sales rep costs roughly $15-25/hour. At $0.11/min, Bland AI costs $6.60/hour. That's a 3-4x reduction before you factor in 24/7 availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But the cheapest option isn't always the right one.&lt;/strong&gt; Integration quality and latency matter more than per-minute pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency — the make-or-break number
&lt;/h2&gt;

&lt;p&gt;Human conversation: 200-500ms between turns. Anything over 1.5 seconds feels unnatural. Over 2 seconds and the caller thinks the call dropped.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retell AI:&lt;/strong&gt; ~800ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthflow (with edge):&lt;/strong&gt; &amp;lt;600ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typical range:&lt;/strong&gt; 800ms–1.5s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most platforms are at 2-4x human latency. Acceptable for transactional calls. Noticeable for longer conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test latency with your actual prompts and telephony setup.&lt;/strong&gt; The marketing numbers are always best-case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it falls apart
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Complex negotiation.&lt;/strong&gt; Most real deals involve custom pricing, multi-stakeholder alignment, or scope creep. The agent can't read hesitation. Can't tell when "let me think about it" means 80% sold vs. being polite before ghosting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edge cases.&lt;/strong&gt; The customer asks about a discontinued feature. References a competitor's pricing. Makes a joke. The agent either ignores it or hallucinates an answer. Both are bad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emotional intelligence.&lt;/strong&gt; A human rep hears frustration and changes approach. Voice AI detects sentiment — sort of — but can't adapt strategy. It just keeps going down the script.&lt;/p&gt;

&lt;h2&gt;
  
  
  The regulatory minefield
&lt;/h2&gt;

&lt;p&gt;Most people ignore this until they get fined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The FCC confirmed in February 2024: AI voices count as "artificial voice" under the TCPA.&lt;/strong&gt; Written consent required for marketing AI calls. Penalties: $500-$1,500 per call. New opt-out rules effective April 2025.&lt;/p&gt;

&lt;p&gt;Some states require disclosing that the caller is an AI before the conversation starts. Others have specific recording consent laws for AI-generated voices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talk to a lawyer before you deploy.&lt;/strong&gt; The technology works. The compliance landscape is a minefield.&lt;/p&gt;

&lt;h2&gt;
  
  
  CRM integration — what actually matters
&lt;/h2&gt;

&lt;p&gt;This determines whether your voice AI is useful or just another demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retell AI&lt;/strong&gt; and &lt;strong&gt;Synthflow&lt;/strong&gt; have native Salesforce + HubSpot integrations. Transcripts, outcomes, next steps sync automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bland AI&lt;/strong&gt; relies on Zapier. It works, but less reliable, adds latency.&lt;/li&gt;
&lt;li&gt;Most platforms support webhooks for custom integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Integration quality matters more than AI quality.&lt;/strong&gt; A mediocre AI that logs every call properly in Salesforce beats a brilliant AI that doesn't sync data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture that actually works
&lt;/h2&gt;

&lt;p&gt;Teams closing real deals use a &lt;strong&gt;handoff architecture.&lt;/strong&gt; Not a single agent that does everything.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Voice AI handles the front door.&lt;/strong&gt; Qualification, scheduling, FAQ. 20 things well, not 200 things poorly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Human reps handle the close.&lt;/strong&gt; When complexity hits — pricing, objections, relationship building — the AI transfers. Not after the customer is frustrated. Immediately when it detects it's out of depth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI assists the human.&lt;/strong&gt; Transcribes, surfaces account data, suggests next steps. The human makes the decisions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Needle's model is the proof point: 81% AI-resolved, 19% handed to humans.&lt;/strong&gt; The AI handles the repetitive 81%, humans handle the high-value 19%. That's the ROI sweet spot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do starting today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use a purpose-built platform.&lt;/strong&gt; Don't wire together Whisper + GPT + TTS yourself. The latency will kill you. Bland AI or Retell AI are the practical choices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One use case.&lt;/strong&gt; Inbound qualification. Not the entire sales process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Record every call.&lt;/strong&gt; Your first month will reveal 50 scenarios you didn't plan for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hard transfer rule.&lt;/strong&gt; Outside the knowledge base twice? Transfer. No exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRM integration from day one.&lt;/strong&gt; If the call data isn't in Salesforce, it didn't happen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Legal review before launch.&lt;/strong&gt; TCPA compliance is not optional.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's coming
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-speech models&lt;/strong&gt; — process speech directly instead of STT → LLM → TTS. Lower latency, more natural.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5 class models&lt;/strong&gt; — better reasoning, fewer hallucinations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; — standardized way for AI agents to access external tools. Better CRM integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI SDRs becoming standard&lt;/strong&gt; — not because they replace humans, but because they handle the top of the funnel while humans close.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The uncomfortable truth
&lt;/h2&gt;

&lt;p&gt;Voice AI that closes deals isn't a technology problem. It's a process design problem.&lt;/p&gt;

&lt;p&gt;The teams succeeding aren't the ones with the best AI models. They're the ones who designed a workflow where AI does what it's good at and humans do what they're good at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The demo is easy. The architecture is the hard part.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is an independent comparison with no affiliate links. I'm not sponsored by any voice AI platform. Pricing data is from publicly available information as of April 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We break down what's actually working in tech — real numbers, no hype. More at &lt;a href="https://www.nandann.com/" rel="noopener noreferrer"&gt;nandann.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>voiceai</category>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>5 Real Bugs I Found in AI-Generated Code (That Looked Fine)</title>
      <dc:creator>Prakhar</dc:creator>
      <pubDate>Thu, 09 Apr 2026 16:22:17 +0000</pubDate>
      <link>https://forem.com/prakharb/5-real-bugs-i-found-in-ai-generated-code-that-looked-fine-1bfg</link>
      <guid>https://forem.com/prakharb/5-real-bugs-i-found-in-ai-generated-code-that-looked-fine-1bfg</guid>
      <description>&lt;h1&gt;
  
  
  5 Real Bugs I Found in AI-Generated Code (That Looked Fine)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  AI makes building easy. It also makes it easy to ship broken systems.
&lt;/h2&gt;




&lt;p&gt;I built a working app in few hours.&lt;/p&gt;

&lt;p&gt;No planning. No architecture. No real thinking.&lt;/p&gt;

&lt;p&gt;Just prompts.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;Or at least… it looked like it worked.&lt;/p&gt;

&lt;p&gt;That’s the part that worries me.&lt;/p&gt;

&lt;p&gt;Because “working” is doing a lot of heavy lifting here.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The "Everything Is Admin" Bug
&lt;/h2&gt;

&lt;p&gt;AI wrote this:&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;allowAccess&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At a glance, nothing feels off.&lt;/p&gt;

&lt;p&gt;But that’s assignment, not comparison.&lt;/p&gt;

&lt;p&gt;Which means every user becomes admin.&lt;/p&gt;

&lt;p&gt;No crash. No error. No warning.&lt;/p&gt;

&lt;p&gt;Just a silent failure sitting in your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is exactly the kind of bug that slips into production.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The API That Never Existed
&lt;/h2&gt;

&lt;p&gt;AI assumed this:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks reasonable.&lt;/p&gt;

&lt;p&gt;But the real response was:&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="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It worked during testing because the mock matched the assumption.&lt;/p&gt;

&lt;p&gt;It broke instantly with real data.&lt;/p&gt;

&lt;p&gt;And the worst part?&lt;/p&gt;

&lt;p&gt;Nobody thought to question it.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The “Works on My Machine” Performance Killer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllUsers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works perfectly.&lt;/p&gt;

&lt;p&gt;Until it doesn’t.&lt;/p&gt;

&lt;p&gt;With 50 users, it’s fast.&lt;/p&gt;

&lt;p&gt;With 200,000 users, it’s a problem.&lt;/p&gt;

&lt;p&gt;Now you’re dealing with slow APIs, memory spikes, and random timeouts.&lt;/p&gt;

&lt;p&gt;AI gave you something that was technically correct.&lt;/p&gt;

&lt;p&gt;It just wasn’t built for reality.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The SQL Injection Gift
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where things get serious.&lt;/p&gt;

&lt;p&gt;No sanitization. No validation.&lt;/p&gt;

&lt;p&gt;Now someone sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And suddenly, your entire database is exposed.&lt;/p&gt;

&lt;p&gt;No alarms. No obvious signs.&lt;/p&gt;

&lt;p&gt;Just data… gone.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The XSS Time Bomb
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks harmless.&lt;/p&gt;

&lt;p&gt;But nothing is escaped.&lt;/p&gt;

&lt;p&gt;Now a user sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hacked&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And your app happily runs it.&lt;/p&gt;

&lt;p&gt;Because you trusted the input.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Actually Happening
&lt;/h2&gt;

&lt;p&gt;AI isn’t dumb.&lt;/p&gt;

&lt;p&gt;It’s just confidently incomplete.&lt;/p&gt;

&lt;p&gt;Most of the time, the code it generates looks correct.&lt;/p&gt;

&lt;p&gt;It runs. It passes basic checks. It feels right.&lt;/p&gt;

&lt;p&gt;And that’s exactly why people trust it.&lt;/p&gt;

&lt;p&gt;But the missing 10% — the edge cases, the assumptions, the things you didn’t verify — that’s where things break.&lt;/p&gt;

&lt;p&gt;And they don’t break immediately.&lt;/p&gt;

&lt;p&gt;They break later. Under load. With real users.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Skill Shift
&lt;/h2&gt;

&lt;p&gt;A few years ago, writing code was the hard part.&lt;/p&gt;

&lt;p&gt;You had to think through everything. Debug carefully. Read documentation.&lt;/p&gt;

&lt;p&gt;That effort forced understanding.&lt;/p&gt;

&lt;p&gt;Now, you can generate working code in minutes.&lt;/p&gt;

&lt;p&gt;Which means you can also skip understanding in minutes.&lt;/p&gt;

&lt;p&gt;That’s the shift.&lt;/p&gt;

&lt;p&gt;And most people haven’t adjusted to it yet.&lt;/p&gt;

&lt;p&gt;The engineers who do well now aren’t just fast.&lt;/p&gt;

&lt;p&gt;They’re careful.&lt;/p&gt;

&lt;p&gt;They question things.&lt;/p&gt;

&lt;p&gt;They look at working code and ask, “what’s wrong with this?”&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Works (Simple Rule)
&lt;/h2&gt;

&lt;p&gt;Before using AI, take a minute.&lt;/p&gt;

&lt;p&gt;Write what you’re building.&lt;/p&gt;

&lt;p&gt;Not in your head. Actually write it down.&lt;/p&gt;

&lt;p&gt;What problem are you solving?&lt;br&gt;
Who is it for?&lt;br&gt;
What does success look like?&lt;/p&gt;

&lt;p&gt;Then use AI.&lt;/p&gt;

&lt;p&gt;And after it gives you code, assume something is wrong.&lt;/p&gt;

&lt;p&gt;Check everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inputs&lt;/li&gt;
&lt;li&gt;outputs&lt;/li&gt;
&lt;li&gt;edge cases&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because something usually is.&lt;/p&gt;




&lt;h2&gt;
  
  
  When AI Coding Still Works
&lt;/h2&gt;

&lt;p&gt;It’s not all bad.&lt;/p&gt;

&lt;p&gt;AI is great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quick prototypes&lt;/li&gt;
&lt;li&gt;side projects&lt;/li&gt;
&lt;li&gt;learning new tools&lt;/li&gt;
&lt;li&gt;exploring ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for anything real — anything that touches users, data, or scale — you need more than “it works.”&lt;/p&gt;

&lt;p&gt;You need understanding.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AI didn’t remove thinking.&lt;/p&gt;

&lt;p&gt;It removed the cost of building.&lt;/p&gt;

&lt;p&gt;Which means you can now build bad things faster.&lt;/p&gt;

&lt;p&gt;Or good things faster.&lt;/p&gt;

&lt;p&gt;That choice is still yours.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Before your next prompt, pause.&lt;/p&gt;

&lt;p&gt;What are you actually building?&lt;/p&gt;

&lt;p&gt;Why does it matter?&lt;/p&gt;

&lt;p&gt;Because the code will come easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding won’t.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;We write about real-world AI and engineering problems (no fluff) at &lt;a href="https://www.nandann.com" rel="noopener noreferrer"&gt;https://www.nandann.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most of this comes from things that looked fine… until they weren’t.&lt;/p&gt;

&lt;p&gt;Follow if you’re building with AI — this is just the start.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Your WordPress Site Is Bleeding Memory — Here's How to Stop It</title>
      <dc:creator>Prakhar</dc:creator>
      <pubDate>Mon, 12 Jan 2026 15:04:07 +0000</pubDate>
      <link>https://forem.com/prakharb/your-wordpress-site-is-bleeding-memory-heres-how-to-stop-it-b0o</link>
      <guid>https://forem.com/prakharb/your-wordpress-site-is-bleeding-memory-heres-how-to-stop-it-b0o</guid>
      <description>&lt;h1&gt;
  
  
  Your WordPress Site Is Bleeding Memory — Here's How to Stop It
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Why your site might be slower than you think, and what you can do about it.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;"Why is my site so slow?"&lt;/p&gt;

&lt;p&gt;If you've worked with WordPress for any amount of time, you've heard this question. Maybe from a client. Maybe from yourself at 2am trying to figure out why a page takes 8 seconds to load.&lt;/p&gt;

&lt;p&gt;The frustrating part? The answer is almost never simple.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Want the quick fix?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I built a free plugin called &lt;a href="https://wordpress.org/plugins/hungry-resource-monitor/" rel="noopener noreferrer"&gt;&lt;strong&gt;Hungry Resource Monitor&lt;/strong&gt;&lt;/a&gt; that shows you exactly what's eating your resources. It tracks memory, finds bloated databases, spots orphaned crons, and tells you which plugins are the heaviest. If you don't want to read this whole thing, just install it and see for yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But if you want to understand &lt;em&gt;why&lt;/em&gt; WordPress sites get slow, keep reading.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Happens When Someone Visits Your Site
&lt;/h2&gt;

&lt;p&gt;When a visitor loads a page, WordPress does a lot behind the scenes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;PHP starts up and loads all the WordPress files&lt;/li&gt;
&lt;li&gt;Every active plugin gets loaded — even if it's not needed for that page&lt;/li&gt;
&lt;li&gt;Your theme loads&lt;/li&gt;
&lt;li&gt;WordPress hits the database a bunch of times&lt;/li&gt;
&lt;li&gt;All your hooks and filters run&lt;/li&gt;
&lt;li&gt;The page gets assembled and sent out&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each step uses memory and takes time. The more plugins you have, the more this adds up.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Memory Thing
&lt;/h3&gt;

&lt;p&gt;PHP has a memory limit — usually 128MB or 256MB. If a page load uses more than that, you get the dreaded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fatal error: Allowed memory size of 134217728 bytes exhausted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But here's the thing: you might not hit that limit, and your site can still be slow. A page using 100MB of memory is going to feel sluggish compared to one using 30MB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What uses the most memory?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page builders (Elementor, Divi, WPBakery) — these can easily use 50-80MB&lt;/li&gt;
&lt;li&gt;WooCommerce with lots of products&lt;/li&gt;
&lt;li&gt;Plugins that load big libraries they don't really need&lt;/li&gt;
&lt;li&gt;Badly written custom code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Database Thing
&lt;/h3&gt;

&lt;p&gt;WordPress stores almost everything in the database: posts, settings, user info, plugin data. Every time it needs something, it runs a query.&lt;/p&gt;

&lt;p&gt;A fast site might run 20-30 queries per page. I've seen sites running 500+ queries on a single page. That's insane.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where do all these queries come from?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugins that aren't optimized&lt;/li&gt;
&lt;li&gt;Themes that query the same data over and over&lt;/li&gt;
&lt;li&gt;Poorly written custom code&lt;/li&gt;
&lt;li&gt;Just... too many plugins doing too many things&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Bloat Problem
&lt;/h2&gt;

&lt;p&gt;WordPress databases get fat over time. Here's why:&lt;/p&gt;

&lt;h3&gt;
  
  
  Revisions
&lt;/h3&gt;

&lt;p&gt;Every time you hit save on a post, WordPress keeps a copy. Edit a post 50 times? That's 50 revisions sitting in your database. I've seen sites with 10,000+ revision rows. They all add up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orphaned Stuff
&lt;/h3&gt;

&lt;p&gt;When you delete a post, WordPress usually cleans up after itself. But not always. Custom code and some plugins leave behind "orphaned" data — rows in the database that reference things that don't exist anymore.&lt;/p&gt;

&lt;p&gt;I once cleaned a database where 40% of the postmeta table was orphaned junk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transients
&lt;/h3&gt;

&lt;p&gt;These are temporary cached values. The problem is, some plugins create transients that last forever or don't get cleaned up when they expire. Over time, you end up with thousands of useless rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto-Drafts and Trash
&lt;/h3&gt;

&lt;p&gt;WordPress creates auto-drafts as you write. Deleted items sit in trash for 30 days. On busy sites, these pile up fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Cron Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;WordPress has a scheduling system called wp-cron. It runs background tasks like publishing scheduled posts, sending emails, or cleaning up old data.&lt;/p&gt;

&lt;p&gt;Here's the problem: &lt;strong&gt;when you delete a plugin, its scheduled tasks often stick around.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These "orphaned crons" try to run code that doesn't exist anymore. They waste resources and sometimes cause errors.&lt;/p&gt;

&lt;p&gt;I've seen sites with 100+ orphaned cron jobs from plugins that were deleted years ago. Still running. Still trying. Still failing.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Actually Fix This
&lt;/h2&gt;

&lt;p&gt;You've got a few options:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Use a Monitoring Tool
&lt;/h3&gt;

&lt;p&gt;You can't fix what you can't see. Tools like Query Monitor are great for developers doing deep debugging. But if you want something simpler that just shows you what's wrong, try &lt;a href="https://wordpress.org/plugins/hungry-resource-monitor/" rel="noopener noreferrer"&gt;&lt;strong&gt;Hungry Resource Monitor&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dashboard showing your top resource consumers&lt;/li&gt;
&lt;li&gt;Easy database cleanup (revisions, transients, orphaned data)&lt;/li&gt;
&lt;li&gt;A list of all your cron jobs with orphaned ones highlighted&lt;/li&gt;
&lt;li&gt;Unused plugins and themes that are just taking up space&lt;/li&gt;
&lt;li&gt;Weekly email reports so you don't have to keep checking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full disclosure: I built it. But it's free and it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Limit Revisions
&lt;/h3&gt;

&lt;p&gt;Add this to your wp-config.php:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nb"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'WP_POST_REVISIONS'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Keep only 5 revisions per post&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Clean Up Regularly
&lt;/h3&gt;

&lt;p&gt;Whether you use a plugin or WP-CLI, schedule regular cleanups. Get rid of old revisions, expired transients, and orphaned data.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Audit Your Plugins
&lt;/h3&gt;

&lt;p&gt;Do you really need all of them? Every plugin you deactivate is one less thing loading on every page.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Check Your Autoloaded Options
&lt;/h3&gt;

&lt;p&gt;WordPress loads certain options on every single page load. If plugins store huge amounts of data with autoload enabled, it slows everything down. You can check this with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;option_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;LENGTH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;option_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;wp_options&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;autoload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'yes'&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;size&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;WordPress performance isn't about finding one magic fix. It's about understanding where your resources are going and cleaning up the mess that accumulates over time.&lt;/p&gt;

&lt;p&gt;Start with visibility. Once you can see what's actually happening, the fixes usually become obvious.&lt;/p&gt;

&lt;p&gt;Give &lt;a href="https://wordpress.org/plugins/hungry-resource-monitor/" rel="noopener noreferrer"&gt;Hungry Resource Monitor&lt;/a&gt; a try. It's free, stores everything locally (no data sent anywhere), and it might show you things about your site you didn't know.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Prakhar Bhatia builds WordPress stuff at &lt;a href="https://nandann.com" rel="noopener noreferrer"&gt;nandann.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>performance</category>
      <category>wordpressplugin</category>
    </item>
  </channel>
</rss>
