Many continuous delivery concepts are most applicable for software that is running on your own servers whether as part of a website, internal application or SaaS offering. For teams who write products that are installed by their customers, some continuous delivery concepts are hard to implement. In this entry, I want to look at the idea of a feature toggle and dark launches to see how product teams can leverage the technique.
Decouple Deploy and Release
The general idea with a feature toggle is that a feature can be turned on or off via configuration. For teams practicing continuous delivery, this means that they can deploy a new feature to production without that feature being active. A deployment with the feature turned off for all users is generally considered a “dark launch.” The decoupling of deploy and release has happened because deploying the code and releasing the feature are no longer one in the same.
Feature toggles support experimentation. Teams will turn on the feature for some users and measure the results. If they are positive, they roll it out to progressively more users. If the results are poor, they can turn it off and go back to the drawing board with limited users impacted by the degraded experience.
How the UrbanCode Release Team uses toggles in a product
The UrbanCode team has used feature toggles for a long time. However, historically they have been used for controversial features where some customers badly needed some behavior but others would be hurt by it. We would add the capability but have it off by default and let customers opt-in to using it. While a feature toggle, that mode of toggling doesn’t look a lot like the pattern from continuous delivery.
Over the past year, our UrbanCode Release team has taken inspiration from what we teach around CD and has begun using toggles support experimentation and faster feedback from a subset of the user-base. The general pattern is that we will decide that we want to deliver a major new capability but want to experiment with the implementation over time. We quietly announce the new capabilities in the release notes and notify customers who have expressed interest in a capability either through discussions with the team or through the Enhancement (RFE) Community.
Getting feedback is trickier. Most of our customers don’t want us sending metrics home from the applications running on their servers. So instead, when the feature is toggled on, the UI alerts the user that they are using an experimental feature and provides a quick link that can be used to send feedback. What we’ve had from this so far has been instrumental in releasing features like the pipeline view. We’re also open to the possibility that we will totally miss the mark and will remove a feature rather than releasing it as a full capability. While it hasn’t happened yet, getting that negative feedback would save us a lot of work and keep the product clear of a bad feature that would have to be maintained and supported for the long term.
While we are still pretty early in using feature toggles for experimentation, the results have been very positive so far. Have you tried anything similar? If so, share your experiences in the comments below.