# Feature Flag (/academy/feature-flag)



A feature flag is a velvet rope, not a rebuild.

The code is already [deployed](/academy/deploy). The new checkout, the new agent tool, the scary button — they're in the building, dark. You lift the rope for ten people, or just for you, and watch. If it smokes, you drop the rope. No new [build](/academy/build). Faster than a [rollback](/academy/rollback) of the whole house, because you killed one feature and left the rest on stage.

**What the rope is for**

* **A quiet rollout.** 1% of users, then 10%, then everyone. If it breaks, only a sliver saw it.
* **An instant off.** Something goes wrong, you flip it. The show stays open.
* **Unfinished work in the live app.** Half-built features can sit behind an off flag instead of rotting on a [branch](/academy/branch) for a month.
* **Different doors for different people.** On for your team. Off for the room. Same URL. Different rooms visible.

See how it sits with [staging](/academy/staging). Staging rehearses before guests arrive. A rollback undoes the whole show. A flag lets you ship to the live audience and still control who sees the new act.

At a hackathon, do not build a flag service. A `SHOW_NEW_THING=true` in the [env](/academy/env) is enough. The [builder](/builder) already taught you env files. Put a switch on anything you are not ready to demo. Judges will find the half-built page. They always do. An [agent](/academy/agent) will also find it, and cheerfully wire it to the homepage unless you said the rope stays down.

Flags pile up. A flag that is now permanently on is just confusing wiring. Delete it when the rope is no longer a decision.

**What this unlocks**

You can ship the scary thing without holding your breath. The code can be live and still dark. You stop treating every feature as an all-or-nothing deploy. Ship it, wire in an off switch, lift the rope for ten people, and kill it with a toggle if the demo starts lying.
