Start here. This is the direct spoken answer to practice first.
Why this question matters
Feature flags separate code deployment from feature exposure, but every flag creates another production path. The value comes from controlled rollout and recovery; the cost remains until the old path and the flag are removed.
I create a feature flag with one purpose, an owner, a safe default, a rollout plan, success and rollback signals, and an expiry or cleanup task. I deploy the new code with the flag in its safe state, verify both paths, then enable it for internal users or a small stable cohort before expanding exposure. If the metrics regress, the owner can disable it quickly. Once the new path is proven and rollback no longer depends on the old path, I remove the old branch and then delete the flag.