SlideShare a Scribd company logo
Progressive Feature Rollout
PHP User Group Milano
2017.06.21
Fabio Mora
mail@fabiomora.com
http://fabiomora.com
1 / Discovery: idea and validation
Progressive Feature Rollout
Awesome new feature!!1!
Different roles, different needs
Product Owner
● Give users features
● Validate ideas
● Short feedback loop
● Design right prototypes
Software Engineer
● Build cheap prototypes
● Put dev time in the
right features
● Keep tech debt low
User
● Have the site available
● Use a coherent service
● See interesting features
Heads to...
Trade-off? Or even make the cheapest thing...
https://martinfowler.com/bliki/DesignStaminaHypothesis.html
“If the functionality for your initial release is below the design payoff line, then it may be worth trading off design quality for speed; but...”
A cheap prototype!
A look to the metrics using Google Analytics
● Google Analytics out of the box
○ Sessions, Page Views, Users, Bounce Rate, Session Duration…
■ Reports: Audience, Overview. Then “Select a metric” section
○ Custom Events
■ Reports: Behaviour, Events, Overview. Then browse by “Event Action”
● Click-Through Rate (CTR) definition might help us
○ Ratio of the whole user traffic who click on a specific Call To Action (CTA)
○ CTR = Clicks / Page Views * 100
Category: register
Action: credential-start
Category: register
Action: facebook-landing
Category: impression
Action: master OR feature-fb
Using Google Analytics events
Progressive Feature Rollout
A quick prototype with feature branches
master
feature-a
Branch
git checkout master
git checkout -b feature-a
Merge in master
git rebase master
git checkout master
git merge feature-a https://martinfowler.com/bliki/FeatureBranch.html
A/B Testing
master
master
+
variation
all traffic
%
%
split
logic
A really really simple way to A/B test
A {0, 1} random toggle and a X-Feature HTTP Header
A really really simple way to A/B test
A Template Engine condition and GA events
A really really simple way to A/B test
50% vs 50% ...test it!
Going further with A/B Testing
Unit of
Division
Example Pro Cons
Event Page View
Simplicity
Randomness
UX Inconsistent
Fingerprint
PHPSESSID,
Cookies
UX consistent by
channel
Low randomness
Condition User Login UX Consistent
Low randomness
Not always applicable
A/B Testing: key points
● Unit Of Division
○ Is the only thing we’re allowed to design
○ Indipendent, homogeneus, representative (of the whole traffic)
● Evaluation Metric
○ Depends on the feature (e.g. CTR)
○ Other: time on page, loading time, first byte (avg, median, quantiles)
○ Focus on a few metrics!
A/B Testing: key points
● Significant Improvement
○ Tangible improvement from business point of view
● Sample Size
○ Repeatability: statistical phenomenon, variability, robustness, multiple runs
○ Significance: regarding a probability model
Refer to Math
● A/B Testing
○ Bernoulli Distribution fits {0, 1} events
○ Parameters: confidence, power, sample size, tangible improvement
○ Here Statistical Confidence (interval) is close to Statistical Repeatability
○ http://www.evanmiller.org/ab-testing/sample-size.html
● A/B/C/D… Testing
○ Way more complex
○ https://en.wikipedia.org/wiki/Bonferroni_correction
A bit of help...
Aside note: randomness and PHP
● rand()
● mt_rand()
rand()
rand()
mt_rand()
mt_rand()
3 / Delivery: make, test, deploy, rollout
Let’s implement it!
And BOOM the awesome-awesome new feature!!1!
Feature Toggling
Switch
● Traditional turned on/off
● Helps you to keep a
feature in master
● Can be used as override
Percentage
● Useful for A/B tests
● Minimize load risks
Condition
● Very specific
● The “logged in” test
● Split users by clusters
Demo Time!
https://github.com/morafabio/ws-feature-rollout
A word about backend metrics
● Time series based databases
● Carbon (StatsD), Graphite, Grafana
● composer require liuggio/statsd-php-client
Dashboard: visualize distribution (stacked)
legendValue(alias(scale(stacked(stats.web.registration.social.count),60),"Social"),"last")
legendValue(alias(scale(stacked(stats.web.registration.master.count),60),"Master"),"last")
Dashboard: visualize distribution (%)
legendValue(alias(stacked( asPercent(stats.web.registration.social.count,sumSeries(
stats.web.registration.social.count, stats.web.registration.master.count))), "Master"), "last")
legendValue(alias(stacked(asPercent(sumSeries( stats.web.registration.master.count),sumSeries(
stats.web.registration.social.count, stats.web.registration.master.count))),"Social"),"last")
Dashboard: track application responses
alias(hitcount(stats.web.registration.response-200,"5minutes"),"Ok")
alias(hitcount(stats.web.registration.response-400,"5minutes"),"Bad Request")
alias(hitcount(stats.web.registration.response-500,"5minutes"),"Internal Server Error")
...
4 / Wrap up all the things!
Key Learnings
● Track all the things!
● Trust statistics, don’t DYI
● Pay attention to team interactions
● Use a circuit breaker
● Define a fallback strategy
● Allocate cleanup time in advice
● Build packages, split things
● Handle errors properly
● Consider vendors (Mixpanel, Optimizely...)
Thanks!
Criticism, questions, doubts?
Credits
● Riccardo Tortul for the math/stat background
● Pictures
a. Photos are my own, except
b. http://it.disney.wikia.com/

