Feature flags for backend services
Backend services often need feature flags for operational control more than visual rollout.
Typical backend flag uses:
- enable or disable a route
- switch between old and new implementations
- turn off an expensive integration
- guard risky background jobs
Backend flags are often the highest-leverage flags in a system because they control behavior that the rest of the stack depends on.
Why server-side flags matter
Section titled “Why server-side flags matter”Server-side flag evaluation lets you:
- keep sensitive behavior off the client
- centralize operational decisions
- hide implementation details from frontend apps
In Nona, that is where server scope is especially useful.
Common backend flag patterns
Section titled “Common backend flag patterns”Examples:
Features:UseLegacySearchFeatures:DisablePaymentsFeatures:UseAsyncCheckoutWorkerFeatures:EnableNewRouting
These names are useful because they describe the behavior the operator is controlling.
Recommended backend patterns
Section titled “Recommended backend patterns”- use
serverscope for backend-only flags - keep flag names clear and operationally meaningful
- validate the default behavior when the flag is off
- treat history and rollback as part of your incident path
How to create one
Section titled “How to create one”In admin:
- open
Projects - open the backend service project
- select the target environment
- click
Add Parameter - create a boolean entry such as
Features:DisablePayments - choose
serverscope - click
Create
With the CLI:
nona entries set \ --project payments-api \ --environment production \ --key Features:DisablePayments \ --value false \ --scope server \ --content-type booleanHow a backend service reads it
Section titled “How a backend service reads it”In .NET:
using Nona.Client;
using var client = new NonaClient( "https://nona.example.com", "production", apiKey: Environment.GetEnvironmentVariable("NONA_API_KEY"));
var flag = await client.GetConfigValueAsync("Features:DisablePayments");var paymentsDisabled = flag.ContentType == "boolean" && string.Equals(flag.Value, "true", StringComparison.OrdinalIgnoreCase);A service in another language can use HTTP against the same key.
How to operate it
Section titled “How to operate it”When a backend path needs to be disabled:
- open the parameter row
- change the value
- click
Save - review the
Historytab if you need to roll back
For high-risk flags, keep the flag names explicit enough that an operator can safely understand them during an incident.
Why backend flags pair well with Nona
Section titled “Why backend flags pair well with Nona”Nona gives backend teams a practical combination:
- plain HTTP access
- official .NET client support
- feature flags and broader runtime config in one service
- rollback and audit visibility when something changes in production
That makes it a good fit for services that need both operational toggles and runtime settings.
Related docs
Section titled “Related docs”Why are backend feature flags important?
Section titled “Why are backend feature flags important?”They control behavior that the rest of the stack depends on, such as route gates, integrations, and operational toggles.
Should backend flags use server scope?
Section titled “Should backend flags use server scope?”Usually yes.
Backend-only flags should stay on server scope whenever possible.
Can backend flags work as kill switches?
Section titled “Can backend flags work as kill switches?”Yes.
Backend flags are often some of the highest-value kill switches in a system.
What is a good first backend flag?
Section titled “What is a good first backend flag?”A clear operational flag such as Features:DisablePayments or Features:UseLegacySearch is usually a strong first candidate.