Feature Toggles

29
Anand Agrawal

description

development

Transcript of Feature Toggles

Page 1: Feature Toggles

Anand Agrawal

Page 2: Feature Toggles

Feature branches & Continuous Integration

Page 3: Feature Toggles

Feature Braches

Trunk

Developer A

Developer B

Page 4: Feature Toggles

! Pros " Code for new feature could not make to

production " No fear to check-in in branch

! Cons " Merge hell "  Fear of refactoring " Difficult to share code across branches

Page 5: Feature Toggles

Continuous Integration

Page 6: Feature Toggles

! Pros "  Avoid big merges "  Each check-in is production ready " Continuously Integrate thorough out the

progress path of the feature ! Cons

"  Incomplete feature may go to production "  Fear to commit code

Page 7: Feature Toggles

Then how to do Continuous Integration?

Feature Toggles

Page 8: Feature Toggles

What are toggles?

Page 9: Feature Toggles

It’s a simple if statement

Page 10: Feature Toggles

Feature toggle is a if statement that hides certain execution path

Page 11: Feature Toggles

Types of Feature toggle ! Release toggles ! Business toggles

Page 12: Feature Toggles

Release Toggles !  To hide incomplete feature ! Short lived ! Removed as soon as feature is ready ! Have pre-decided values across

environments (except dev)

Page 13: Feature Toggles

Business Toggles !  To enable A / B testing ! Release feature to certain groups of

people to get early feedback ! Could be enabled or disabled on the fly

Page 14: Feature Toggles

Testing the Toggles ! Unit Test

"  Test for both conditions i.e. toggle on and off !  Integration Test

"  Test with toggle states that are going live "  Test with toggle on " With business toggles be smart about what

you want to test than try and test all combinations

Page 15: Feature Toggles

Tips and tricks to implement Feature Toggle

Page 16: Feature Toggles

In case of building new API end point that is not public facing

No feature toggle needed

Page 17: Feature Toggles

In case of creating new model or table

No feature toggle needed

Page 18: Feature Toggles

In case of adding a new column in database and exposing it through service

No feature toggle needed May feature toggle validations

or provide default value

Page 19: Feature Toggles

In case of new endpoint that is public facing

Just feature toggle the url

Page 20: Feature Toggles

In case of UI component embedded in existing page

Feature toggle the view element

Page 21: Feature Toggles

In case of logic change like change the way payment is processed

Feature toggle by abstraction

Page 22: Feature Toggles

Things to keep in mind ! Don’t try to toggle each and every line of

code. Use only where its needed. ! Keep the number of toggles under

control !  Try to create mutually exclusive toggles ! Clean up release toggles and dead code

Page 23: Feature Toggles

Exercise!!

Page 24: Feature Toggles

Ways to implement toggles ! Config file !  Toggle manager for Admin to manage ! Cookie store ! … or whatever that makes sense

Page 25: Feature Toggles

They are riding on the same boat

Page 26: Feature Toggles

Feature Toggle is second best solution. The best solution is to find a way to gradually integrate, without Feature Branches or Feature Toggles.

Martin Fowler

Page 27: Feature Toggles

No free lunch ! Good test suite (unit and acceptance) !  Fix or Revert the breaking change

immediately ! Break down features into smaller stories ! Break down stories into smaller tech

tasks !  Think of how to take your code to

production everyday than creating blockers

Page 28: Feature Toggles

References !  http://martinfowler.com/bliki/FeatureToggle.html !  http://www.infoq.com/presentations/Feature-Bits !  http://blog.pluralsight.com/favor-feature-toggles-

over-feature-branches !  http://paulhammant.com/blog/

branch_by_abstraction.html !  http://labs.spotify.com/2014/03/27/spotify-

engineering-culture-part-1/

Page 29: Feature Toggles

Questions ?