What is a Toggle?
A toggle is a switch that has two positions: on and off. Toggle switches are found in hardware and software; for example, a keyboard’s Caps Lock and Num Lock toggles are simple examples of toggle switches. In software, the term “toggle” is used to describe any feature that can be enabled or disabled through a single mechanism. It’s also commonly used to refer to the process of switching between different states or modes in a system, such as when changing from the desktop view to the mobile view on a web browser.
A key component of any successful CI/CD workflow is the ability to rapidly and efficiently change the state of a feature in production without disrupting users. One of the most critical tools for accomplishing this is the Feature Flag, which allows teams to enable and disable features quickly in order to test and validate them. The most common use of a Feature Flag is in the form of a Canary Release or Champagne Brunch, but they are also frequently used to test and validate Experiment Toggles.
Many teams have a set of best practices around how to manage and configure Feature Flags. For example, some prefer to keep their toggle configuration in static files that are merged into releases at each commit; this is often paired with a centralized toggle management UI for system operators, testers and product managers to be able to see the current status of all toggles. This approach can be relatively cumbersome when working at a large scale and can introduce a certain level of friction in the deployment cycle due to the need to re-deploy an entire artifact to change the state of a toggle.
Alternatively, some teams choose to use the preprocessor’s #ifdef feature in their codebase in order to control the state of a toggle at runtime. While this is a simpler alternative it doesn’t provide the flexibility of dynamic in-memory re-configuration and thus should be considered only for short lived features or ones that require the ability to run in a limited number of test environments. When using a Toggle Router for things like Multivariate or A/B testing it’s especially important that you have the ability to override the route taken by each user at runtime. Otherwise you’ll have to resort to manual interventions in the deployment pipeline or worse yet rely on an expensive and brittle solution such as a re-deployment of a production artifact into your testing environment in order to flip a toggle.