Feature Flagging With React

Rate this content
Bookmark

Decouple your releases from deployments, while maintaining full engineering control of your application.

This talk has been presented at React Advanced 2023, check out the latest edition of this React Conference.

Watch video on a separate page

FAQ

Feature management is a practice in software engineering that involves using various techniques to control and modify the functionality of an application without needing to deploy new code. It allows for features to be turned on or off, enabling A/B testing, gradual rollouts, and remote configuration among other capabilities.

Feature management offers several benefits including decoupling feature releases from code deployments, enabling continuous delivery, providing increased control and flexibility over feature rollout, aiding in risk mitigation, and improving visibility and collaboration across teams.

Feature flags, or feature toggles, are conditional coding tools that allow developers to enable or disable functionality in an application. This can be done without deploying new code, making it a powerful tool for testing and modifying system behavior in real-time.

GitOps is a modern operational framework that extends the principles of Infrastructure as Code (IaC) by using Git as a single source of truth for declarative infrastructure and applications. It emphasizes version control, full audit trails, and consistent environments across development, staging, and production using automated deployment pipelines.

Infrastructure as Code (IaC) is a practice in software engineering where infrastructure is provisioned and managed using code rather than through manual processes. This approach enables developers to manage infrastructure with the same tools and practices they use for application code, leading to faster deployments, and more consistent, reliable environments.

Feature management supports various types of testing such as A/B testing, where different variations of a feature are tested against each other, and multivariate testing, which tests multiple variables to determine the best combination. It also enables gradual rollouts to test features on a small segment of users before a wider release.

Feature management improves risk mitigation by allowing features to be rolled out incrementally to select user groups or environments, monitoring the impact, and quickly rolling back if issues arise. This reduces the potential negative impact on the entire user base and allows for more controlled testing.

Fahad Heylaal
Fahad Heylaal
27 min
23 Oct, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Feature management in React.js applications involves techniques like feature flags and toggles, allowing for decoupling of application deployment from feature releases. Gradual rollouts, remote configuration, and audience targeting are key techniques. Increased control and flexibility in feature management provide targeted launches and quick rollbacks, but there are pain points like lack of reviews and approval workflow. Infrastructure as code (IAC) and GitOps are practices that can be combined with feature management. Feature Advisor is a tool that helps with feature management in React applications, focusing on principles rather than the tool itself.

1. Introduction to Feature Management

Short description:

Hi, everyone. My name is Fahad Hilal. I work as a Principal Engineer in DAZN company. Today, I'm here at React Advanced to talk about feature management in React.js applications. I'll focus on the conceptual side of things, the techniques involved, benefits, and pain points. I'll also touch upon infrastructure as code and GitOps. Then, I'll show you how I combined these concepts to create Feature Advisor. The tool is negligible; it's the concepts that matter. I'll demonstrate how to bring this practice to your React application. Feature management is a practice consisting of techniques like feature flags or toggles. It's an if condition that externally manages true or false values, not hard-coded in your application.

Hi, everyone. My name is Fahad Hilal. I work as a Principal Engineer in DAZN company. We are all about sports streaming and many other things related to sports. And today, I'm here at React Advanced. Thank you for letting me come here and give you a talk about feature management in React.js applications.

So initially, when I submitted my talk, I had the idea that I'll just come in and talk about a new open source project of mine and just like advertise it, let everyone know about it, but I realized that's going to be a big, big failure if I really do it that way, because then nobody will understand why I even built that tool and what are the pain points and suffering that led me to even think of building such a tool. So then I backtracked a bit and then I made this my agenda. So I want to focus more on the conceptual side of things, starting with feature management, like what it is, what kind of practice it is, the techniques involved in it, and how we can adopt it, what are the benefits, and also what are the pain points that come with it.

And very quickly, after that, I also want to touch upon two topics called infrastructure as code and also GitOps. So I really want to insist that I understand this is a conference that is focused more on the React side of things in the front-end area. Even if you do not know these terms, I have a very strong feeling that you actually know it without knowing these terms. So I'll clear that up very, very soon. And then, once we have covered the conceptual side of things, I'll show you how I combined these three different practices, three different concepts together to create this solution that I call Feature Advisor. And then I also want to, again, mention that the tool is the negligible part of this talk really. A tool could be anything, like it could be a third-party SaaS tool or this tool that is open source or something that is bespoke and built by yourself, it really doesn't matter. So it's really the concepts, the practice in software engineering. And then of course, because it's a React advanced conference, so I also want to show you how you can bring this practice in your React application and also benefit from that. So I promise that I'll show you some code, but at the very, very end.

So first things first, what is feature management? What is it like? How does it differ from some other source of management, like content management or things like that? So if I were in the same room with all of you, I think I would have asked you all to raise your hands asking, have you ever used feature flags before in your organization, in your source code, in your team? Have you ever done that? But since we are remote right now, so I will just go ahead with my slide. So I'll start by saying that feature management in the end is a practice. A practice that is consisting of several different techniques that we apply in software engineering. So the first one that comes to my mind is called feature flags or feature toggles that you might already have used before. So if you have not, then I want to mention that it's really an if condition, an if statement. It's an on off switch that you check in your code somewhere with an if statement somewhere. It could be JavaScript, it could be Golang, really language doesn't matter here. And if something is true, you do something. If not, then you do something else. As simple as that. But the idea is that conditions that evaluate those values as true or false is something that is externally managed and something that is not hard-coded in your application.

2. Feature Management Techniques

Short description:

Feature management allows you to decouple application deployment from feature releases. A-B testing, gradual rollouts, remote configuration, and audience targeting are key techniques. Gradual rollouts involve launching a new feature to a small percentage of traffic and gradually increasing it. Remote configuration allows external management of specific product behavior. Audience targeting, like Facebook's use of New Zealand as a testing ground, is another approach.

