Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Feature Flag: Roll Out & Roll Back without Deployment

Tech Talk @ Vingle. Devops in Startup Session 3.

1. Problems before Feature Flag
2. Benefits
3. Weak Points
4. Libraries

Video: https://youtu.be/zGLRRLNYIHQ?list=PLSCpJ7HW2h8YS65XHVVVHsmav3T-g7kho

  • Login to see the comments

Feature Flag: Roll Out & Roll Back without Deployment

  1. 1. Feature Flag Roll Out & Roll Back without Deployment
  2. 2. Feature Flag? New Feature On/Off
  3. 3. Index 1. Problems before Feature Flag 2. Benefits 3. Weak Points 4. Libraries
  4. 4. Problems before Feature Flag Deployment == Roll Out
  5. 5. Deployment before Feature Flag
  6. 6. Problem 0. No Test in Production
  7. 7. Test ENV != Prod ENV
  8. 8. Problem 1. Unclear Delivery Time
  9. 9. From Click To Roll Out: Maybe.. 30 minutes
  10. 10. Problem 2. No Way to Dog Fooding
  11. 11. QA => All Users
  12. 12. RollBack before Feature Flag
  13. 13. Problem 3. Slow Delivery
  14. 14. From Click To Roll Out: Maybe.. 30 minutes
  15. 15. Solution. New Feature On/Off to Some Users
  16. 16. One Click UI
  17. 17. Code Level if FeatureFlag.active?('fetureFoo', user) c = a/b else c = b == 0 ? 0 : a/b end
  18. 18. Feature Flag Service • Create if new flag is detected. • List flags. • Update a flag. • Delete too old flags.
  19. 19. Infrastructure
  20. 20. After Feature Flag
  21. 21. Deployment after Feature Flag
  22. 22. Benefit 0. Test in Production
  23. 23. Benefit 1. Clear & Fast Delivery Time
  24. 24. One Click & Real Time Roll Out
  25. 25. Benefit 2. Easy Dog Fooding
  26. 26. QA => Internal User => All
  27. 27. Rollback After Feature Flag
  28. 28. Benefit 3. Fast Roll Back
  29. 29. One Click & Real Time Roll Back
  30. 30. Unexpected Benefit 4. Simple A/B Test
  31. 31. Weak Points • Uncooperative Members • Too Big Changes to Use Feature Flag • Obsoleted Feature Flags are Debts • Dependency on Each Feature Flags
  32. 32. No feature flag can be better • Brand New API • Clear & Tiny Changes • Fixing a bug that makes something worthless
  33. 33. Weak Point 0. Uncooperative Members
  34. 34. Solution 0. Code Review! No Flag No Merge
  35. 35. Weak Point 1. Too Big Changes to use Feature Flag
  36. 36. Solution 1. Apply to End Point
  37. 37. 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
  38. 38. 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
  39. 39. 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 %>
  40. 40. Weak Point 2. Obsoleted Feature Flags are Debts
  41. 41. Solution 2. Clean Up in The Sprint
  42. 42. Weak Point 3. Dependency on Each Feature Flag Feature Flag in Feature Flag in Feature Flag in …
  43. 43. Libraries • rollout for Ruby • Gutter for Python • Togglez for java
  44. 44. 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/
  45. 45. Q & A

×