SlideShare a Scribd company logo
@danaluther
Integrated Feature Management
Using Feature Flags
Dana Luther
@danaluther
What are we going to do today, Brain?
@danaluther
What are we going to do today, Brain?
What are feature flags?
@danaluther
What are we going to do today, Brain?
What are feature flags?
Why do we want to use them?
@danaluther
What are we going to do today, Brain?
What are feature flags?
Why do we want to use them?
How do we use and integrate them?
@danaluther
What is a feature flag?
@danaluther
What is a feature flag?
A variable that defines a condition
@danaluther
What is a feature flag?
A variable that defines a condition
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 source-code branches (known as feature branches), such that
a 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 run time.
“
“
— Wikipedia
@danaluther
https://featureflags.io
@danaluther
What is integrated management?
@danaluther
What is integrated management?
Defining your conditional such that you don’t need to update your
codebase to switch features.
@danaluther
What is integrated management?
Defining your conditional such that you don’t need to update your
codebase to switch features.
Avoiding feature branches for the win!
@danaluther
Feature branch misery
…the struggle is real…
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
@danaluther
Feature branch misery …
2 logic * 3 UI =
@danaluther
Can we make it better?
@danaluther
Can we make it better?
Of Course! (Or we wouldn’t be here right now)
@danaluther
Use conditional statements to
consolidate the logic branches
@danaluther
Consolidate logic branches …
master
sleepy-greeting
@danaluther
Consolidate logic branches …
@danaluther
Consolidate logic branches …
@danaluther
Consolidate logic branches …
@danaluther
Consolidated but separated
@danaluther
YAY!!
We can get rid of the sleepy branches!
@danaluther
YAY!!
We can get rid of the sleepy branches!
(And there was much rejoicing)
@danaluther
YAY!!
We can get rid of the sleepy branches!
(And there was much rejoicing)
…but what about our UI features?
@danaluther
Establish condition for view rendering
@danaluther
Establish condition for view rendering
@danaluther
@danaluther
(And there was much rejoicing)
@danaluther
Why do we want to use feature flags?
@danaluther
Why do we want to use feature flags?
A/B Testing
@danaluther
Why do we want to use feature flags?
A/B Testing
Canary Rollouts
@danaluther
Why do we want to use feature flags?
A/B Testing
Canary Rollouts
Maintenance Windows (internal and/or third party)
@danaluther
Why do we want to use feature flags?
A/B Testing
Canary Rollouts
Maintenance Windows (internal and/or third party)
Seasonal Content / Calendar Driven
@danaluther
Why do we want to use feature flags?
A/B Testing
Canary Rollouts
Maintenance Windows (internal and/or third party)
Seasonal Content / Calendar Driven
See more at: http://featureflags.io/feature-flag-uses/
@danaluther
A/B Testing
@danaluther
A/B Testing
Version A - 50%
@danaluther
A/B Testing
Version A - 50% Version B - 50%
@danaluther
Canary Testing
@danaluther
Canary Testing
Version A - 90%
@danaluther
Canary Testing
Version A - 90% Version B - 10%
SIDEBAR:
@danaluther
Why do they call it canary testing?
https://www.smithsonianmag.com/smart-news/story-real-canary-coal-mine-180961570/
@danaluther
Canary Testing
Version A - 90% Version B - 10%
@danaluther
Maintenance Windows
“Offline” Mode
@danaluther
Maintenance Windows
“Normal” Mode “Offline” Mode
@danaluther
Maintenance Windows
“Normal” Mode “Offline” Mode
@danaluther
Seasonal Content
@danaluther
Seasonal Content
“Normal” Mode
@danaluther
Seasonal Content
“Normal” Mode “Annual Contest” Mode
@danaluther
Why do we want to use feature flags?
A/B Testing
Canary Rollouts
Maintenance Windows (internal and/or third party)
Seasonal Content / Calendar Driven
See more at: http://featureflags.io/feature-flag-uses/
@danaluther
How do we use feature flags?
@danaluther
How do we use feature flags?
PHP Libraries:
@danaluther
How do we use feature flags?
PHP Libraries:
https://featureflags.io/php-feature-flags/
@danaluther
How do we use feature flags?
PHP Libraries:
https://featureflags.io/php-feature-flags/
https://packagist.org/ (feature flag search)
@danaluther
How do we use feature flags?
PHP Libraries:
https://featureflags.io/php-feature-flags/
https://packagist.org/ (feature flag search)
https://packagist.org/packages/zumba/swivel
@danaluther
How do we use feature flags?
PHP Libraries:
https://featureflags.io/php-feature-flags/
https://packagist.org/ (feature flag search)
https://packagist.org/packages/zumba/swivel
https://packagist.org/packages/dhluther/yii2-swivel
@danaluther
Key Concept: User Experience Groups
The Cohort
@danaluther
User “Buckets”
Bucket ID 1
@danaluther
User “Buckets”
Bucket ID 1
Bucket ID 2
@danaluther
User “Buckets”
Bucket ID 1
Bucket ID 2
Bucket ID 6
@danaluther
User “Buckets”
1 2 3 4 5 6 7 8 9 10
Each bucket = 10% of visitors
@danaluther
User “Cohort”
1 2 3 4 5 6 7 8 9 10
If they all experience the same thing - they are in the same cohort.
@danaluther
1 2 3 4 5 6 7 8 9 10
The cohort is defined by the experience.
}
}
Feature A - Cohort A Feature B - Cohort B
@danaluther
We know our groups, but does
Google?
SIDEBAR:
@danaluther
https://tagmanager.google.com
https://analytics.google.com
https://support.google.com/analytics/answer/1009612
https://support.google.com/tagmanager/answer/6164391
GTM and Analytics Resources
@danaluther
GTM to Google Analytics - dataLayer
dataLayer = [{
"visitorType":"guest",
"bucketId":2,
"ecommerce":{
"promoView":{
"promotions":[{
"id":"FANCY_WIDGET",
"name":“Fancy Widget",
"creative":"featured-index",
"position":"featured"
}]
}
}
}];
@danaluther
GTM to Google Analytics - dataLayer
dataLayer = [{
"visitorType":"guest",
"bucketId":2,
"ecommerce":{
"promoView":{
"promotions":[{
"id":"FANCY_WIDGET",
"name":“Fancy Widget",
"creative":"featured-index",
"position":"featured"
}]
}
}
}];
@danaluther
Set GTM Variable from dataLayer
@danaluther
Set the Variable to a Dimension value
@danaluther
Google Analytics - Add Dimension
@danaluther
Google Analytics - A/B Segments
@danaluther
Google Analytics - Bucket Segments
SIDEBAR:
@danaluther
Instana APM Resources
https://instana.com
@danaluther
Google is ready … lets try our features
@danaluther
Scenario: Canary Release
@danaluther
Define Feature Slugs
IndexStyle.Fancy IndexStyle.Fancier
IndexStyle
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
IndexStyle 1,2,3,4,5,6,7,8,9,10
IndexStyle.Fancy 1,2,3,4,5,6,7,8,9,10
IndexStyle.Fancier 9,10
Canary Rollout of IndexStyle.Fancier
@danaluther
How Swivel interprets the feature slugs
@danaluther
Decouple from code deployment
@danaluther
Decouple from code deployment
@danaluther
Decouple from code deployment
@danaluther
Simple A/B toggle
@danaluther
Canary release the fancier UI
@danaluther
User Breakdown
Default
UI
Fancy
UI
Fancier
UI
IndexStyle.Fancy IndexStyle.Fancier
80% Users0% Users
(Killswitch Fallback)
20% Users
@danaluther
Check Analytics Performance
@danaluther
Fully Release the Feature
Feature Slug Buckets
IndexStyle 1,2,3,4,5,6,7,8,9,10
IndexStyle.Fancy 1,2,3,4,5,6,7,8,9,10
IndexStyle.Fancier 1,2,3,4,5,6,7,8,9,10
@danaluther
Updated User Breakdown
Default
UI
Fancy
UI
Fancier
UI
IndexStyle.Fancy IndexStyle.Fancier
0% Users0% Users
(Killswitch Fallback)
100% Users
@danaluther
Real World Example: New UI
IndexStyle.Fancy IndexStyle.Fancier
@danaluther
Scenario: A/B Test
@danaluther
Define Feature Slugs
Greeting.Sleepy
Greeting
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Greeting 1,2,3,4,5,6,7,8,9,10
Greeting.Sleepy 6,7,8,9,10
AB Test Sleepy Greeting
@danaluther
How Swivel interprets the feature slugs
@danaluther
How Swivel interprets the feature slugs
@danaluther
Flashback - Consolidated Greeting
@danaluther
Flashback - Consolidated Greeting
@danaluther
Vanilla Swivel Install - Swivel Feature
@danaluther
Swivel Feature - A or B
@danaluther
User Breakdown
Default
Greeting
Sleepy
Greeting
Greeting.Sleepy
50% Users50% Users
Cohort A Cohort B
@danaluther
Using Google Analytics: A -vs- B
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Greeting 1,2,3,4,5,6,7,8,9,10
Greeting.Sleepy
AB Test Sleepy Greeting - A Wins
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Deleted all Greeting features
AB Test Sleepy Greeting - A Wins
@danaluther
User Breakdown - Sleepy Disabled
Default
Greeting
Sleepy
Greeting
Greeting.Sleepy
0% Users100% Users
Cohort A Cohort B
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Greeting 1,2,3,4,5,6,7,8,9,10
Greeting.Sleepy 1,2,3,4,5,6,7,8,9,10
AB Test Sleepy Greeting - B Wins
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Greeting
Greeting.Sleepy 1,2,3,4,5,6,7,8,9,10
AB Test Sleepy Greeting - Oops
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
Greeting
Greeting.Sleepy 1,2,3,4,5,6,7,8,9,10
AB Test Sleepy Greeting - Oops
@danaluther
User Breakdown - Sleepy Disabled
Default
Greeting
Sleepy
Greeting
Greeting.Sleepy
100% Users0% Users
Cohort A Cohort B
@danaluther
Real World Example: A/B Location
Covid.A Covid.B
@danaluther
Scenario: Maintenance Window
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
ThirdPartyAPI 1,2,3,4,5,6,7,8,9,10
ThirdPartyAPI.UnderMaintenance 1,2,3,4,5,6,7,8,9,10
@danaluther
Real World Example: Maintenance
QuotingTool.ProductA.Unavailable
@danaluther
Scenario: Seasonal Content
@danaluther
Assign Features to Buckets / Cohorts
Feature Slug Buckets
OurCrazyContest 1,2,3,4,5,6,7,8,9,10
OurCrazyContest.AcceptingEntries 1,2,3,4,5,6,7,8,9,10
OurCrazyContest.VotingOpen
OurCrazyContest.FinalistsAnnounced
@danaluther
Real World Example: Seasonal/Temp.
ISI.Coronavirus.Alert
@danaluther
Automate Feature Toggling
@danaluther
Automate Feature Toggling
Cron or system.d timers
@danaluther
Automate Feature Toggling
Cron or system.d timers
Services that trigger database updates
@danaluther
Automate Feature Toggling
Cron or system.d timers
Services that trigger database updates
Sequential API failures automatically trigger ClientApi.Unavailable slug
creation
@danaluther
Automate Feature Toggling
Cron or system.d timers
Services that trigger database updates
Sequential API failures automatically trigger ClientApi.Unavailable slug
creation
?? You tell me!
@danaluther
https://featureflags.io
@danaluther
Questions??
🤔
?
? ?
?
https://www.linkedin.com/in/danaluther
dluther@envisageinternational.com

