SlideShare una empresa de Scribd logo
1 de 45
Feature Flag
Roll Out & Roll Back without Deployment
Feature Flag?
New Feature On/Off
Index
1. Problems before Feature Flag
2. Benefits
3. Weak Points
4. Libraries
Problems
before Feature Flag
Deployment == Roll Out
Deployment
before Feature
Flag
Problem 0.
No Test in Production
Test ENV != Prod ENV
Problem 1.
Unclear Delivery Time
From Click To Roll Out:
Maybe.. 30 minutes
Problem 2.
No Way to Dog
Fooding
QA => All Users
RollBack
before Feature
Flag
Problem 3.
Slow Delivery
From Click To Roll Out:
Maybe.. 30 minutes
Solution.
New Feature On/Off
to Some Users
One Click UI
Code Level
if FeatureFlag.active?('fetureFoo', user)
c = a/b
else
c = b == 0 ? 0 : a/b
end
Feature Flag Service
• Create if new flag is detected.
• List flags.
• Update a flag.
• Delete too old flags.
Infrastructure
After Feature Flag
Deployment
after Feature Flag
Benefit 0.
Test in Production
Benefit 1.
Clear & Fast Delivery
Time
One Click &
Real Time Roll Out
Benefit 2.
Easy Dog Fooding
QA => Internal User => All
Rollback
After Feature Flag
Benefit 3.
Fast Roll Back
One Click &
Real Time Roll Back
Unexpected Benefit 4.
Simple A/B Test
Weak Points
• Uncooperative Members
• Too Big Changes to Use Feature Flag
• Obsoleted Feature Flags are Debts
• Dependency on Each Feature Flags
No feature flag can be
better
• Brand New API
• Clear & Tiny Changes
• Fixing a bug that makes something worthless
Weak Point 0.
Uncooperative
Members
Solution 0.
Code Review!
No Flag No Merge
Weak Point 1.
Too Big Changes
to use Feature Flag
Solution 1.
Apply to End Point
Solution 1-0. in Method
if FeatureFlag.active?('fetureFoo', user)
c = foo(1, 2)
else
c = deprecated_foo(1, 2)
end
def foo(a,b)
...
...
end
def deprecated_foo(a,b)
...
...
end
Solution 1-0. in Class
if FeatureFlag.active?('fetureFoo', user)
c = Foo.new(1, 2)
else
c = DeprecatedFoo.new(1, 2)
end
class Foo(a,b)
...
...
end
class DeprecatedFoo(a,b)
...
...
end
Solution 1-0. in HTML
# Javascript
<option
ng-show=“FeatureFlag.is_active(‘fetureFoo', user)"
value="foo1"
/>
<option
ng-hide=“FeatureFlag.is_active('fetureFoo', user)"
value="foo2"
/>
# Server Rendering
<% if FeatureFlag.active?('fetureFoo', user) %>
<option value="foo1"/>
<% else %>
<option value="foo2"/>
<% end %>
Weak Point 2.
Obsoleted Feature Flags are
Debts
Solution 2.
Clean Up in The Sprint
Weak Point 3.
Dependency on Each Feature
Flag
Feature Flag in Feature Flag in Feature Flag in …
Libraries
• rollout for Ruby
• Gutter for Python
• Togglez for java
Reference
• https://martinfowler.com/articles/feature-
toggles.html
• https://martinfowler.com/bliki/FeatureToggle.html
• https://msdn.microsoft.com/en-
us/magazine/dn683796
• http://apptimize.com/feature-flags-launch/
Q & A

Más contenido relacionado

Destacado

Automating good coding practices
Automating good coding practicesAutomating good coding practices
Automating good coding practices
Kevin Peterson
 
Why we used Feature Branching
Why we used Feature BranchingWhy we used Feature Branching
Why we used Feature Branching
Alan Parkinson
 

Destacado (15)

Feature toggling
Feature togglingFeature toggling
Feature toggling
 
Histedit Mercurial Extension
Histedit Mercurial ExtensionHistedit Mercurial Extension
Histedit Mercurial Extension
 
Automating good coding practices
Automating good coding practicesAutomating good coding practices
Automating good coding practices
 
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix StreamsHow Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
How Samsung Engineers Do Pre-Commit Builds with Perforce Helix Streams
 
Apache Yetus: Intro to Precommit for HBase Contributors
Apache Yetus: Intro to Precommit for HBase ContributorsApache Yetus: Intro to Precommit for HBase Contributors
Apache Yetus: Intro to Precommit for HBase Contributors
 
Introduction to Feature Toggle and FF4J
Introduction to Feature Toggle and FF4JIntroduction to Feature Toggle and FF4J
Introduction to Feature Toggle and FF4J
 
Apache Yetus: Helping Solve the Last Mile Problem
Apache Yetus: Helping Solve the Last Mile ProblemApache Yetus: Helping Solve the Last Mile Problem
Apache Yetus: Helping Solve the Last Mile Problem
 
Who will test your tests?
Who will test your tests?Who will test your tests?
Who will test your tests?
 
Overcoming the fear of deployments
Overcoming the fear of deploymentsOvercoming the fear of deployments
Overcoming the fear of deployments
 
Continuous Visual Integration - RailsConf 2016 - Mike Fotinakis - Percy.io
Continuous Visual Integration - RailsConf 2016 - Mike Fotinakis - Percy.ioContinuous Visual Integration - RailsConf 2016 - Mike Fotinakis - Percy.io
Continuous Visual Integration - RailsConf 2016 - Mike Fotinakis - Percy.io
 
Pull requests and testers can be friends
Pull requests and testers can be friendsPull requests and testers can be friends
Pull requests and testers can be friends
 
Entregas Contínuas com feature toggles
Entregas Contínuas com feature togglesEntregas Contínuas com feature toggles
Entregas Contínuas com feature toggles
 
Continuous Integration, Delivery and Deployment
Continuous Integration, Delivery and DeploymentContinuous Integration, Delivery and Deployment
Continuous Integration, Delivery and Deployment
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk
 
Why we used Feature Branching
Why we used Feature BranchingWhy we used Feature Branching
Why we used Feature Branching
 

Más de Shin Kim (9)

03. HTTPS & Restful
03. HTTPS & Restful03. HTTPS & Restful
03. HTTPS & Restful
 
02. Model in Ruby on Rails
02. Model in Ruby on Rails02. Model in Ruby on Rails
02. Model in Ruby on Rails
 
NGS(Next-Generation Sequencing) Introduction
NGS(Next-Generation Sequencing) IntroductionNGS(Next-Generation Sequencing) Introduction
NGS(Next-Generation Sequencing) Introduction
 
엷홈페이지의 이해
엷홈페이지의 이해엷홈페이지의 이해
엷홈페이지의 이해
 
엷 인프라 이해하기 & Ionic로 앱 만들기
엷 인프라 이해하기 & Ionic로 앱 만들기엷 인프라 이해하기 & Ionic로 앱 만들기
엷 인프라 이해하기 & Ionic로 앱 만들기
 
Infer hidden relationships from literature by multi level context terms
Infer hidden relationships from literature by multi level context termsInfer hidden relationships from literature by multi level context terms
Infer hidden relationships from literature by multi level context terms
 
Rajo link
Rajo linkRajo link
Rajo link
 
생물학적 해석 도구 실습: DAVID, ArrayXPath, BioLattice
생물학적 해석 도구 실습: DAVID, ArrayXPath, BioLattice생물학적 해석 도구 실습: DAVID, ArrayXPath, BioLattice
생물학적 해석 도구 실습: DAVID, ArrayXPath, BioLattice
 
Identifying Gene-Disease Associations
Identifying Gene-Disease AssociationsIdentifying Gene-Disease Associations
Identifying Gene-Disease Associations
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Feature Flag: Roll Out & Roll Back without Deployment