A toggle is a switch that has two positions, on and off. In software a toggle can be seen in options or preferences lists where it’s used to enable or disable functionality. It’s also often used in hardware, such as the keyboard’s Caps Lock and Num Lock buttons. The term is a bit broader in meaning, though, and can also be applied to hardware like a switch that turns a light on or off. A toggle can be a simple switch or can have multiple positions, such as a slider that switches between three cameras in a museum exhibit. It’s important to consider context when using toggles so that they are clearly understood and provide clear user experiences.
When a team wants to roll out new feature behavior they will often use a toggle as the mechanism to do so. Typically this will be for a short period, although there are cases where it’s necessary to keep a feature flag in place for a longer time. When a team plans to make a toggle change it’s helpful to verify how the code will perform with both the current and expected toggle configurations. This is generally done by running tests with the toggle flipped On, although many teams will also test the system with all toggles flipped off to ensure there are no surprises when the change goes live in production.
Toggle configuration can be managed in a number of ways ranging from the most simple, such as commenting out a line of code to prevent it from being deployed, through to more sophisticated approaches that allow for dynamic re-configuration of specific service instances. Once you reach a certain scale though, static configuration files become cumbersome to manage and implementing an approach that allows for runtime re-configuration becomes challenging. In response to this many organizations will move their toggle configuration into a centralized store, such as an existing application DB, and build out some form of admin UI that allows product managers, testers and system operators to view and modify the Features Flags and their configuration.