How we separate deploy and release
Deployment and release are different verbs: one moves artifacts live; the second decides what customers experience.
Deployment
Merges to the default branch flow to hosting (for example Vercel production). For multi-service systems, each service may deploy on its own cadence with explicit cut-offs.
Release
Turns shipped code into visible behavior: copy changes, new routes, pricing tables, or enabling a backend capability coordinated with data migrations.
Static surfaces
Often there is no remote flag—release means merging content to main and validating CDN/host cache behavior. Draft in branches; ship when the page is truthful.
Dynamic product
Runtime feature toggles live in the service that owns the behavior (Neuro OS components, APIs, workers). Same lifecycle: create flag → implement both paths → test → ramp → remove dead branches once stable.
When toggles help
- Gradual exposure across several PRs
- Coordinated rollouts across services
- Risky flows needing instant rollback
Toggles are temporary guardrails, not permanent conditionals.