Using feature flags to run betas

Lately, we’ve been releasing most of our larger Cushion features as betas first. We do this in order to launch an MVP of the feature, then have people test it while we incrementally improve upon it. For invoicing, we ran betas for line itemsinvoice logos, and sending invoices. Currently, we’re running betas for time tracking and accepting payments through Stripe. We use “feature flags” to toggle these betas.

In all honesty, there’s not much involved in implementing feature flags. On the user model, we have a features column, which is an array of strings. Each string is a key that we use to identify a beta (invoicingtime_tracking, etc.). When a user asks to be part of a beta, we simply add the beta key to the features column and they’re good to go.

On the front-end, all we need to do is show or hide features based on whether the keys exist in the user’s features array. For the Stripe beta, we enable the ability to authorize the integration. For the time tracking beta, we simply show the tab for the time tracking section. This way, the backend never needs to know about anything.

Well, almost never.

So far, the only beta that was tricky to toggle was invoices with line items. Previously, we only had invoices with a total amount, so the line item beta required the backend to handle both types of invoices. Still, this was easy because it simply meant calculating a total for line item users and manually entering a total for everyone else. After that beta, we decided to only release betas with a simple toggle on the front-end.

For customer support, we use Intercom, which lets us tag users with specific properties. We tag beta users with the features that they’re testing and we segment them to send messages to only the testers. For our time tracking beta, we created an automated onboarding message that appears when beta users visit the time tracking section for the first time. This has been incredibly helpful for setting expectations and listing the sub-features that we’re actively working on.

As we release new betas and people request to be a part of them, using Intercom tags, we can easily see if the person has tested a previous beta. If someone has tested multiple betas, we could easily message them when a new beta is ready to test.

Because betas have a “private“ feel, most people assume that we limit the number of “spots”. We actually welcome anyone who asks. As long as they’re well-aware that the feature is in-progress and might have a few loose ends, we’re always open to another set of eyes.

If you’re interested in testing any of our new features, hit me up inside Cushion and I’ll invite you to the beta.