• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Feature  Bits at LSSC10
 

Feature Bits at LSSC10

on

  • 2,537 views

Slides from my Feature Bits presentation at the 2010 Lean Software and Systems conference in Atlanta. See http://atlanta2010.leanssc.org/home/erik-sowa/ and ...

Slides from my Feature Bits presentation at the 2010 Lean Software and Systems conference in Atlanta. See http://atlanta2010.leanssc.org/home/erik-sowa/ and http://www.leanssc.org/files/201004/videos/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams.html

Statistics

Views

Total Views
2,537
Views on SlideShare
2,531
Embed Views
6

Actions

Likes
2
Downloads
18
Comments
2

2 Embeds 6

http://www.linkedin.com 4
https://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Great presentation. Thanks for referencing our book. In the book, I call it 'feature hiding'. It's also similar to Facebook's 'dark launching': http://agiletesting.blogspot.com/2009/07/dark-launching-and-other-lessons-from.html
    Are you sure you want to
    Your message goes here
    Processing…
  • The video for this presentation is available on the conference website:

    http://www.leanssc.org/files/201004/videos/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams.html
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Feature  Bits at LSSC10 Feature Bits at LSSC10 Presentation Transcript

    • Feature Bits: Enabling Flow Within and Across Teams Erik Sowa and Rob Loh LSSC10 (April 2010) Thursday, May 27, 2010
    • Outline of Talk • Business context • Continuous flow of code • Latent code: Introducing feature bits • Lyris' implementation (Rob Loh) • Lessons learned Thursday, May 27, 2010
    • Invitation... Thursday, May 27, 2010
    • Business Context Thursday, May 27, 2010
    • Enable Flow: Avoid Big Bangs Photo Credit: USDOE (http://commons.wikimedia.org/wiki/File:Castle_romeo2.jpg) Thursday, May 27, 2010
    • Deployment Pipeline Photo Credit: Ryan McFarland (http://commons.wikimedia.org/wiki/File:Alaska_Pipeline.jpg ) Thursday, May 27, 2010
    • Continuous Delivery Documented examples: • Allspaw, John and Hammond, Paul, 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr http://en.oreilly.com/velocity2009/public/schedule/detail/7641 http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr http://velocityconference.blip.tv/file/2284377/ • Humble, Jez and Farley, David, Continuous Delivery (O'Reilly Rough Cuts) • What about features you can't build in a day? Thursday, May 27, 2010
    • Feature Bits: Latent Code Photo Credit: Marcin Wichary (http://commons.wikimedia.org/wiki/File:IMSAI8080_TV11.jpg) Thursday, May 27, 2010
    • Latent code variants • DigitalRiver and ExactTarget o "Feature bits" used by Sean G. Ryan and team • Flickr o Previously cited talk mentions "feature flags" o http://en.oreilly.com/velocity2010/public/schedule/detail/14145 • Twitter o "dynamically controlling features" and "infrastructure" o http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with- ryan-king • Google ??? o Gradual rollout of new features • Etc. Thursday, May 27, 2010
    • Usage at Lyris • Introduced August, 2008 • ~ 80 active bits by December, 2009 • 48 active bits in March, 2010 Photo Credit: superde1uxe (http://commons.wikimedia.org/wiki/File:IMSAI8080.jpg) Thursday, May 27, 2010
    • Our implementation • Rob Loh Thursday, May 27, 2010
    • Feature Bits Technical Details Thursday, May 27, 2010
    • Outline Implementation Context Requirements Model API Discovery Coding Patterns Simple By Design Closing Points Thursday, May 27, 2010
    • Implementation Thursday, May 27, 2010
    • Context Thursday, May 27, 2010
    • Requirements • 3 levels of granularity: Global, Org, User-Org Account • Absence of a feature or any bits means that feature is off • Consistent list across our shared environments • Simple checks from the Flex tier, and the services tier • Simple process to register new features • In general, keep it simple for adoption and because of our internal diversity. Thursday, May 27, 2010
    • Data Model Thursday, May 27, 2010
    • Flex: Embedded in the bootstrap <features> <feature name="hq.remote_panel_load" /> <feature name="el.enable_asset_library" /> ...etc... </features> Flex: Simple X-Path implementation public function isFeatureOn(featureName:String):Boolean {     var nodes:XMLList = xml.features.feature.         (@name==featureName);     return null != nodes && 0 < nodes.length(); } Core Service API ${core-url}/accounts/featureBits?userUid=&orgUid=& Thursday, May 27, 2010
    • Thursday, May 27, 2010
    • Coding Patterns Thursday, May 27, 2010
    • Generalized / Meta-data { sectionName: "Mobile Marketing", links: [ { app:"EmailLabs", type:"panel", panelClass:"smssubscribers", featurebit:"el.enable_sms_messages" }, //... Basic Checks if( registry.config.isFeatureOn( featureName ) ) { // new implementation ... } else { // the old way ... Cached public function onInitialize():void { featureAIsOn = registry.config.isFeatureOn ( featureA ); Thursday, May 27, 2010
    • Use with Strategy pattern: if( registry.config.isFeatureOn("ct.analyzer.v2") ) { service.analyzer = new Analyzer2(); } else {     service.analyzer = new Analyzer(); } Use with Factory pattern: public function createMainDisplay():DisplayObject { if( registry.config.isFeatureOn( "service.panel.v2" ) ) { return new panel2(); // which extends panel } else { return new panel(); // which extends DisplayObject } } Use with Chain of Responsibility pattern: if( registry.config.isFeatureOn("hq.trickle_reporting") ) {     userActionLogger = userActionLogger.setNext(          new TrickleReportNotifier( .. )     ); } Thursday, May 27, 2010
    • Closing Points • Assess the need for feature-bit protections early. • Employ a naming system so as to prevent collision between teams. Avoid re-using names. • Ensure QA understands the intended state of bits for the code in production. • Some teams have used feature-bits to demonstrate bug fixes during Sprint Reviews. Be careful with this pattern. • Multiple code paths will need support/maintenance for as long as a "feature" is in the system. • Create stories/work items for retiring feature bit protection for any work requiring them, at the time that work is happening. • Ensure old code is retired as well as protections removed. Thursday, May 27, 2010
    • Lessons Learned Photo Credit: Underwood & Underwood (http://commons.wikimedia.org/wiki/File:Ecuadoran_Students.jpg) Thursday, May 27, 2010
    • Design Pressure is Good Photo Credit: Tokino (http://commons.wikimedia.org/wiki/File:Air_pressure_gauge.jpg) Thursday, May 27, 2010
    • Manage the Lifecycle Photo Credit: Pyrothansia (http://commons.wikimedia.org/wiki/File:Life_cycle.jpg) Thursday, May 27, 2010
    • Maintain Production Quality Code hidden behind feature bits is subject to the same quality requirements as any code Photo Credit: Rjgdoy (http://commons.wikimedia.org/wiki/File:Quality_not_quantity.png) Thursday, May 27, 2010
    • Default state: Decouple code rolls Photo Credit: Kazumasa Ogawa (http://commons.wikimedia.org/wiki/File:Japanese_Chain_coupler.jpg) Thursday, May 27, 2010
    • Naming Convention Matters Thursday, May 27, 2010
    • Do Not Overload Photo Credit: Jonathan Mallard (http://commons.wikimedia.org/wiki/File:Unsafe_transport_of_a_shipping_container_in_Afghanistan.jpg) Thursday, May 27, 2010
    • Customer-facing releases Thursday, May 27, 2010
    • Limit the overhead Photo Credit: Henning Klevier (http://commons.wikimedia.org/wiki/File:Fibonacci_%28x%2B1%29%5En.png) Thursday, May 27, 2010
    • Beta- and Split-Testing Photo Credit: US Navy (http://commons.wikimedia.org/wiki/File:Navy_binoculars.jpg) Thursday, May 27, 2010
    • Q&A Thursday, May 27, 2010