More Related Content

PDF
Building a Business Case in Five Steps
PPT
Performance Testing Overview
PPTX
User Analytics Testing - SeleniumCamp 2015
PPTX
A/B Testing Best Practices - Do's and Don'ts
PDF
What Your Customers Really Do Online: 5 Ways to Remove the Guesswork
PDF
Ez performance measurement
PDF
UX Analytics Cemal Büyükgökçesu
PDF
Unifying feature management with experiments - Server Side Webinar (1).pdf
 
Building a Business Case in Five Steps
Performance Testing Overview
User Analytics Testing - SeleniumCamp 2015
A/B Testing Best Practices - Do's and Don'ts
What Your Customers Really Do Online: 5 Ways to Remove the Guesswork
Ez performance measurement
UX Analytics Cemal Büyükgökçesu
Unifying feature management with experiments - Server Side Webinar (1).pdf
 

Similar to Progressive Feature Rollout (20)

PPT
072SWE415StNotes13.ppt
PDF
Conversion Rate Optimization Master Class - Marcus Cooke, Space Between
PDF
[Webinar] Getting started with server-side testing - presented by WiderFunnel...
PDF
Getting Started with Server-Side Testing
PPTX
A b-testing-101
PPTX
WINSEM2021-22_ITE2004_ETH_VL2021220500452_Reference_Material_I_26-04-2022_tes...
PPTX
Leandro Melendez - Switching Performance Left & Right
PPTX
Why Adopt Analytic Driven Testing?
PPTX
Strategies in continuous delivery
PDF
Automated Analytics Testing with Open Source Tools
PPTX
prod-dev-management.pptx
PDF
Advancing Testing Program Maturity in your organization
PDF
Transitioning to-lean-at-infochimps
PDF
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
PPT
BAQMaR - Conference DM
PPTX
Test Design for Fully Automated Build Architectures
PDF
Nondeterministic Software for the Rest of Us
PPTX
SCRIMPS-STD: Test Automation Design Principles - and asking the right questions!
PPTX
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
PDF
Lean analytics
072SWE415StNotes13.ppt
Conversion Rate Optimization Master Class - Marcus Cooke, Space Between
[Webinar] Getting started with server-side testing - presented by WiderFunnel...
Getting Started with Server-Side Testing
A b-testing-101
WINSEM2021-22_ITE2004_ETH_VL2021220500452_Reference_Material_I_26-04-2022_tes...
Leandro Melendez - Switching Performance Left & Right
Why Adopt Analytic Driven Testing?
Strategies in continuous delivery
Automated Analytics Testing with Open Source Tools
prod-dev-management.pptx
Advancing Testing Program Maturity in your organization
Transitioning to-lean-at-infochimps
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
BAQMaR - Conference DM
Test Design for Fully Automated Build Architectures
Nondeterministic Software for the Rest of Us
SCRIMPS-STD: Test Automation Design Principles - and asking the right questions!
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
Lean analytics
Ad

More from Fabio Mora (20)

