sethserver.com Subscribe
Retro 1970s toy robot with boxy square head, rectangular body, accordion tube arms with claw hands, square head with single antenna on top, two circular eyes, rectangular mouth grille stands centered on a light green background, holding a yellow and red hammer in its left hand and an orange screwdriver in its right hand.

Why Your Startup's 'AI Features' Keep Breaking

By Seth Black • Updated: September 17, 2026

AI ยท 4 min read

Like this kind of writing? Get one email a week with notes on startups, AI, and the occasional strong opinion about Python: subscribe to the newsletter.

We've all been shipping AI features stupid fast and stupid optimistic, then acting surprised when production breaks. Your demo works great until you have real users doing real user things. It works in the demo, then production happens and everything falls apart. This isn't new. The demo gods are vicious.

I've written about AI-washing and AI-coding before. Turns out they fail for the same reason: you didn't stabilize the system. In my experience, the "AI" part usually isn't the main problem. The stuff you wrapped around it is.

The Real Reasons Your AI Keeps "Randomly" Failing

  1. Prompt drift
    Your prompts change constantly. Someone "improves" wording, adds a new instruction, or pastes in a bigger example. Nobody writes it down. Then the model behaves differently and everyone acts confused.
    Sometimes it's absurdly small. You go from:
    "Return a JSON object with fields: summary, action_items."
    to:
    "Return a strict, beautiful JSON object with fields: summary, action_items."
    And now your model decides "beautiful" means adding commentary, reordering keys, or wrapping the JSON in markdown fences like it's showing off at a science fair. Your parser doesn't clap. It just breaks.
    Treat prompt changes like code changes, because they are behavior changes. If you wouldn't hot-edit your backend in production, don't hot-edit prompts either.

  2. Model version changes
    Your provider ships a new model version and suddenly your "stable" workflow isn't stable. Fun times.
    Output formatting shifts. Tool calling gets "better" in a way your parser hates. Refusals change. Latency changes. Your tidy demo assumptions go to war with reality. If you don't know exactly which model handled each request, you're debugging blind.

  3. No evaluation suite
    If you can't measure it, you're negotiating with vibes.
    This is where teams get stuck in debates like: "It feels better now." Cool. Show me the tests. Show me the numbers. Show me something you can rerun next week after three more changes land.

  4. Over-reliance on demos
    Your demo is curated. Your users are not. They will paste in novels, broken CSVs, screenshots turned into text, and stuff that should never be in a textbox.
    I've watched teams celebrate a flawless demo, then spend the next month chasing bugs caused by inputs nobody thought a human would ever type. Humans are very creative. You just don't always like the results.

  5. Playground vs production gap
    Your playground has perfect context and you watching it like a hawk. Production has timeouts, retries, missing fields, partial uploads, rate limits, network errors, and a customer success rep asking why the AI "forgot" the user's company name.
    Also, production has budgets. Latency budgets, token budgets, and emotional budgets. You will hit all three.

A Stabilization Checklist (Stuff You Can Actually Do)

Here's a tiny eval harness concept. It's oversimplified, but you get the point: you want repeatable checks that catch obvious regressions before your customers do.

# Oversimplified, but you get the idea.
# Run the same tests every deploy, and fail fast on regressions.

tests = [
    {
        "input": "Summarize this email and list action items:\n\n...email text...",
        "expect_contains": ["action items"]
    }
]

for t in tests:
    out = llm(t["input"])  # however you call your model in prod
    out_lc = out.lower()
    assert all(x in out_lc for x in t["expect_contains"])

If you want a deeper dive on evaluation patterns, start with OpenAI Evals and adapt it to your domain. The tooling matters less than the habit. If you run the checks every deploy, you'll catch problems while they're still cheap.

AI features break for the same reason all software breaks: you skip the boring stabilization work and hope for the best. Then you act surprised when things fall apart. If you're dealing with the aftermath of a rapidly-shipped MVP, check out Vibe Coding Hangover: What Happens After the MVP Ships for a practical triage framework.

-Sethers

Share this post
Newsletter

One email, once a week.

Notes on databases, systems, and the occasional strong opinion about Python. No spam, unsubscribe anytime.

Seth Black
Written by

Seth Black

Engineer and founder based in Texas. Writes about databases, AI, and running things in production. Embeds in small teams as lead engineer.

More from AI

View all โ†’
AI

How to be a Good Farrier: What the Car Teaches Us About AI and Your Job

Nov 10, 2026
AI

Principle of Least Privilege in the AI Age

Apr 14, 2026
AI

How to Actually Secure MCP (Model Context Protocol)

Apr 14, 2026