Enabling new features
How do you enable new functionality? Some features are simple and stateless, such as a new command in an API, a new button, or a new interface for existing functionality. The current system can continue without these features, and enabling them has little effect on the rest of the system. Stateless features are simple, and you can just enable them and begin testing.
Other features are more complex and stateful, such as database migrations or new forms of data storage. Some require several steps, such as enabling a new system, migrating users onto it, then disabling the old system. Breaking changes on interfaces need all downstream systems to be ready for the change. This section considers the complexities around enabling and disabling such stateful features.
Stateful features might be enabled with a feature flag or be available immediately after an upgrade. For this discussion, these two methods are equivalent: all you need is a way to enable the feature...