Incremental deployment of new features

Post on 15-Jan-2015

1.307 views 1 download

Tags:

description

 

Transcript of Incremental deployment of new features

Incremental deployment of new features

Sean Sullivan Portland Java User Group

January 17, 2012

• Gilt Groupe

• International Shipping project

• Incremental deployment

Gilt Groupe

online retailer

venture backed company

May 2011

What does Gilt sell?

Apparel

Home furnishings

Food

Local deals

Travel

Gilt HQ

Gilt Portland

International Shipping

November 2011

Project goals

• allow Gilt’s customers to ship merchandise worldwide

• display price information in customer’s preferred currency

• accept payment in customer’s preferred currency

Project goals

• legal compliance

• fraud prevention

• streamlined user experience

Technical scope

• Checkout UI

• Data model

• Order processing

• Payment processing

• Email

• Warehouse

• Finance

• Reporting

• Web analytics

• Third party integration

Checkout UI

• Ruby on Rails

• Domestic checkout only

• Java + JSP

• Domestic checkout

• International checkout

• Clear separation between UI logic and business logic

Checkout 1.0 Checkout 2.0

International Checkout

Project roadmap

1. Write code

2. Deploy to production

3. Profit!

Deploy to production?

We need a deployment strategy!

Deploy early, deploy often?

Velocity conferenceJune 2009

Dark launch?

Facebook EngineeringJuly 2009

Feature flags?

Flickr engineeringDecember 2009

Ramp up gradually?

Facebook EngineeringMay 2008

Dog food?

wikipedia.org

joelonsoftware.com

Gilt deployment strategy

1. dev team builds feature using “feature flags”

2. QA testing

3. deploy new feature to production

4. make feature available to a subset of Gilt

employees

5. make feature available to all Gilt employees

6. make feature available to a subset of

customers

7. gradually ramp up to all customers

100%

User partitions

Partition 1 Partition 2 Partition 3 Partition 1000 ...

Intelligent routing

Zeus

Checkout 1.0

Checkout 2.0

Detecting feature availability at runtime

Java API

import com.mycorp.FeatureService;

if (featureService.isFeatureEnabled(appRequest,

INTERNATIONAL_SHIPPING)) {

// do something

}

else {

// do something else

}

Custom JSP tag<%@ taglib uri="/WEB-INF/mycorp.tld" prefix="mycorp" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:choose>

<c:when test=”${mycorp.isFeatureEnabled(‘internationalShipping’, pageContext)}”>

International Shipping!

</c:when>

<c:otherwise>

<img src=”nyan-cat.jpg”/>

</c:otherwise>

</c:choose>

Questions?

THE END