Download - Waffle: A feature switch/flag/toggle application for Django

Transcript
Page 1: Waffle: A feature switch/flag/toggle application for Django

Waffle

Toby Championgithub.com/tobych

Feature switches for Django

Page 2: Waffle: A feature switch/flag/toggle application for Django
Page 3: Waffle: A feature switch/flag/toggle application for Django
Page 4: Waffle: A feature switch/flag/toggle application for Django

Feature branches are nasty

• Must deploy a branch to try things out• Unlikely to run full tests on a branch• Many branches: painful and confusing• Branching inhibits refactoring

Page 5: Waffle: A feature switch/flag/toggle application for Django

Feature Switches

Allow you to include all new features on your master branch, hiding them from users so you can deploy all your code to production.

Page 6: Waffle: A feature switch/flag/toggle application for Django

Now you can hide features!

• Features are developed in masteralongside others

• You have separate deploy and release steps• Your work need not impact users until ready• Leave branching just for spikes• Tests on master run on all features• Code is more often ready to deploy

Page 7: Waffle: A feature switch/flag/toggle application for Django

Let’s use feature switches!

Page 8: Waffle: A feature switch/flag/toggle application for Django

Let’s use feature switches!

Page 9: Waffle: A feature switch/flag/toggle application for Django
Page 10: Waffle: A feature switch/flag/toggle application for Django
Page 11: Waffle: A feature switch/flag/toggle application for Django
Page 12: Waffle: A feature switch/flag/toggle application for Django

Use your switches everywhere

• Templates• JavaScript• Views• Models• Jinja2 templates (via Jingo)• Mustache/Handlebars templates• Management commands• Celery tasks

Page 13: Waffle: A feature switch/flag/toggle application for Django

{% load waffle_tags %}

{% switch switch_name %} Switch is active!{% else %} Switch is inactive!{% endswitch %}

Django template

Page 14: Waffle: A feature switch/flag/toggle application for Django

Views

Page 15: Waffle: A feature switch/flag/toggle application for Django

Wrap an entire view

Page 16: Waffle: A feature switch/flag/toggle application for Django

JavaScript

Page 17: Waffle: A feature switch/flag/toggle application for Django

Examples

Page 18: Waffle: A feature switch/flag/toggle application for Django

Switchesshow_replace_buttonShow icon for incomplete feature

show_custom_fieldsShow custom fields on the edit dialog (delete this switch!)

no_fancy_tag_defaultsDisable broken JavaScript code until we fix it

debug_liveWrite extra live update debugging info to JavaScript console

use_reftag_kalman_filteringUse kalman filtering for reference tag barometer smoothing

Page 19: Waffle: A feature switch/flag/toggle application for Django

Flags

Page 20: Waffle: A feature switch/flag/toggle application for Django

Flags know about users and groups

Page 21: Waffle: A feature switch/flag/toggle application for Django

Examples

Page 22: Waffle: A feature switch/flag/toggle application for Django

Flagsshow_manage_rulesShow navigation item for new rule manager feature

use_selectionsUse new fancy check-box selection instead of drag’n’drop

no_xmppDon’t try to contact XMPP (BOSH) server at page load

no_mapsDon’t try to load map tiles at page load

Page 23: Waffle: A feature switch/flag/toggle application for Django

Query string

http://example.com/?dwft_my_flag=0 – Offhttp://example.com/?dwft_my_flag=1 – On

Persisted for the session using cookies.

Page 24: Waffle: A feature switch/flag/toggle application for Django

Also use Waffle for

• A/B testing (Waffle chooses randomly)• Canary releasing (roll out to % of users)

Page 25: Waffle: A feature switch/flag/toggle application for Django

Be careful!

• Even inactive code can break your product• Unit tests must cover both cases• Integration tests should cover combinations• Remove unused switches! • Harder to follow code wrapped in switches

Page 26: Waffle: A feature switch/flag/toggle application for Django

Pain

Page 27: Waffle: A feature switch/flag/toggle application for Django
Page 28: Waffle: A feature switch/flag/toggle application for Django
Page 29: Waffle: A feature switch/flag/toggle application for Django
Page 30: Waffle: A feature switch/flag/toggle application for Django
Page 31: Waffle: A feature switch/flag/toggle application for Django

Persistence

• memcached• Redis

Page 32: Waffle: A feature switch/flag/toggle application for Django

Waffle• http://coffeeonthekeyboard.com/introducing-waffle-for-django-541/• https://github.com/jsocol/django-waffle• http://waffle.readthedocs.org/

Feature Switches/Flags/Bits/Toggles• http://martinfowler.com/bliki/FeatureToggle.html• http://www.pgrs.net/2011/08/29/why-i-dont-like-feature-branches /• http://blog.disqus.com/post/789540337/partial-deployment-with-feature-switches• http://arialdomartini.wordpress.com/2011/11/02/help-me-because-i-think-martin-fowler-has-a-merge-paranoia/• http://www.youtube.com/watch?v=xzstASOvqNc• http://codeascraft.com/2011/02/04/how-does-etsy-manage-development-and-operations/• http://www.infoq.com/presentations/Feature-Bits

Page 33: Waffle: A feature switch/flag/toggle application for Django

Toby Champion

@tobychlinkedin.com/in/tobychampion

github.com/tobych/[email protected]

Page 34: Waffle: A feature switch/flag/toggle application for Django
Page 35: Waffle: A feature switch/flag/toggle application for Django

Seattle Python Day 2013

• Seattle Python Interest Group (SeaPIG)• Late September?• One day (Saturday)• Free or at least very cheap• Sprints on the Sunday?

Page 36: Waffle: A feature switch/flag/toggle application for Django