SlideShare a Scribd company logo
1 of 34
Download to read offline
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

More Related Content

Similar to Feature Bits at LSSC10

Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyMark Proctor
 
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)Google Developer Relations Team
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator PresentationAaron Saunders
 
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...Codemotion
 
Facets of applied smw
Facets of applied smwFacets of applied smw
Facets of applied smwJesse Wang
 
Feature Bits at DevOpsDays 2010 US
Feature Bits at DevOpsDays 2010 USFeature Bits at DevOpsDays 2010 US
Feature Bits at DevOpsDays 2010 USErik Sowa
 
LTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationLTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationCharles Severance
 
Mobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve MobileMobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve MobileKonstantin Loginov
 
"How Mozilla Uses Selenium"
"How Mozilla Uses Selenium""How Mozilla Uses Selenium"
"How Mozilla Uses Selenium"Stephen Donner
 
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13Dominopoint - Italian Lotus User Group
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...MongoDB
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryAlek Davis
 
Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Lars Vogel
 
Testing iOS Apps
Testing iOS AppsTesting iOS Apps
Testing iOS AppsC4Media
 

Similar to Feature Bits at LSSC10 (20)

Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
Mini training - Moving to xUnit.net
Mini training - Moving to xUnit.netMini training - Moving to xUnit.net
Mini training - Moving to xUnit.net
 
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)
Google Developer DAy 2010 Japan: HTML5 についての最新情報 (マイク スミス)
 
2011 NASA Open Source Summit - Forge.mil
2011 NASA Open Source Summit - Forge.mil2011 NASA Open Source Summit - Forge.mil
2011 NASA Open Source Summit - Forge.mil
 
Modeveast Appcelerator Presentation
Modeveast Appcelerator PresentationModeveast Appcelerator Presentation
Modeveast Appcelerator Presentation
 
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...
AngularJS 2.0: A natural evolvement or a new beginning - Boyan Mihaylov - Cod...
 
Facets of applied smw
Facets of applied smwFacets of applied smw
Facets of applied smw
 
Feature Bits at DevOpsDays 2010 US
Feature Bits at DevOpsDays 2010 USFeature Bits at DevOpsDays 2010 US
Feature Bits at DevOpsDays 2010 US
 
Protractor survival guide
Protractor survival guideProtractor survival guide
Protractor survival guide
 
LTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS IntegrationLTI Advantage: The Next Big Thing in LMS Integration
LTI Advantage: The Next Big Thing in LMS Integration
 
Mobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve MobileMobile Developers Talks: Delve Mobile
Mobile Developers Talks: Delve Mobile
 
"How Mozilla Uses Selenium"
"How Mozilla Uses Selenium""How Mozilla Uses Selenium"
"How Mozilla Uses Selenium"
 
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13
The Latest and Greatest from OpenNTF and the IBM Social Business Toolkit, #dd13
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
2011 03-03-blti-umass
2011 03-03-blti-umass2011 03-03-blti-umass
2011 03-03-blti-umass
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010Eclipse 40 - Eclipse Summit Europe 2010
Eclipse 40 - Eclipse Summit Europe 2010
 
Testing iOS Apps
Testing iOS AppsTesting iOS Apps
Testing iOS Apps
 

Recently uploaded

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Recently uploaded (20)

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

Feature Bits at LSSC10

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