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