Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Happier Deployments With Gradual Feature Rollout

Happier Deployments With Gradual Feature Rollout

How we roll features out gradually to our userbase - overview of the technology and the way this fits into our agile process.

Sam Phillips

July 09, 2012
Tweet

More Decks by Sam Phillips

Other Decks in Technology

Transcript

  1. • SaaS platform for event organisers and publishers • Central

    place for all marketing/analytics activities Tuesday, 10 July 12
  2. • Our aim was to road-test our features with a

    some users - internal accounts and a ‘beta group’ • Deployment of code and releasing to customers are often combined • We wanted to be able to deploy and release separately, and give control of the latter to product owners Tuesday, 10 July 12
  3. Stuff to talk about: • Approaches to deployment/releases • Rollout

    gem overview • Implementation of rollout within our app • Fitting gradual feature rollout into our dev process • Surprises Tuesday, 10 July 12
  4. Chrome • Pioneered behind-the-scenes updates • Deploy and release at

    the same time • Timeboxed releases, every 6 weeks - scope is the variable • Disable features with a single patch Very dumbed-down version! Source: https://docs.google.com/present/view?id=dg63dpc6_4d7vkk6ch Google famous for rolling out new features quietly to test them Tuesday, 10 July 12
  5. • 10+ deployments a day • Emphasis on the DevOps

    culture Source: http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr Tuesday, 10 July 12
  6. • Compile to single 1.5gig binary • Distribute using BitTorrent

    • Release to “a2” tier first Source: http://arstechnica.com/business/2012/04/exclusive-a-behind-the-scenes-look-at-facebook-release-engineering/ Tuesday, 10 July 12
  7. • Multi-channel ecommerce retailer, running 40+ sites on single platform,

    turnover £200m+ • Always work in trunk • Features controlled within the database • Ability to enable features on a per-site basis Tuesday, 10 July 12
  8. Split Testing / User Permissions • Not split or multi-variate

    testing: We’re not optimising something that already exists - we’re revolutionising it • Not a permissions system: The aim of gradual feature rollout is that it will eventually go to all users - different from permissions system Tuesday, 10 July 12
  9. Rollout - Overview • https://github.com/jamesgolick/rollout • Enable a feature for:

    • specific users • groups • a percentage of users • Stores information in a redis ‘feature’ namespace Tuesday, 10 July 12
  10. Rollout • Groups are defined within the activated models (eg

    by a predicate), not within rollout • We wanted to give control of which users had a given feature to our product owners Tuesday, 10 July 12
  11. • https://github.com/jrallison/rollout_ui • Sinatra app... just add config.ru • Gives

    visbility and control to the wider business Tuesday, 10 July 12
  12. Place within our process • Customer feedback at the each

    side of our value stream • Beta has its own, WIP-limited column • Opening up a feature to everyone is a discrete task Tuesday, 10 July 12
  13. Getting feedback • Our main method is user interviews -

    conducted on the phone, in person and via email • Use of analytics - e.g. flag which version of a form that a given model was created with and compare data quality Tuesday, 10 July 12
  14. Did it work? • Getting early feedback on the event

    form • Validating our assumptions • Correcting mistakes early on Wanted to make the form easier and also improve the quality of data to reduce errors when syndicating the data to our partner network Tuesday, 10 July 12
  15. Beta != done • Important to be clear to the

    wider business on which features are in which state • Column on our card wall gives visibility to the whole business Tuesday, 10 July 12
  16. Use in data migrations • We sometimes roll out data

    migrations (not schema changes) gradually as well, by checking if features are enabled • This makes it easy to roll forward and back, and avoids conditional logic in the migrator around who to migrate Tuesday, 10 July 12
  17. A sales tool? • The ‘Beta Group’ is used as

    both a sales and support tools - our closest customers are given early access to new features and can see progress in the product more quickly • Enabling and supporting product evangelists Tuesday, 10 July 12
  18. rm -rf aka Code is Temporary • When a feature

    graduates, we remove all code written to support dual-running • Minimal conditional logic and decorators makes this easy • Start by removing the routes • ... and removing code is always a pleasure! Tuesday, 10 July 12
  19. Improvements • We want to get better at the analytics

    side, and this is our focus for the next few months • Redis cloud hosting seemingly not as resilient as other databases (eg RDS) - rollout makes redis core to our application Tuesday, 10 July 12