Because the idea is we want to decouple your application deployment from your feature releases. I'll talk more about it soon in the next slide, but for now, let's just assume that it's an on-off switch that just controls the behavior of your application in certain areas.

And then also, if you are into more product development, you might have also heard about A-B testing or multivariate testing. So, what happens is, imagine you have a new sign-up journey designed and you want to test different variations, like variation A, variation B, variation C. So, you want to test it against all your traffic. So, maybe 33% of the traffic gets variation A, other 33% gets B, and the others C. And then you figure out which one converts best. Is it the B variation that gives you the most successful sign-ups and on? So, this is one of the techniques as well that you externally manage while influencing your application without requiring any further deployment.

And one other thing that's very, very crucial that I found in my carrier is the concept of gradual rollouts. So, imagine you and your team have been building a new product feature that you're launching, let's say, next month. You don't really want to go for a big bang release. You don't want to release it to the entire world or to 100% of your traffic. You want to be confident that, hey, we built this thing for such a long time without exposing it to users. Maybe you should figure out if it actually works with real users at all before we expose it to everyone. So, what you can do is launch it only to 5% of your traffic. Then 10%, gain some confidence, see that everything works well with your back-end system, with your front-end code and everything. And then you gradually move the percentage level all the way up to 100%. And you know that, okay, now it's completely out. Nothing is held back for anyone anymore. And so that's gradual rollout.

The other one is remote configuration. Imagine you have some very specific product behavior that you can parametrize, and you do not want to hard-code that configuration in your application itself. So you manage that configuration externally, and you can tweak the configuration whenever you feel like it, and it influences the behavior of your application right away, without requiring any further deployment. How amazing is that? Imagine this new redesign that had some toggle, like on or off. You could just toggle it off whenever you feel like, because you think that this is causing some harm to your production environment. And then comes audience targeting. So I'll pick one example from Facebook, actually. They call themselves Meta now. So New Zealand was always their playground, their testing ground. So they used to always launch these new features and they would expose it to users in New Zealand only, for some reason, don't ask me why.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Don't Solve Problems, Eliminate Them
React Advanced 2021React Advanced 2021
39 min
Don't Solve Problems, Eliminate Them
Top Content
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
Using useEffect Effectively
React Advanced 2022React Advanced 2022
30 min
Using useEffect Effectively
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Design Systems: Walking the Line Between Flexibility and Consistency
React Advanced 2021React Advanced 2021
47 min
Design Systems: Walking the Line Between Flexibility and Consistency
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
React Concurrency, Explained
React Summit 2023React Summit 2023
23 min
React Concurrency, Explained
Top Content
Watch video: React Concurrency, Explained
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Managing React State: 10 Years of Lessons Learned
React Day Berlin 2023React Day Berlin 2023
16 min
Managing React State: 10 Years of Lessons Learned
Top Content
Watch video: Managing React State: 10 Years of Lessons Learned
This Talk focuses on effective React state management and lessons learned over the past 10 years. Key points include separating related state, utilizing UseReducer for protecting state and updating multiple pieces of state simultaneously, avoiding unnecessary state syncing with useEffect, using abstractions like React Query or SWR for fetching data, simplifying state management with custom hooks, and leveraging refs and third-party libraries for managing state. Additional resources and services are also provided for further learning and support.
TypeScript and React: Secrets of a Happy Marriage
React Advanced 2022React Advanced 2022
21 min
TypeScript and React: Secrets of a Happy Marriage
Top Content
React and TypeScript have a strong relationship, with TypeScript offering benefits like better type checking and contract enforcement. Failing early and failing hard is important in software development to catch errors and debug effectively. TypeScript provides early detection of errors and ensures data accuracy in components and hooks. It offers superior type safety but can become complex as the codebase grows. Using union types in props can resolve errors and address dependencies. Dynamic communication and type contracts can be achieved through generics. Understanding React's built-in types and hooks like useState and useRef is crucial for leveraging their functionality.

Workshops on related topic

React Performance Debugging Masterclass
React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Hooks Tips Only the Pros Know
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React, TypeScript, and TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
Paul Everitt
Paul Everitt
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
Designing Effective Tests With React Testing Library
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
Josh Justice
Josh Justice
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn
Master JavaScript Patterns
JSNation 2024JSNation 2024
145 min
Master JavaScript Patterns
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
During this workshop, participants will review the essential JavaScript patterns that every developer should know. Through hands-on exercises, real-world examples, and interactive discussions, attendees will deepen their understanding of best practices for organizing code, solving common challenges, and designing scalable architectures. By the end of the workshop, participants will gain newfound confidence in their ability to write high-quality JavaScript code that stands the test of time.
Points Covered:
1. Introduction to JavaScript Patterns2. Foundational Patterns3. Object Creation Patterns4. Behavioral Patterns5. Architectural Patterns6. Hands-On Exercises and Case Studies
How It Will Help Developers:
- Gain a deep understanding of JavaScript patterns and their applications in real-world scenarios- Learn best practices for organizing code, solving common challenges, and designing scalable architectures- Enhance problem-solving skills and code readability- Improve collaboration and communication within development teams- Accelerate career growth and opportunities for advancement in the software industry
Build Modern Applications Using GraphQL and Javascript
Node Congress 2024Node Congress 2024
152 min
Build Modern Applications Using GraphQL and Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Come and learn how you can supercharge your modern and secure applications using GraphQL and Javascript. In this workshop we will build a GraphQL API and we will demonstrate the benefits of the query language for APIs and what use cases that are fit for it. Basic Javascript knowledge required.