LogoLogo
  • Technical Direction
  • Technical overview
    • Technical Implementation
    • API Design Guide
      • Data Definitions and Standards
      • Data Transfer Objects
      • Documentation
      • Environments
      • Error Handling
      • Example API Service
      • GraphQL Naming Conventions
      • Methods
      • Naming Conventions
      • Once Only Principle
      • Pagination
      • Resource Oriented Design
      • REST Request
      • REST Response
      • Security
      • Versioning
    • Ísland.is Public Web Data Flow
    • Code Reviews
    • Code Standards
    • Monorepo
    • Project Management
    • Teamwork
    • Architectural Decision Records
      • Use Markdown Architectural Decision Records
      • Use NX
      • Continuous Integration
      • CSS
      • Branching and Release Strategy
      • Error Tracking and Monitoring
      • What API Management Tool to Consider
      • Viskuausan Static Site Generator
      • Use OAuth 2.0 and OpenID Connect As Protocols for Authentication and Authorization
      • Unified Naming Strategy for Files and Directories
      • CMS
      • Open Source License
      • What Chart Library Should We Use Across Island.is?
      • What Feature Flag Service/application Should We Use at Island.is?
      • Logging, Monitoring and APM Platform
      • ADR Template
    • Log Management Policy
  • Products
    • Island.is Authentication Service
      • Terminology
      • Integration Options
      • Authentication Flows
      • Authorising API Endpoints
      • Session Lifecycle
      • Scopes and Tokens
      • Delegations
      • Configuration
      • Tools and Examples
      • Environments
      • Test IAS with Postman
      • Using the IAS admin portal
    • Notifications / Hnipp
      • New Notification Setup Guide
      • Notifications service workflow overview
      • Email notifications
    • Pósthólfið
      • Security Checklist
      • Introduction
      • Skjalatilkynning API
      • Skjalaveita API
      • Sequence Diagram
      • Interfaces
    • Straumurinn (X-Road)
      • Architecture Guidelines for Service Providers and Consumers
      • Setting up an X-Road Security Server
        • Network Configuration
      • X-Road - Uppfærsla á öryggisþjónum
      • Straumurinn - Notkun og umsýsla
      • X-Road Central - current version
  • Development
    • Getting Started
    • Generating a New Project
    • Definition of done
    • Devops
      • Continuous Delivery
      • Database
      • Dockerizing
      • Environment Setup
      • Logging
      • Metrics
      • NextJS Custom Server
      • Observability
      • Operations Base Principles
      • Security
      • Service Configuration
      • Support
    • AWS Secrets
    • Feature Flags
    • Documentation Contributions
    • Defining Monorepo Boundaries With Tags
    • OpenAPI
    • Code Generation
    • Workspace Settings (Deprecated)
    • External Contributions
  • REFERENCE
    • Problems
      • 400 Validation Failed
      • 400 Attempt Failed
      • 403 Bad Subject
      • 400 500 Template API Error
    • Glossary
  • Misc
    • Guide: Adding a Payment Step to an Application
    • Guide: Enable Organisations to Make Requests to an Application
    • README Template
Powered by GitBook
On this page
  • Context and Problem Statement
  • Decision Drivers
  • Considered Options
  • Decision Outcome
  • Positive Consequences
  • Negative Consequences
  • Pros and Cons of the Options
  • LaunchDarkly
  • FlagSmith
  • Optimizely Rollouts
  • Unleash
  • ConfigCat
  • FeatureFlagTech
  • Links

Was this helpful?

  1. Technical overview
  2. Architectural Decision Records

What Feature Flag Service/application Should We Use at Island.is?

  • Status: accepted

  • Deciders: developers and product owners of island.is

  • Date: 2021-01-18

Technical Story: Select a feature flag solution that gives us the ability to easily use feature flags across our solutions.

Context and Problem Statement

We want to be able to roll out new features gradually, perform A/B testing and target individual groups with a new feature. Also, we want to be able to flip a switch to turn features on or off for everyone.

Decision Drivers

  • Ease of setup

  • Ease of maintenance

  • Cost

  • Developer experience

  • Usability/UX

  • Operational concerns

  • Handling of PII

Considered Options

Decision Outcome

Chosen option: "ConfigCat", because:

  • We can probably get away with using it for very low cost

  • We can start using it almost right away with little configuration

If we decide later that we would like some of the features of LaunchDarkly, we want to be able to quickly swap. Thus, it is vital that we write some kind of service-agnostic wrapper.

Positive Consequences

  • We can start using feature flags across our stack.

Negative Consequences

  • Complexity of applications will increase

Pros and Cons of the Options

LaunchDarkly

  • Good, because it has great UX

  • Good, because it is the market leader and has a lot of customization options

  • Good, because it allows developers to change flags in config files for local development

  • Good, because it offers a relay proxy, minimizing outgoing connections

  • Good, because setup is easy and maintenance is really low

  • Good, because it has built-in support for multiple environments

  • Good, because the provide private attributes to help with PII

  • Good, because it has built-in datadog support

  • Bad, because it's the most expensive of the considered options

  • Bad, because it's hard to segment on PII

FlagSmith

  • Good, because it's free if self-hosted

  • Good, because it has built-in support for multiple environments

  • Good, because we can segment on PII since we store all the data

  • Good, because devs could run their own instance for local development

  • Bad, because we'd need to maintain it ourselves

  • Bad, because it has quite low community activity on GitHub

Optimizely Rollouts

  • Good, because it's free for a low volume

  • Good, because setup is easy and maintenance is really low

  • Good, because it has built-in support for multiple environments

  • Bad, because it's really hard to segment on PII

  • Bad, because UI is hard to navigate

  • Bad, because it doesn't seem to have a lot of open-source usage/examples

  • Bad, because it only supports development environment inside the product

  • Bad, because they don't have self-serve or an open price list

  • Bad, because it's part of some larger stack that we're not using, and seems to be opinionated towards that

Unleash

  • Good, because it's free if self-hosted

  • Good, because we can segment on PII since we store all the data

  • Good, because devs could run their own instance for local development

  • Good, because it has high community activity on GitHub

  • Bad, because it doesn't come with built-in support for multiple environments

  • Bad, because the UI is hard to navigate and counter-intuative in places

  • Bad, because we'd have to implement authorization ourselves

ConfigCat

  • Good, because they don't base their pricing on MAU but config downloads

  • Good, because they can be configured to store everythin in EU

  • Good, because setup is easy

  • Good, because it has built-in support for multiple environments

  • Bad, because we would want to implement our own relay

  • Bad, because it seems quite bare-bones compared to others

  • Bad, because it only supports development environment inside the product

  • Bad, because it's really hard to segment on PII

FeatureFlagTech

  • Good, because it's cheap

  • Good, because setup is easy and maintenance is really low

  • Bad, because we would want to implement our own relay

  • Bad, because it doesn't support user segmentation or variations

  • Bad, because their UI is horrible

Links

PreviousWhat Chart Library Should We Use Across Island.is?NextLogging, Monitoring and APM Platform

Last updated 2 years ago

Was this helpful?

LaunchDarkly
FlagSmith
Optimizely Rollouts
Unleash
ConfigCat
FeatureFlagTech
LaunchDarkly read flags from files
Optimizely Rollouts Plans Comparison