Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Flags #1897

Closed
murny opened this issue Sep 28, 2020 · 1 comment
Closed

Feature Flags #1897

murny opened this issue Sep 28, 2020 · 1 comment
Assignees

Comments

@murny
Copy link
Contributor

murny commented Sep 28, 2020

From Matt:

we’re probably going to want some kind of feature flagging solution so that we can land stuff like this into master instead of having things sit in some long running branch

We want to look at a way to introduce Feature flags into Jupiter. What is a feature flag? Wikipedia defines this as such (https://en.wikipedia.org/wiki/Feature_toggle):

A feature toggle (also feature switch, feature flag, feature flipper, conditional feature, etc.) is a technique in software development that attempts to provide an alternative to maintaining multiple branches in source code (known as feature branches), such that a software feature can be tested even before it is completed and ready for release. Feature toggle is used to hide, enable or disable the feature during runtime. For example, during the development process, a developer can enable the feature for testing and disable it for other users.[1] In this way, feature flags can be used to implement targeted rollouts of features to specific subsets of users, a practice known as feature gating.[2]

Continuous release and continuous deployment provide developers with rapid feedback about their coding. This requires the integration of their code changes as early as possible. Feature branches introduce a bypass to this process.[3] Feature toggles are an important technique used for the implementation of continuous delivery.

The technique allows developers to release a version of a product that has unfinished features. These unfinished features are hidden (toggled) so they do not appear in the user interface. This allows many small incremental versions of software to be delivered without the cost of constant branching and merging. Feature toggles may allow shorter software integration cycles.[4] A team working on a project can use feature toggle to speed up the process of development, that can include the incomplete code as well.

There is various solutions that exist in the ruby community:
https://github.com/jnunemaker/flipper
https://github.com/fetlife/rollout
https://github.com/voormedia/flipflop
https://github.com/Unleash/unleash

Let's look into these solutions and find the best one that we can use for feature flags in Jupiter

@murny murny self-assigned this Sep 28, 2020
@murny
Copy link
Contributor Author

murny commented Oct 14, 2020

Solutions / Feature Flag Gems

https://github.com/Unleash/unleash

Unleash is a feature toggle system, that gives you a great overview of all feature toggles across all your applications and services. It comes with official client implementations for Java, Node.js, Go, Ruby, Python and .Net.

The main motivation for doing feature toggling is to decouple the process for deploying code to production and releasing new features. This helps reducing risk, and allow us to easily manage which features to enable

  • More of a Feature flags as-a-service approach. Would be overkill for Jupiter as we would either need to pay or self host our own feature flag service which would be overkill for Jupiter

https://github.com/fetlife/rollout

Fast feature flags based on Redis.

  • Very simple helper and global API around redis to store and check feature flags

  • Quite active

  • Oldest and most starred Ruby feature flag gem

  • No UI offering out of the box (and official UI addon gems are either out of date or lacking in features)

https://github.com/voormedia/flipflop

Flipflop provides a declarative, layered way of enabling and disabling application functionality at run-time. It is originally based on Flip.

  • Seems like this Gem has a lot of nice features, including different storage methods, rake tasks/Admin UI Dashboard to control feature flags.

  • Doesn't have more advanced features like A/B testing (allowing feature flags by percentage or time), or feature flags by group/single users

  • Hasn't been updated in 17 months

https://github.com/jnunemaker/flipper

Feature flipping is the act of enabling or disabling features or parts of your application, ideally without re-deploying or changing anything in your code base.

The goal of this gem is to make turning features on or off so easy that everyone does it. Whatever your data store, throughput, or experience, feature flipping should be easy and have minimal impact on your application.

  • Very popular (newest of the 3 ruby gems with just a few less github stars then rollout)
  • Contains all the features you could possibly want
    • Ability to use different adapters
    • UI Dashboard out of the box
    • Different ways to toggle feature flags (A/B testing, by users, etc)
    • and more
  • Very well maintained

Conclusion/Winner

Seems like Flipper gem is the most widely used and most popular. And for good reason too. Looks like a one stop shop for all features you could possibly want but still allowing for alot of customization. There is a parallel pro gem for Flipper as well (kinda like sidekiq), which means you can safely bet it will continue to be well supported in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants