Vibe-to-Production · Database

Your App Was Fast. Now It Crawls. Here's What's Actually Happening

Your app used to feel instant. Now the dashboard takes seconds to load, search sometimes spins forever, and it is unmistakably worse than last month. Nothing changed — except the amount of data in it. You want to know whether this fixes itself, gets worse, or needs someone.

72 hours
01 / TO FINDINGS
2–6 weeks
02 / TYPICAL FIX WINDOW
500+
03 / ENGINEERS
92%
04 / ON-TIME DELIVERY
DatabaseProblem guide

An AI-built app that launches fast and slows down week by week almost always has queries that read far more data than they return — a pattern invisible at fifty records and unmissable at fifty thousand. You can confirm it yourself tonight with a stopwatch and your browser's network panel, and the fix is targeted work on a handful of queries, not a rebuild.

How to recognise it

The signs show up before the incident does.

None of these proves you have the problem. Each one raises the odds — and every one of them is checkable in the twenty-minute protocol below.

  • It gets worse on a scheduleThe slowdown tracks the calendar, not your releases. Nothing you shipped made it slower — the data your users added did. That correlation is the signature of this problem and of nothing else.
  • Your busiest screens are your slowestThe dashboard, the main list, the search box — the screens touching the most records are the ones that crawl. Rarely-used pages still feel like launch day.
  • New accounts feel like the old daysA fresh account with three records is instant. Your oldest, biggest customer's account is the one that struggles. Same code, different data volume — the code is not the variable.
  • Restarts help, brieflyRebooting or redeploying buys a good hour, then the crawl returns. The restart clears queues and caches; it does nothing about the queries refilling them.
  • The database bill is creeping tooCompute and database charges drift upward while your user count doesn't. Machines burning time on inefficient reads charge you for every wasted pass.
Why this happens

One missing layer explains every symptom above.

Every query was written for a database with fifty rows in it — because that is all it ever had while being built.

Queries that scan whole tables and screens that fire one request per row are undetectable at demo size — everything looks instant. The work grows with the data, so the app doesn't have a bug that appeared; it has a cost that compounds, every week, forever, until something times out.

This is not a defect of any one tool — it follows from how prompt-built apps come to exist, and the platform guides show how the same gap surfaces on each stack.

What is actually at stake

It isn't a bug count. It's an open door.

Slowness is churn you can't attribute. Users don't file a ticket saying the dashboard took nine seconds — they drift away, trials don't convert, and your best customers, the ones with the most data, get the worst experience you offer. And the trajectory only points one way: the day it becomes an outage, it will be your busiest day, because that is when the most data meets the most people.

If something has already gone wrong, the first-response guide covers the first hour. If nothing has — that is exactly the moment this is cheap to fix.

Check it yourself

Run the audit yourself — tonight.

No developer, no tooling, no permission needed — this is your own app. Work through the sheet in order; if a check fails, do it once more before believing it. What you find is yours to act on, with us or without us.

Diagnostic protocolAbout 20 minutesTwo browser windowsNo code required
  1. Does the same page get slower as the data behind it grows?

    Run it

    Take your busiest list page and time it loading with a stopwatch — phone timer is fine. Now create a brand-new account with almost no data and time the same page there. Do each three times and keep the middle number.

    What the result means

    Similar times on both accounts is a pass. If the full account is several times slower than the empty one, the work is growing with the data — and it will keep growing. That is this problem, confirmed.

  2. Does one screen quietly fire dozens of requests?

    Run it

    Open your busiest list page, right-click, choose Inspect, open the Network tab, then reload the page. Watch the request count at the bottom and skim the list for near-identical requests that differ only by an ID.

    What the result means

    A handful of requests is a pass. One request per row on screen is the classic pattern — a list of a hundred items makes a hundred round trips, and the page slows down in step with the list.

  3. Can anyone say how many rows your biggest table holds?

    Run it

    Open your platform's data dashboard — most show a row count per table without any code. If you can't find it, estimate from the product: records created per day, times days since launch.

    What the result means

    A number, and someone watching it, is a pass. If nobody can answer, nobody is watching growth — and this entire failure class arrives unannounced, because the only early warning is the count.

  4. Does searching your oldest data take visibly longer?

    Run it

    Run the same search or filter twice: once over last week's records, once over everything since launch. Time both with the stopwatch.

    What the result means

    Similar times is a pass — the database is using an index to jump to the answer. If 'all time' takes many times longer, the database is reading every record to find yours, and every search costs more each month.

  5. Is one heavy action slowing everyone else down?

    Run it

    Trigger your heaviest feature — a big export, a full report — and while it runs, have someone else browse the app normally and describe what they feel.

    What the result means

    If their experience is unchanged, that's a pass. If the whole app wades through treacle while the report runs, everything shares one set of database connections, and any one user can degrade all of them.

