Skip to content

← Writing

engineering

Vibe-Coded vs Production-Ready: 3 Layers or 13?

· Jerwin Arnado ·

There’s a demo on a screen and a product in the world, and the distance between them is wider than it looks. With today’s tools you can vibe-code a working app in an afternoon — describe what you want, watch it appear, click around, it works. That’s real and genuinely useful. It’s also about three layers deep, and a product people depend on is thirteen. This post is the map of that gap. It’s also the opening of a thirteen-part series where I walk each layer in detail.

What the vibe-coder ships: three layers

A great demo, honestly, only needs two or three things:

# Layer What it does
1 Frontend a UI you can click
2 Database data that persists on refresh
3 Authentication (sometimes) a login screen, often bolted on last

Notice what’s barely there: backend logic is whatever glue the generator emitted, and auth — if it exists at all — is a login form, not real authorization. That’s the vibe-coded footprint: a frontend, a database, sometimes a login. Two to three layers.

This is enough to demo, to validate an idea, to show an investor, to use yourself. Do not let anyone tell you it’s worthless — most software ideas die before reaching even this, and shipping a thing that works is the hard 80%. The point isn’t that three layers is bad. The point is what the demo quietly assumes: one user (you), a trusted network, no attackers, no load, no money on the line, and the unspoken promise that nothing ever breaks. Reality honors none of those assumptions.

What production demands: ten more layers

The moment strangers, money, and uptime enter the picture, the other ten layers stop being optional:

# Layer The question it answers
4 Auth & permissions Who are you, and what can you touch?
5 Hosting & deployment How does it get online — repeatably?
6 Cloud & compute What does it run on, and who runs that?
7 CI/CD & version control How do changes ship without breaking prod?
8 Security & row-level security Can user A read user B’s data?
9 Rate limiting What stops one client from melting it?
10 Caching & CDN Is it fast for everyone, everywhere?
11 Load balancing & scaling Does it survive going viral?
12 Error tracking & logs Do you find out before your users tell you?
13 Availability & recovery When it breaks, how fast do you come back?

None of these show up in a demo. Every one of them shows up the week after launch.

The same app, two versions

Picture a simple notes app. The vibe-coded version: type a note, it saves, it’s there on refresh. Beautiful.

Now ship it to a thousand strangers:

  • No auth (4): everyone shares one notes pile, or worse, reads each other’s.
  • No row-level security (8): even with login, a tweaked id in the URL loads someone else’s private notes.
  • No rate limiting (9): one script hammers your POST /notes and the database falls over.
  • No caching/CDN (10): a user in another country waits four seconds per page.
  • No error tracking (12): it’s been throwing 500s for forty users since Tuesday and you have no idea.
  • No backups (13): a bad migration wipes the table and the data is simply gone.

Same app. The difference between the two isn’t features — it’s the ten invisible layers that decide whether it survives the real world.

Why this matters even if you’re solo

You don’t need all thirteen on day one, and over-engineering a thing nobody uses yet is its own mistake. The skill is knowing which layer the current risk lives in and adding it deliberately:

  • Validating an idea? Three layers. Ship the demo. Don’t gold-plate.
  • Letting real people sign in? You now need 4, 5, 7, 12 — non-negotiable.
  • Handling money or private data? 8 and 13 are not optional, they’re liability.
  • Getting traction / going viral? 9, 10, 11 are what keep you online.

The thirteen layers aren’t a checklist to grind through before launch. They’re a map of the risks you take on as you grow, so nothing catches you blind.

Conclusion

Vibe-coded demo   →  3 layers  →  "it works on my screen"
Production product →  13 layers →  "it works for strangers, under load,
                                    when attacked, and after it breaks"

The gap between a demo and a product is exactly these ten extra layers — the unglamorous, invisible work that turns “it works” into “it keeps working.” That’s what this series is about: one post per layer, what it is, why it matters, and how I actually build it with Laravel + Vue. Start here → Frontend Foundations.