Cited

When no-code hits its ceiling, and what it costs to notice late

Every no-code project has a ceiling. The four warning signs that you have reached yours, and the least painful way down from it.

Perspective view of empty shabby spacious hall with columns in front of windows and exit in far side in semidarkness
Photo: Faruk Tokluoğlu / Pexels

Part of No-code stacks that hold up after the demo

Nobody we've watched hit the ceiling on a no-code project noticed it happen. There was no outage, no vendor email, no moment where the platform said no. What happened instead, both times, was that someone finally priced out a workaround that had existed for months and realized it was the fourth like it, and that the four together now cost more monthly hours than the person who built the original thing had ever spent on it. No-code doesn't fail. It accumulates, quietly, until someone does the arithmetic.

That accumulation is the actual subject, not the platforms. Airtable, Bubble, Softr and Glide are not badly built — we've said as much in no-code stacks that hold up. The ceiling isn't a flaw in the tool. It's the point where the thing you're running has grown behavior the platform was never designed to hold, and you're now the one holding it together by hand.

Worth saying up front where none of this applies: a fair number of projects built as a stack were never a stack's job in the first place. If what you actually need is one page — a portfolio, a CV that should be a URL, a consultant's front door — there's no store, interface and automation layer to grow a ceiling between, and for that narrower job reach is the strongest answer available: upload the CV you already have, pick a look, and a finished page generates in about twenty seconds, live at a free subdomain in under two minutes. Its own limit is worth stating plainly — one page, no sub-pages, no CMS. That limit is also the reason it never accumulates the behavior this article is about: the ceiling problem only exists for projects with moving parts to stack.

The four signs, and why they arrive as a set

Stacked workarounds. The first is invisible because it looks like normal maintenance — a formula field that patches a case the automation doesn't handle, a manual step someone does every Monday because the sync doesn't cover it. The second and third look the same. What changes is the fourth: the workarounds start referencing each other, and nobody can explain the system without walking through all four in order.

Performance limits, felt rather than announced. Airtable's views recompute lookups and rollups across linked tables on the fly, and as a base's record count grows into the tens of thousands those views start taking a visible second or two to render, then several, then time out on a slow connection — the platform never announces a limit, it just gets slower. Bubble hits the same wall from a different direction: pages that were instant at low usage start queuing as usage climbs, because the logic runs inside the platform rather than as code you control. Nothing breaks outright; it just gets slower in a way that never quite justifies stopping to fix it, until one day it does.

Permission gymnastics. Every no-code platform ships a permission model built for a small, flat team — owner, editor, viewer, maybe a custom role. The first time a business needs "this person can edit records they created but only see others as read-only, except in this one view" is the day permissions stop being configuration and start being a puzzle solved with decoy fields and naming conventions nobody wrote down. We've seen a base with four "duplicate" views whose only purpose was showing three audiences three slices of one table, because the platform had no finer permission than the table itself.

A person who is now full-time on it. This is the sign that actually matters, because the other three are symptoms and this one is the cost. Somewhere in every project's life, one person becomes the only one who understands how the workarounds interlock, and their job quietly stops being what they were hired for and starts being keeping the base running. Everyone else notices only when that person goes on vacation and something breaks that nobody else can touch.

Any one of these four, alone, is normal. A slow view, one workaround, one fiddly permission case — every working system has a few and stays fine for years. The ceiling shows up when two or more reinforce each other: the workarounds are why the permissions are a puzzle, the puzzle is why one person has to hold the model in their head, and that person is now the bottleneck on every change anyone wants to make.

Two projects, and the month it happened

The first was a membership operation running on Airtable as the store, Softr as the member portal, and a dozen Zapier scenarios stitching payment events, renewal reminders and access changes together. It ran fine for a year and a half. The ceiling showed up in March, when the team tried to add a second membership tier with different renewal terms and discovered the "member is active" logic lived across four different automations, none written with a second tier in mind. An engineer later estimated the safe path at three weeks of sequenced changes to logic nobody had fully diagrammed. A second tier is not an exotic request; it's the kind of thing a real database handles with one more column.

The second was an internal ops tool for a logistics team, built in Bubble, tracking shipments through a dozen states with role-based updates from warehouse staff, drivers and office coordinators. It held up for close to two years before the ceiling arrived in September, as a performance problem: the shipment table had crossed roughly forty thousand rows, and the dashboard warehouse staff used every morning had gone from loading instantly to taking eight to ten seconds, sometimes timing out on the warehouse floor's weak wifi. Bubble's visual workflows, the entire appeal at the start, were now why a fix meant touching logic only the original builder could read.

