Feature Bits at LSSC10

2,672 views

Published on

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

Published in: Technology
2 Comments
3 Likes
Statistics
Notes
  • 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
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 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
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
2,672
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
26
Comments
2
Likes
3
Embeds 0
No embeds

No notes for slide

Feature Bits at LSSC10

  1. 1. Feature Bits: Enabling Flow Within and Across Teams Erik Sowa and Rob Loh LSSC10 (April 2010) Thursday, May 27, 2010
  2. 2. Outline of Talk • Business context • Continuous flow of code • Latent code: Introducing feature bits • Lyris' implementation (Rob Loh) • Lessons learned Thursday, May 27, 2010
  3. 3. Invitation... Thursday, May 27, 2010
  4. 4. Business Context Thursday, May 27, 2010
  5. 5. Enable Flow: Avoid Big Bangs Photo Credit: USDOE (http://commons.wikimedia.org/wiki/File:Castle_romeo2.jpg) Thursday, May 27, 2010
  6. 6. Deployment Pipeline Photo Credit: Ryan McFarland (http://commons.wikimedia.org/wiki/File:Alaska_Pipeline.jpg ) Thursday, May 27, 2010
  7. 7. 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
  8. 8. Feature Bits: Latent Code Photo Credit: Marcin Wichary (http://commons.wikimedia.org/wiki/File:IMSAI8080_TV11.jpg) Thursday, May 27, 2010
  9. 9. 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
  10. 10. 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
  11. 11. Our implementation • Rob Loh Thursday, May 27, 2010
  12. 12. Feature Bits Technical Details Thursday, May 27, 2010
  13. 13. Outline Implementation Context Requirements Model API Discovery Coding Patterns Simple By Design Closing Points Thursday, May 27, 2010
  14. 14. Implementation Thursday, May 27, 2010
  15. 15. Context Thursday, May 27, 2010
  16. 16. 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
  17. 17. Data Model Thursday, May 27, 2010
  18. 18. 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
  19. 19. Thursday, May 27, 2010
  20. 20. Coding Patterns Thursday, May 27, 2010
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. Lessons Learned Photo Credit: Underwood & Underwood (http://commons.wikimedia.org/wiki/File:Ecuadoran_Students.jpg) Thursday, May 27, 2010
  25. 25. Design Pressure is Good Photo Credit: Tokino (http://commons.wikimedia.org/wiki/File:Air_pressure_gauge.jpg) Thursday, May 27, 2010
  26. 26. Manage the Lifecycle Photo Credit: Pyrothansia (http://commons.wikimedia.org/wiki/File:Life_cycle.jpg) Thursday, May 27, 2010
  27. 27. 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
  28. 28. Default state: Decouple code rolls Photo Credit: Kazumasa Ogawa (http://commons.wikimedia.org/wiki/File:Japanese_Chain_coupler.jpg) Thursday, May 27, 2010
  29. 29. Naming Convention Matters Thursday, May 27, 2010
  30. 30. 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
  31. 31. Customer-facing releases Thursday, May 27, 2010
  32. 32. Limit the overhead Photo Credit: Henning Klevier (http://commons.wikimedia.org/wiki/File:Fibonacci_%28x%2B1%29%5En.png) Thursday, May 27, 2010
  33. 33. Beta- and Split-Testing Photo Credit: US Navy (http://commons.wikimedia.org/wiki/File:Navy_binoculars.jpg) Thursday, May 27, 2010
  34. 34. Q&A Thursday, May 27, 2010

×