Allow users to create and manage feature flags for their applications (Feature Flags MVC)
Feature flags enable teams to achieve CD by letting them deploy "dark" features to production as smaller batches for controlled testing, separating feature delivery from customer launch, and removing risk from the pipeline. More info on "why CD", including feature flags, can be found in this article from Eric Ries.
For the GitLab MVC implementation we're enabling teams to define features in yaml, which can then be managed operationally through the web experience. We'll be taking special care to minimize platform performance impact with this feature implementation.
- We already have a create deployment service, if we hook into that we can generate the right feature flags for an environment scope (review, staging, production scopes are what we'll offer to start), this is based on content of repo that is deployed there.
- For local developer testing, we will provide guidance, but not an actual separate API call, unless it is a local endpoint. We will look at how Unleash does local development and emulate.
- If someone goes to the feature flags dashboard on a project with none set, instructions are available on how to add them
- Master dashboard/configuration UX that interacts with feature flags on a per-environment basis. Shows key name, on/off button
- Unleash-compatible implementation which uses their open client libraries
- Feature flags support control over: kill switch (on/off)
- Default behavior for first time deploying a feature flag to a new environment is defined in yaml.
- API to poll state
- Managing performance impacts/mitigation (client-side TTL/caching, rps-limits, isolation, etc.) Some/all of this might come from client libs.
- Paid feature tier
The following is additional scope which will be included if there is time, but are not considered essential elements of the MVC.
- Provide authorized API call to change operational state
- Include active% as configurable flag element
- "Environment scope" (i.e., groups of envionrments treaded as review, staging, or production) as context to solve management problems associated with grouping of environments/environment classes, though we will design with this in mind.