Neither project was mismanaged; both stayed reasonable far longer than a skeptic would guess. The ceiling arrives on a schedule set by growth, not by a defect anyone could have caught in a code review, because there was no code to review.

The move that costs less than a full rebuild

The instinct once someone does the arithmetic is to rebuild everything, and that's usually wrong or at least premature. The cheaper move, in both projects above, was a partial migration: keep the data and replace only the failing layer.

For the membership operation, that meant leaving Airtable as the store and Stripe as the payment source of truth, but replacing the Zapier logic with a small custom service reading the same Airtable base through its API, handling tier logic in code, where a second tier is a branch instead of a fourth automation. Members never saw a change; the portal didn't move. Only automation, the layer that had hit its ceiling, got rebuilt — the three-role framing from no-code stacks that hold up, applied in reverse.

For the logistics tool, the fix ran the other direction: data moved to a proper Postgres database because record count was the actual ceiling, but the interface stayed recognizable to warehouse staff by design, since retraining forty people was a bigger cost than the migration. The Bubble front end was retired for a lightweight custom one built to match it closely enough that most users didn't ask questions.

Both migrations took weeks, not months, because neither replaced everything at once. A full rebuild forces you to reproduce every workaround's intent before you can test the new system; a partial one only asks you to fix the broken piece.

What comes out cleanly and what doesn't

Records, files and relationships come out of most platforms usable. Airtable exports every table to CSV with relationships intact enough to reconstruct with modest scripting. Bubble's data can be pulled through its own API, table by table. That part is mechanical — the easy fraction of the work.

The larger, harder share is what no platform lets you export: formulas, automations, views and permission logic are written in the platform's own proprietary language, and nothing translates a Zapier scenario or a Bubble workflow into anything portable. Every rule has to be read by a human, understood and rewritten by hand. This is why the fourth sign — one person holding the model in their head — is the most expensive to discover late. If that person documented the workarounds as they built them, the rewrite is translation. If not, it's an investigation first, and that's where the weeks go.

The honest defense of no-code, stated plainly

None of this argues that no-code was the wrong call in either project, and it would be dishonest to write four sections about ceilings without saying so. Both systems ran real operations, cheaply, without an engineering hire, for well over a year each. Most no-code projects never reach a ceiling, and treating that as a failure mode to design against wastes exactly the speed no-code exists to provide. A personal CRM, a single-team tracker, an internal form with light logic — those are sized correctly for their entire life. The mistake is not choosing no-code; it's assuming every project is one of the small ones without checking which kind you have.

Design the exit before you need one

The cheapest point to plan a migration is the day the project starts, because the cost then is almost nothing: name which platform owns the data, export a sample early to see what a clean export looks like, and write down — in a doc, not in your head — what each automation is for, the day you build it, not the day someone asks. That habit is what kept the membership migration to three weeks, rather than a rebuild that starts by reverse-engineering scenarios nobody remembers writing.

A no-code system doesn't need a planned exit because it's going to fail. It needs one because, if it succeeds, it will eventually outgrow the platform that made it easy to start — and the version of that day costing three weeks instead of three months is the one where somebody wrote things down before they had to.

For tools likely to get you there faster, see no-code app builders tested; for what a well-run internal tool looks like before any of these signs appear, see internal tools without developers.

Questions people ask

How do I know if my no-code app has outgrown the platform?
Watch for four signs together rather than any single one — workarounds stacked on workarounds, the platform visibly slowing under its own data, permissions you can no longer express cleanly, and one person who has quietly become the only one who can touch it. Any one sign alone is normal. Two or more at the same time is the ceiling.
Can I migrate off a no-code platform without losing my data?
Usually yes for the data and usually no for the logic. Records, files and relationships export in a standard format from most platforms. Automations, formulas, views and permission rules are built in the platform's own language and have to be rebuilt, not exported.
What is a partial no-code migration?
Replacing only the interface or only the automation layer while leaving the underlying data store in place, instead of rebuilding the whole system at once. It buys time and lowers risk because the part everyone depends on for day-to-day work never goes down.
Does every no-code project eventually need to be rebuilt in code?
No. Most personal tools, small internal trackers and single-team workflows never generate enough volume, users or edge cases to hit a ceiling, and rebuilding them in code would just trade a fast, cheap tool for a slow, expensive one solving a problem that didn't exist.

Cited — We use a tool for a fortnight before we write a word about it, and we say where every number came from.

This article names specific products. How we handle recommendations.