More Related Content

PDF
Integrated Feature Management - Using Feature Flags - PHPSerbia
PDF
Integrated Feature Management - Using Feature Flags - SunshinePHP
PDF
Mike hostetler - jQuery knowledge append to you
PDF
Advanced Topics in Continuous Deployment
PDF
How to analyze your codebase with Exakat using Docker - Longhorn PHP
PDF
Web Zurich - Make your animations perform well
PDF
SpringOne Platform recap 정윤진
KEY
For a Social Local and Mobile Drupal
Integrated Feature Management - Using Feature Flags - PHPSerbia
Integrated Feature Management - Using Feature Flags - SunshinePHP
Mike hostetler - jQuery knowledge append to you
Advanced Topics in Continuous Deployment
How to analyze your codebase with Exakat using Docker - Longhorn PHP
Web Zurich - Make your animations perform well
SpringOne Platform recap 정윤진
For a Social Local and Mobile Drupal

Similar to Integrated Feature Management - Using Feature Flags - MidwestPHP (20)

PPT
The State of Drupal 8
PDF
Android design patterns
PDF
The Ember.js Framework - Everything You Need To Know
PDF
Alfresco Day Barcelona 2016 - Developer Track - Herramientas para administrad...
PDF
DITA translatability best practices
PDF
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
PDF
Apache Lucene for Java EE Developers
KEY
How To Make A Framework Plugin That Does Not Suck
PDF
Twig: Friendly Curly Braces Invade Your Templates!
PDF
zookeeperProgrammers
PDF
Test driven infrastructure development (2 - puppetconf 2013 edition)
PPTX
Architecting Single Activity Applications (With or Without Fragments)
PDF
Drupal Camp Accessibility Presentation 2013
PDF
Keep it Secret, Keep it Safe - Docker Secrets and DI
PDF
PuppetConf 2014 Killer R10K Workflow With Notes
PPTX
Apache Maven - eXo VN office presentation
PPTX
Fundamental Design Patterns.pptx
KEY
Making your jQuery Plugins More Accessible
PDF
11 tools for your PHP devops stack
PDF
Puppet at Bazaarvoice
The State of Drupal 8
Android design patterns
The Ember.js Framework - Everything You Need To Know
Alfresco Day Barcelona 2016 - Developer Track - Herramientas para administrad...
DITA translatability best practices
Introduction to Honeycomb APIs - Android Developer Lab 2011 Q3
Apache Lucene for Java EE Developers
How To Make A Framework Plugin That Does Not Suck
Twig: Friendly Curly Braces Invade Your Templates!
zookeeperProgrammers
Test driven infrastructure development (2 - puppetconf 2013 edition)
Architecting Single Activity Applications (With or Without Fragments)
Drupal Camp Accessibility Presentation 2013
Keep it Secret, Keep it Safe - Docker Secrets and DI
PuppetConf 2014 Killer R10K Workflow With Notes
Apache Maven - eXo VN office presentation
Fundamental Design Patterns.pptx
Making your jQuery Plugins More Accessible
11 tools for your PHP devops stack
Puppet at Bazaarvoice
Ad

