Developer 101: Feature flags or toggles Hot Tip

Job Alex Muturi
3 min readDec 19, 2023
Photo by Joshua Reddekopp on Unsplash

I remember one time when our squad had to deploy multiple features to prod and the agony that followed when the application broke. We spent hours fixing, cherry picking and rolling back features to restore stability; a night I will not easily forget. Yeah, been there.

Fortunately, the days of deploying code rollbacks with a side of hair-pulling are (almost) over, how so, enter LaunchDarkly, the feature flag maestro empowering developers like us to confidently unleash features in a controlled, data-driven manner. So buckle up, Angular aficionados, as we take a quick dive into the fascinating world of managing features with LaunchDarkly and its integration with your beloved framework!

Integration with Angular:

Angular, known for its robust front-end capabilities, meshes seamlessly with LaunchDarkly.

Let’s take a quick walk through the step-by-step process of integrating feature flags into your Angular applications, offering you unparalleled control over feature releases.

The sample below (for illustration only and not meant for production) assumes that you are familiar with basic angular concepts like services, injections and the general architecture. We will not cover how to create feature flags in LaunchDarkly since its beyond the scope of this article.

Step 1: Set Up Your LaunchDarkly Account:

  • Head over to the LaunchDarkly website and sign up for an account if you haven’t already.
  • Create a new project within LaunchDarkly, and you’ll be provided with an SDK key that you’ll use to connect your Angular app with LaunchDarkly.

Step 2: Install LaunchDarkly SDK:

  • In your Angular project, use your preferred package manager (npm or yarn) to install the LaunchDarkly SDK:
npm install launchdarkly-js-client-sdk

// or

yarn add launchdarkly-js-client-sdk

Step 3: Initialize LaunchDarkly in Your Angular App:

  • In your application file (for examplefeature-toggles.service.ts), import the LaunchDarkly SDK and initialize it with your SDK key and context:
import { LdClient, LDContext } from 'launchdarkly-js-client-sdk';  
private appConfig = {
kind: 'angular-app',
key: 'my-unique-key-id-here',
application: 'sample-app'
} as LDContext
ldclient = LdClient.initialize('YOUR_SDK_KEY', appConfig);

Step 4: Use Feature Flags in Your Components:

  • Wherever you want to conditionally render features based on flags, import the feature toggle service and use it to check the status of a feature flag:
// import your feature toggle service and then 
.....

featureFlag = 'my-feature-flag';
this.featureToggles.ldclient.on('ready', () => {
const isFeatureEnabled = ldclient.variation(featureFlag, false);
if (isFeatureEnabled) {
// Render or enable the feature
} else {
// Feature is disabled, handle accordingly
}
});

Step 5: Roll Out Features Gradually:

With LaunchDarkly, you can easily control the percentage rollout of a feature flag. Adjust the percentage in the LaunchDarkly dashboard to gradually expose the feature to a broader audience.

Additional Rollout Strategies:

1. User Targeting:

Target specific user segments based on user context attributes (e.g., user roles, location, or subscription type). Tailor features to different user groups for a personalized experience.

2. Custom Rules:

Create custom targeting rules using LaunchDarkly’s rule editor. Define conditions based on user attributes or other contextual information to finely control which users see a particular feature.

3. Experimentation with A/B Testing:

Leverage LaunchDarkly’s experimentation features to conduct A/B tests. Compare the performance and user response of different feature variations before making a final decision on a full rollout.

4. Canary Releases:

Implement canary releases by exposing new features to a small subset of users before making them available to the entire user base. Monitor performance and user feedback in real-time.

Benefits for Developers:

  • Risk Mitigation: Minimize the impact of new features by rolling them out gradually, reducing the risk of bugs affecting your entire user base.
  • A/B Testing: Easily conduct A/B tests by toggling features for different user segments, allowing you to gather valuable insights on user preferences and behavior.
  • Continuous Deployment: Accelerate your development cycle by decoupling feature releases from code deployments, ensuring a smoother workflow.

Best Practices and Tips:

  • Scoped Features: Apply feature flags to specific components or sections of your Angular app for fine-grained control.
  • Monitoring and Metrics: Implement effective monitoring and utilize LaunchDarkly’s analytics to track the performance of your feature flags.

Conclusion

As the software development landscape evolves, embracing tools like LaunchDarkly becomes imperative. The flexibility and control provided by feature flags in Angular apps can revolutionize your development process, giving you the edge in delivering top-notch user experiences.

--

--

Job Alex Muturi

Angular Developer | Angular Kenya Peer Mentor | Blogger | Tech Speaker