Each of these maps to a scored item in the production-readiness framework. A pass on all of them rules out the loudest failure class — the full audit covers what a browser can't reach, at a fixed price.

How it gets fixed

Sealed from the data layer up.

The order matters more than the effort: enforcement first, credentials second, proof third. Done in the wrong order, the work gets done twice while the exposure stays open. The same discipline runs through everything we deliver.

Get my scorecard
  1. 01

    Measure before touching anything

    Engineers capture which queries are actually slow, how often each runs, and which screens they serve — so the fix list is ranked by user impact, not by guesswork. That ranking is the audit, with findings in 72 hours.

  2. 02

    Index the columns the queries actually use

    Every column used to filter, join or sort gets an index — the difference between the database jumping to an answer and reading the whole table to find it. Usually the largest single win, and the cheapest.

  3. 03

    Collapse the per-row request patterns

    Screens that fire one query per visible item are rewritten to fetch in one pass. This is a code change, not a database one, which is why indexing alone never fully cures this problem.

  4. 04

    Pool connections and cache the repeat reads

    Connection pooling sized for real concurrency, and caching for the reads every user repeats — so one heavy report can no longer starve everyone else's queries.

  5. 05

    Leave the growth curve on a dashboard

    Query timings and table sizes go onto a chart a human looks at, with alerts before limits. The slowdown you're feeling now arrived silently; the next one should announce itself months early.

Where it sits in the framework

The framework's heaviest weights sit exactly here.

20 / 100

points of the production-readiness score sit in the categories this problem touches.

See every check and weight
0The full 100-point framework100
  • 10 ptsData protection & recoveryBackups that have never been restored are not backups. This category is mostly about proving the recovery path exists.
  • 10 ptsPerformance & scalePrototypes are tested by one person at a time. Most performance failures are invisible until concurrency arrives.
Our honest read
A slowdown that tracks data growth is the most mechanically diagnosable problem on this site and one of the cheapest to fix well — run the stopwatch checks tonight, and treat 'it gets a little worse every week' as the data it is, not a mood.
FAQ

The questions that follow.

QWill upgrading to a bigger server or database plan fix this?
It buys time, and sometimes that's worth doing — but it changes the date of the problem, not the shape of it. If the work grows with the data, a machine twice the size is caught up by the data soon enough, and you've doubled your bill to get there. Upgrading hardware is rational once the queries are efficient; before that, it subsidises the inefficiency.
QIs this the AI tool's fault? Should I stop using it?
No — it's a consequence of how the code was validated, not of who wrote it. The generated queries are usually correct, and correct was all anyone tested for, at a size where fast was automatic. Human-written prototypes have shipped exactly this pattern for decades. The gap isn't the authorship; it's that nobody ever ran the code against production-sized data before production supplied some.
QDo we need to migrate to a different database?
Almost certainly not, and be wary of anyone whose first suggestion is a migration. Mainstream databases handle volumes far beyond most products' wildest projections — when they crawl at modest size, the queries are the problem, and those queries would perform identically badly on the new database. Migration is the most expensive possible way to avoid reading a query plan.
QCan I just ask the AI tool to optimise the queries?
It optimises what you point it at, often competently. The hard part is knowing which of your queries matter — which are slow, how often each runs, and which screens they sit behind. Without measurement you're tuning at random, and an optimisation that helps one query can degrade another. Measure first, then by all means let the tool write some of the fixes; verifying the result against real data volumes is the part that can't be prompted.
QHow do I know this won't just come back?
Two things prevent the relapse: monitoring that watches query times and table growth continuously, so regressions surface in a dashboard rather than in churn; and a habit of testing new features against realistic data volumes before release, so the next fifty-row assumption gets caught while it's still cheap. Both are part of the fix, not extras bolted on after it.
QWhat does fixing this cost, and how long does it take?
Diagnosis is the fixed-price audit ($2K – $5K), with findings in 72 hours: which queries are slow, what each costs your users, and the specific fix for each, ranked. The remediation is typically at the shorter end of 2–6 weeks, because the work is concentrated — most of this failure class lives in a small number of queries — and it ships incrementally, with no downtime.
Before you share anything
Your IP · 100% yours, in writing

Nobody has ever regretted sending us their repository.

Handing private code to anyone is a real decision, so everything below is settled before the audit starts rather than on request.

  1. An NDA is signed and returned before you send a linkStep one, every time
  2. Access is read-only, scoped to one repository, and time-boxedRevoked on delivery
  3. Our copy of your code is deleted when the report landsNothing retained
  4. We build for clients and never launch anything that competes with themNever has happened
No-obligation diagnosis

Send us the repository. We'll tell you what's missing.

Fixed price, 72 hours to findings, and a report you can act on with or without us. Nothing is committed until you have read it.

NDA signed before you send anything · read-only access, revoked when the report lands · our copy deleted on delivery.