YOUNES
Younes Jaaidi
@yjaaidi
wishtack.io @yjaaidi
A/B Testing,
Canary Release
& White-Labeling
with Interchangeable Components
by Younes
wishtack.io @yjaaidi
THIS TALK IS A FICTIONAL DRAMATIZATION
BASED ON
A TRUE STORY AND REAL EVENTS
NETCLIX
Eibie
the Product Owner
wishtack.io @yjaaidi
wishtack.io @yjaaidi
Eibie’s First Reaction
wishtack.io @yjaaidi
On Second Thoughts…
wishtack.io @yjaaidi
wishtack.io @yjaaidi
Fear of Change
wishtack.io @yjaaidi
• Afraid of disappointing users
wishtack.io @yjaaidi
Embrace Change! I want anyone to be able to
• release features one by one
wishtack.io @yjaaidi
What about Canary Release? We need Eibie testing
on users
wishtack.io @yjaaidi
Eibie testing
Canary Release
on users
wishtack.io @yjaaidi
8% Conversion
%
80
Variant A
20
%
15% Conversion
Variant B
wishtack.io @yjaaidi
What is Canary Release?
wishtack.io @yjaaidi
What is Canary Release?
or Canary Deployment
or Progressive Deployment
or Phased Rollout
or Incremental Rollout
wishtack.io @yjaaidi
I feel upside down
since last release…
wishtack.io @yjaaidi
1% => 10%
%
Try me!
99
Default
1%
1. Employees
3. {{ your_strategy_here }}
Monitoring
4. …
New feature
wishtack.io @yjaaidi
1% => 10%
%
Try me!
99
Default
1%
1. Employees
3. {{ your_strategy_here }}
Monitoring
4. …
New feature
ROLLBACK!
wishtack.io @yjaaidi
What is a Kill Switch?
wishtack.io @yjaaidi
Fallback
wishtack.io @yjaaidi
Fallback
wishtack.io @yjaaidi
wishtack.io @yjaaidi
Oh! And we need a special
version for AngularConnect
wishtack.io @yjaaidi
White-Labeling
Brand A Brand B
wishtack.io @yjaaidi
Interchangeable
Components
wishtack.io @yjaaidi
Interchangeable Components
wishtack.io @yjaaidi
wishtack.io @yjaaidi
<search-container>
<search-form> or <search-chips> …
wishtack.io @yjaaidi
<search-container>
Inputs Outputs
<search-form> or <search-chips> …
wishtack.io @yjaaidi
😿
No native declarative way to control inputs and outputs with ngComponentOutlet
https://github.com/angular/angular/issues/15360
😸
But there’s ng-dynamic-component
https://github.com/gund/ng-dynamic-component
wishtack.io @yjaaidi
Inputs and Outputs are the signature
of Interchangeable Components
wishtack.io @yjaaidi
wishtack.io
🤗
Users @yjaaidi
but then…
wishtack.io @yjaaidi
…the bundle was too big
Active components
Unused components
wishtack.io @yjaaidi
Reactive Component Loader
to the rescue!
wishtack.io @yjaaidi
wishtack.io @yjaaidi
✨
wishtack.io @yjaaidi
If your First Name
starts with
A to M N to Z
wishtack.io @yjaaidi
Follow some link
Add to Cart
@yjaaidi
wishtack.io bit.ly/conf-finder bit.ly/find-conf @yjaaidi
wishtack.io bit.ly/conf-finder bit.ly/find-conf @yjaaidi
wishtack.io bit.ly/conf-finder bit.ly/find-conf @yjaaidi
wishtack.io bit.ly/conf-finder bit.ly/find-conf @yjaaidi
Demo Time
wishtack.io @yjaaidi
If your First Name
starts with
A to M N to Z
wishtack.io @yjaaidi
1. Resolve
2. Apply
wishtack.io @yjaaidi
Key Takeaways
wishtack.io @yjaaidi
What’s next
• You might need a Feature Toggle Management solution
wishtack.io @yjaaidi
Resources
Demo Source Code
https://github.com/wishtack/wishtack-conference-finder
Feature Toggles
https://martinfowler.com/articles/feature-toggles.html
Canary Release
https://martinfowler.com/bliki/CanaryRelease.html
wishtack.io @yjaaidi
Some Tools
Flagr
https://github.com/checkr/flagr
Google Optimize
https://optimize.google.com
Launch Darkly
https://launchdarkly.com/
wishtack.io @yjaaidi
“… CAN WE GO NOW?”
YOUNES’ STOMACH
wishtack.io
wishtack.io @yjaaidi
FREE CONT
ENT!!!
! &
wishtack.io @yjaaidi
wishtack.io @yjaaidi
TR A I N I N G CONSULTIN
G
XP COACH ?
ING E L P !
H
wishtack.io @yjaaidi
Keep in Touch!
@yjaaidi
medium.com/wishtack
wishtack.io
@wishtack