More from Dana Luther (10)

PDF
Convert Your Dev Environment to a Docker Stack - PHP Tek 2025.pdf
PDF
Enums In the Wild at PHP[tek] Conference 2025
PDF
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
PDF
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
PDF
Hands on Docker - Launch your own LEMP or LAMP stack
PDF
Converting Your Dev Environment to a Docker Stack - php[world]
PDF
Converting Your Dev Environment to a Docker Stack - Cascadia
PDF
Converting your DEV Environment to a Docker Stack - ZCOE18
PDF
Converting Your DEV Environment to a Docker Stack
PDF
Code Coverage for Total Security in Application Migrations
Convert Your Dev Environment to a Docker Stack - PHP Tek 2025.pdf
Enums In the Wild at PHP[tek] Conference 2025
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting your DEV Environment to a Docker Stack - ZCOE18
Converting Your DEV Environment to a Docker Stack
Code Coverage for Total Security in Application Migrations
Ad

Recently uploaded (20)

PPTX
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
PDF
Cloud-Scale Log Monitoring _ Datadog.pdf
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PDF
Sims 4 Historia para lo sims 4 para jugar
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PPTX
INTERNET------BASICS-------UPDATED PPT PRESENTATION
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
Digital Literacy And Online Safety on internet
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PDF
Introduction to the IoT system, how the IoT system works
PDF
SASE Traffic Flow - ZTNA Connector-1.pdf
PPTX
presentation_pfe-universite-molay-seltan.pptx
PPTX
522797556-Unit-2-Temperature-measurement-1-1.pptx
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PPTX
Slides PPTX World Game (s) Eco Economic Epochs.pptx
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
Cloud-Scale Log Monitoring _ Datadog.pdf
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Job_Card_System_Styled_lorem_ipsum_.pptx
Sims 4 Historia para lo sims 4 para jugar
Design_with_Watersergyerge45hrbgre4top (1).ppt
Unit-1 introduction to cyber security discuss about how to secure a system
INTERNET------BASICS-------UPDATED PPT PRESENTATION
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
Digital Literacy And Online Safety on internet
Tenda Login Guide: Access Your Router in 5 Easy Steps
PptxGenJS_Demo_Chart_20250317130215833.pptx
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Introduction to the IoT system, how the IoT system works
SASE Traffic Flow - ZTNA Connector-1.pdf
presentation_pfe-universite-molay-seltan.pptx
522797556-Unit-2-Temperature-measurement-1-1.pptx
introduction about ICD -10 & ICD-11 ppt.pptx
Slides PPTX World Game (s) Eco Economic Epochs.pptx
Slides PDF The World Game (s) Eco Economic Epochs.pdf

Integrated Feature Management - Using Feature Flags - MidwestPHP