feature bits at lssc10

Post on 31-Aug-2014

2.582 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Feature Bits:Enabling Flow

Within and Across Teams

Erik Sowa and Rob LohLSSC10 (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/7641http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickrhttp://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 ExactTargeto "Feature bits" used by Sean G. Ryan and team

• Flickro Previously cited talk mentions "feature flags" o http://en.oreilly.com/velocity2010/public/schedule/detail/14145

• Twittero "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

ImplementationContextRequirements ModelAPIDiscovery

Coding PatternsSimpleBy Design

Outline

Closing Points

Thursday, May 27, 2010

Implementation

Thursday, May 27, 2010

ContextThursday, 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

<features> <feature name="hq.remote_panel_load" /> <feature name="el.enable_asset_library" /> ...etc... </features>

public function isFeatureOn(featureName:String):Boolean {    var nodes:XMLList = xml.features.feature.        (@name==featureName);    return null != nodes && 0 < nodes.length();}

Flex: Embedded in the bootstrap

Flex: Simple X-Path implementation

${core-url}/accounts/featureBits?userUid=&orgUid=&

Core Service API

Thursday, May 27, 2010

Thursday, May 27, 2010

Coding Patterns

Thursday, May 27, 2010

{ sectionName: "Mobile Marketing", links: [ { app:"EmailLabs", type:"panel", panelClass:"smssubscribers", featurebit:"el.enable_sms_messages" }, //...

if( registry.config.isFeatureOn( featureName ) ) {

// new implementation ...

} else {

// the old way ...

Generalized / Meta-data

Basic Checks

public function onInitialize():void { featureAIsOn = registry.config.isFeatureOn( featureA );

Cached

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

top related