PDF
Esperimenti Kanban: tra economia e teoria delle code.
PDF
La Unix Way vista da un DevOps
PDF
We don't talk about Agile anymore
PDF
A quick introduction: Extreme Programming
PDF
Quick Introduction: Extreme Programming
PDF
It was just Open Source - TEDx Novara
PDF
2009 - Quotidiana Legalità
PDF
The Crossword Game
PDF
Continuous Delivery di una WebApp - by example
PDF
L’elefante nella stanza! [con LiquidO™] - Codemotion 2014
PDF
L’elefante nella stanza! [con LiquidO™]
PDF
Tanti "piccoli rilasci" con Symfony2
PDF
Shazam to Spotify - spike/demo web project
PDF
LinuxDay 2009 - Quali programmi?
PDF
LinuxDay 2009 - Cos'è Linux?
PDF
Se “Embrace Change” è difficile.
PDF
If "Embrace Change" is Hard (@milano-xpug)
PDF
Perchè Agile? Cambiamenti culturali work in progress.
PDF
cambiare punto di vista
PDF
CoderDojo - Galliate, 20 aprile 2013
Esperimenti Kanban: tra economia e teoria delle code.
La Unix Way vista da un DevOps
We don't talk about Agile anymore
A quick introduction: Extreme Programming
Quick Introduction: Extreme Programming
It was just Open Source - TEDx Novara
2009 - Quotidiana Legalità
The Crossword Game
Continuous Delivery di una WebApp - by example
L’elefante nella stanza! [con LiquidO™] - Codemotion 2014
L’elefante nella stanza! [con LiquidO™]
Tanti "piccoli rilasci" con Symfony2
Shazam to Spotify - spike/demo web project
LinuxDay 2009 - Quali programmi?
LinuxDay 2009 - Cos'è Linux?
Se “Embrace Change” è difficile.
If "Embrace Change" is Hard (@milano-xpug)
Perchè Agile? Cambiamenti culturali work in progress.
cambiare punto di vista
CoderDojo - Galliate, 20 aprile 2013
Ad

Recently uploaded (20)

PDF
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
PDF
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
PPT
Mechanical Engineering MATERIALS Selection
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PPTX
bas. eng. economics group 4 presentation 1.pptx
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PPTX
CH1 Production IntroductoryConcepts.pptx
PPTX
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
PDF
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
PPTX
Construction Project Organization Group 2.pptx
PPTX
Geodesy 1.pptx...............................................
PPTX
UNIT 4 Total Quality Management .pptx
PDF
Automation-in-Manufacturing-Chapter-Introduction.pdf
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PPTX
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
PDF
Operating System & Kernel Study Guide-1 - converted.pdf
PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
Model Code of Practice - Construction Work - 21102022 .pdf
Mechanical Engineering MATERIALS Selection
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
bas. eng. economics group 4 presentation 1.pptx
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
CH1 Production IntroductoryConcepts.pptx
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
Construction Project Organization Group 2.pptx
Geodesy 1.pptx...............................................
UNIT 4 Total Quality Management .pptx
Automation-in-Manufacturing-Chapter-Introduction.pdf
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
Operating System & Kernel Study Guide-1 - converted.pdf
CYBER-CRIMES AND SECURITY A guide to understanding
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx

