Feature  Bits at LSSC10
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Feature Bits at LSSC10

  • 2,700 views
Uploaded 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......

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • 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
  • 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
No Downloads

Views

Total Views
2,700
On Slideshare
2,694
From Embeds
6
Number of Embeds
2

Actions

Shares
Downloads
21
Comments
2
Likes
2

Embeds 6

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Feature Bits: Enabling Flow Within and Across Teams Erik Sowa and Rob Loh LSSC10 (April 2010) Thursday, May 27, 2010
  • 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. Invitation... Thursday, May 27, 2010
  • 4. Business Context Thursday, May 27, 2010
  • 5. Enable Flow: Avoid Big Bangs Photo Credit: USDOE (http://commons.wikimedia.org/wiki/File:Castle_romeo2.jpg) Thursday, May 27, 2010
  • 6. Deployment Pipeline Photo Credit: Ryan McFarland (http://commons.wikimedia.org/wiki/File:Alaska_Pipeline.jpg ) Thursday, May 27, 2010
  • 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. Feature Bits: Latent Code Photo Credit: Marcin Wichary (http://commons.wikimedia.org/wiki/File:IMSAI8080_TV11.jpg) Thursday, May 27, 2010
  • 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. 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. Our implementation • Rob Loh Thursday, May 27, 2010
  • 12. Feature Bits Technical Details Thursday, May 27, 2010
  • 13. Outline Implementation Context Requirements Model API Discovery Coding Patterns Simple By Design Closing Points Thursday, May 27, 2010
  • 14. Implementation Thursday, May 27, 2010
  • 15. Context Thursday, May 27, 2010
  • 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. Data Model Thursday, May 27, 2010
  • 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. Thursday, May 27, 2010
  • 20. Coding Patterns Thursday, May 27, 2010
  • 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. 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. 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. Lessons Learned Photo Credit: Underwood & Underwood (http://commons.wikimedia.org/wiki/File:Ecuadoran_Students.jpg) Thursday, May 27, 2010
  • 25. Design Pressure is Good Photo Credit: Tokino (http://commons.wikimedia.org/wiki/File:Air_pressure_gauge.jpg) Thursday, May 27, 2010
  • 26. Manage the Lifecycle Photo Credit: Pyrothansia (http://commons.wikimedia.org/wiki/File:Life_cycle.jpg) Thursday, May 27, 2010
  • 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. Default state: Decouple code rolls Photo Credit: Kazumasa Ogawa (http://commons.wikimedia.org/wiki/File:Japanese_Chain_coupler.jpg) Thursday, May 27, 2010
  • 29. Naming Convention Matters Thursday, May 27, 2010
  • 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. Customer-facing releases Thursday, May 27, 2010
  • 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. Beta- and Split-Testing Photo Credit: US Navy (http://commons.wikimedia.org/wiki/File:Navy_binoculars.jpg) Thursday, May 27, 2010
  • 34. Q&A Thursday, May 27, 2010