Progressive Feature Rollout

  • 1. Progressive Feature Rollout PHP User Group Milano 2017.06.21 Fabio Mora mail@fabiomora.com http://fabiomora.com
  • 2. 1 / Discovery: idea and validation
  • 5. Different roles, different needs Product Owner ● Give users features ● Validate ideas ● Short feedback loop ● Design right prototypes Software Engineer ● Build cheap prototypes ● Put dev time in the right features ● Keep tech debt low User ● Have the site available ● Use a coherent service ● See interesting features
  • 7. Trade-off? Or even make the cheapest thing... https://martinfowler.com/bliki/DesignStaminaHypothesis.html “If the functionality for your initial release is below the design payoff line, then it may be worth trading off design quality for speed; but...”
  • 9. A look to the metrics using Google Analytics ● Google Analytics out of the box ○ Sessions, Page Views, Users, Bounce Rate, Session Duration… ■ Reports: Audience, Overview. Then “Select a metric” section ○ Custom Events ■ Reports: Behaviour, Events, Overview. Then browse by “Event Action” ● Click-Through Rate (CTR) definition might help us ○ Ratio of the whole user traffic who click on a specific Call To Action (CTA) ○ CTR = Clicks / Page Views * 100
  • 10. Category: register Action: credential-start Category: register Action: facebook-landing Category: impression Action: master OR feature-fb
  • 13. A quick prototype with feature branches master feature-a Branch git checkout master git checkout -b feature-a Merge in master git rebase master git checkout master git merge feature-a https://martinfowler.com/bliki/FeatureBranch.html
  • 15. A really really simple way to A/B test A {0, 1} random toggle and a X-Feature HTTP Header
  • 16. A really really simple way to A/B test A Template Engine condition and GA events
  • 17. A really really simple way to A/B test 50% vs 50% ...test it!
  • 18. Going further with A/B Testing Unit of Division Example Pro Cons Event Page View Simplicity Randomness UX Inconsistent Fingerprint PHPSESSID, Cookies UX consistent by channel Low randomness Condition User Login UX Consistent Low randomness Not always applicable
  • 19. A/B Testing: key points ● Unit Of Division ○ Is the only thing we’re allowed to design ○ Indipendent, homogeneus, representative (of the whole traffic) ● Evaluation Metric ○ Depends on the feature (e.g. CTR) ○ Other: time on page, loading time, first byte (avg, median, quantiles) ○ Focus on a few metrics!
  • 20. A/B Testing: key points ● Significant Improvement ○ Tangible improvement from business point of view ● Sample Size ○ Repeatability: statistical phenomenon, variability, robustness, multiple runs ○ Significance: regarding a probability model
  • 21. Refer to Math ● A/B Testing ○ Bernoulli Distribution fits {0, 1} events ○ Parameters: confidence, power, sample size, tangible improvement ○ Here Statistical Confidence (interval) is close to Statistical Repeatability ○ http://www.evanmiller.org/ab-testing/sample-size.html ● A/B/C/D… Testing ○ Way more complex ○ https://en.wikipedia.org/wiki/Bonferroni_correction
  • 22. A bit of help...
  • 23. Aside note: randomness and PHP ● rand() ● mt_rand()
  • 28. 3 / Delivery: make, test, deploy, rollout
  • 30. And BOOM the awesome-awesome new feature!!1!
  • 31. Feature Toggling Switch ● Traditional turned on/off ● Helps you to keep a feature in master ● Can be used as override Percentage ● Useful for A/B tests ● Minimize load risks Condition ● Very specific ● The “logged in” test ● Split users by clusters
  • 33. A word about backend metrics ● Time series based databases ● Carbon (StatsD), Graphite, Grafana ● composer require liuggio/statsd-php-client
  • 34. Dashboard: visualize distribution (stacked) legendValue(alias(scale(stacked(stats.web.registration.social.count),60),"Social"),"last") legendValue(alias(scale(stacked(stats.web.registration.master.count),60),"Master"),"last")
  • 35. Dashboard: visualize distribution (%) legendValue(alias(stacked( asPercent(stats.web.registration.social.count,sumSeries( stats.web.registration.social.count, stats.web.registration.master.count))), "Master"), "last") legendValue(alias(stacked(asPercent(sumSeries( stats.web.registration.master.count),sumSeries( stats.web.registration.social.count, stats.web.registration.master.count))),"Social"),"last")
  • 36. Dashboard: track application responses alias(hitcount(stats.web.registration.response-200,"5minutes"),"Ok") alias(hitcount(stats.web.registration.response-400,"5minutes"),"Bad Request") alias(hitcount(stats.web.registration.response-500,"5minutes"),"Internal Server Error") ...
  • 37. 4 / Wrap up all the things!
  • 38. Key Learnings ● Track all the things! ● Trust statistics, don’t DYI ● Pay attention to team interactions ● Use a circuit breaker ● Define a fallback strategy ● Allocate cleanup time in advice ● Build packages, split things ● Handle errors properly ● Consider vendors (Mixpanel, Optimizely...)
  • 40. Credits ● Riccardo Tortul for the math/stat background ● Pictures a. Photos are my own, except b. http://it.disney.wikia.com/