automation and developer infrastructure — empowering engineers to move from idea to production

266

Click here to load reader

Upload: indeedeng

Post on 12-Apr-2017

1.036 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Automation and Developer Infrastructure

Empowering Engineers to Move from Idea to Production

Page 2: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Alex ThurlowEngineering Manager

Page 3: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

I helppeoplegetjobs.

Page 4: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Indeed is the #1 external source of hire

Unique Visitors (millions)Million unique visitors

2009 2011 2012 2013 2014 20150

20

4060

80

100120140

160180

2010

180M

180 million unique users80.2Munique US visitors per month

16Mjobs

60+countries

28languages

64% of US job searchers search on indeed each month

Page 5: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 6: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 7: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Alex Thurlow

Page 8: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 9: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 10: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Plus many more!

Page 11: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What should we build?

Page 12: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What’s best for the jobseeker?

Page 13: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

How do we know?

Page 14: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Data-Driven Product Designgo.indeed.com/ddpd

Page 15: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Learn Measure

Build

Lean Startup Cycle

Page 16: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deliver

Learn Measure

Page 17: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Data driven product design requires quick feedback

Page 18: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering Velocitygo.indeed.com/evtt

Page 19: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering Velocitygo.indeed.com/evtt

Developer Productivit

y

Software Architectur

e

ReleaseProcess

Page 20: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering Velocitygo.indeed.com/evtt

Developer Productivit

y

Software Architectur

e

ReleaseProcess

Page 21: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Service-Oriented Architecture

Page 22: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Make small, independent applications

Page 23: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deliver

Learn Measure

Quickly!

Page 24: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deliver

Learn Measure

Page 25: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering Velocitygo.indeed.com/evtt

Developer Productivit

y

Software Architectur

e

ReleaseProcess

Page 26: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Jon HanksSoftware Engineer

Page 27: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

I helppeoplegetjobs.

Page 28: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

HoboAutomated developer provisioning

Page 29: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

First goal for a new developerPush code to production in week 1

Page 30: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deliver

Learn Measure

Page 31: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

1:1 Mentorship

Page 32: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Setup = 2-3 Days

Page 33: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

1-2 days left to get to production

Page 34: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Team Rotation

Page 35: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Helps new developer understand Indeed

Page 36: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Rotate every 4 weeks through 3 teams

Page 37: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Rotate every 4 weeks through 3 teams and face the same setup challenges in each team.

Frustration!!!

Page 38: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Experienced devs face a similar problem working on multiple projects

or switching projects

Page 39: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Service-Oriented Architecture

Page 40: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Database

Search Webapp

Page 41: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Service Resume service Location Service

Search Webapp

Job Search Index Resume Database GeoIP Database

Page 42: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 43: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Need to run several interconnected applications

Page 44: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Total Developers Producing Code By Month

2014 Apr Jul Oct 2015 Apr Jul Oct 2016

Page 45: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

1:1 mentorship didn’t scale

Page 46: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Use technology to speed developer provisioning

Page 47: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 48: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Vagrant automates creating virtualized development environments

Page 49: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Service Resume service

Location Service

Search Webapp

Job Search Index

Resume Database

GeoIP Database

Vagrantfile

Virtual Machine

Page 50: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Success!(kind of)

Page 51: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Reproducible environments

Our Solution—The Good

Page 52: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Good

Sharable between devs

Page 53: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Good

<1 day setup time

Page 54: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 55: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 56: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Download full machine image

Page 57: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Download and install required software

Page 58: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Start every application

Page 59: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 60: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Service Resume service

Location Service

Search Webapp

Job Search Index

Resume Database

GeoIP Database

Vagrantfile

Virtual Machine

Page 61: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Service

Resume service

Location Service

Employer Webapp

Job Search Index

Resume Database

GeoIP Database

Virtual Machine

Job Service

Resume service

Location Service

Search Webapp

Job Search Index

Resume Database

GeoIP Database

Virtual Machine

Page 62: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 63: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Shared RAM

Page 64: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Remaining

MemoryVirtual Machine

Page 65: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 66: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 67: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

We’re all getting Macbooks!Hooray?

Page 68: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our Solution—The Bad

5 Only Linux support

4 Limited support for different application types

1 Slow to create environments. 15 minutes or more!

2 Hard initial setup especially for large application stacks

3 Virtual machine memory overhead

Page 69: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo (hō-bō)synonyms: vagrant

Page 70: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 71: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 72: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 73: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 74: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 75: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 76: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 77: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What is Docker?

Page 78: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

HypervisorHost OS

GuestOS

Bins & Libs

GuestOS

Bins & LibsVM VM

Server with Virtual Machines

Bins & LibsHost OS

Server with Docker Containers

Dock

er E

ngin

e

Cont

aine

r 1

Cont

aine

r 2

Cont

aine

r 3

Page 79: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Docker terminology

ImageAn OS filesystem

Page 80: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Docker terminology

ContainerA running instance of an image

Page 81: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Docker terminology

RegistryA server for storing images

Page 82: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 83: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 84: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 85: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Our solution

Create and publish a base image for each application type

Page 86: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Java

CentOS

Page 87: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Java

CentOShobo-java

Publish

Page 88: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Docker allows “Inheriting” Images

Page 89: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Java

CentOS

Tomcat

Page 90: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

hobo-java

Tomcat hobo-tomcat

Publish

Page 91: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Ready to use Hobo Images

T O M C A T

Page 92: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 93: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Job Service Resume service Location Service

Search Webapp

Job Search Index Resume Database GeoIP Database

Virtual Machine

Page 94: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Docker is designed to have one process per container

Page 95: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Search Webapp

Job Service Resume service Location Service

Job Search Index Resume Database GeoIP Database

Page 96: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Search Webapp

Job Service Resume service Location Service

Job Search Index Resume Database GeoIP Database

Employer Webapp

Page 97: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Networking is easy with One machine

Page 98: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Many machines = we need service discovery

Page 99: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Service DiscoveryEnabling services to find other

services automatically

Page 100: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What is Consul?

A key/value store geared towards service discoveryConsul has both an HTTP interface and a DNS interface

Page 101: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

PUT /v1/catalog/register{"Node": "user-service", "Address": "10.0.0.3"}

$ dig +short user-service.node.consul10.0.0.3

Page 102: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Now all config files can reference other containers by name!

Page 103: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

How do we start a stack of multiple dependent applications?

Page 104: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

[HOBO-SETTINGS]depends = user-service search-service location-service

[job-service]type = application

[job-service-mysql]type = resource

[job-service-mongo]type = resource

Hobo Config File

Page 105: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

[HOBO-SETTINGS]depends = user-service search-service location-service

[job-service]type = application

[job-service-mysql]type = resource

[job-service-mongo]type = resource

Hobo Config File

Page 106: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

[HOBO-SETTINGS]depends = user-service search-service location-service

[job-service]type = application

[job-service-mysql]type = resource

[job-service-mongo]type = resource

Hobo Config File

Page 107: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo Config Fileuser-service

[HOBO-SETTINGS]depends =

[user-service]type = application

[user-service-mysql]type = resource

Page 108: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 109: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 110: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

src

test

README

build.xml

Page 111: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

hobo

src

test

README

build.xml

Page 112: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

hobo

job-service

job-service-mysql

job-service-mongo

hobo_config

Page 113: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

job-service

config

Dockerfile

hobo

run.sh

Page 114: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Dockerfile

FROM dockerreg.indeed.net/hobo/hobo-tomcat

Page 115: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

job-service

hobo

configtomcat.xmlmysql-conn.propertiesjob-service.properties

Page 116: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

job-service

hobo

config

myconfig

job-service.properties

tomcat.xmlmysql-conn.propertiesjob-service.properties

Page 117: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

job-service

config

Dockerfile

hobo

run.sh

Page 118: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

run.shStart/Stop commands

Page 119: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Environment variablesrun.sh

Page 120: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Volume mountsrun.sh

Page 121: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What are volume mounts?They mount parts of the host filesystem

into the container

Page 122: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What are volume mounts?They mount parts of the host filesystem

into the container

Page 123: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What do we mount?

Page 124: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What do we mount?Built code

Page 125: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What do we mount?Configuration files

Page 126: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What do we mount?Log directories

Page 127: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What do we mount?Data directories

Page 128: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Hobo goals

1

2

3

4

5

6

Support all types of applications

Easy to share

Simple for developers to use for development and debugging

Support complex application stacks simply

OS X support

Quick startup

Page 129: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

git clone repositoryant hobo-deploy

Using Hobo

Page 130: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Results

Page 131: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

2014 Apr Jul Oct 2015 Apr Jul Oct 2016 Apr

Active Usage Increase Over Time

Page 132: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Projects Configured For Hobo330

Page 133: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

“Sometimes I need to run apps from other teams and the first thing I look

for is ‘Is this hobo’d?’. If so I’m happy!”- Indeed Developer

Page 134: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

15 minutes 30 seconds

Page 135: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

10 times per week means120 hours per year for each developer

Page 136: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Page 137: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Volume mounts are useful

Page 138: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Make it easy to use for the default case but fully customizable

Page 139: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Docker is moving quickly

Page 140: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering Velocitygo.indeed.com/evtt

Developer Productivity

Software Architecture

ReleaseProcess

Page 141: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Control TowerAutomating Release Management

Page 142: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Yes

Does the feature meet all release

criteria?

Yes

Page 143: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Complex and manual

Page 144: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

1

2

3

4

Goals of Our Release Process

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 145: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 146: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 147: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 148: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 149: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

4 Record release details for tracking, analysis, and repeatability

3 Quickly address bugs in releases

2 Understand cross-product and cross-team dependencies

1 Understand which features are being released

Page 150: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Yes

Does the feature meet all release

criteria?

Yes

Page 151: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

The life of a feature

Page 152: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Test Deploy& Record

Develop Feature

Define Release

Page 153: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

We use standard development and project management tools

Page 154: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 155: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 156: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 157: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

&

Page 158: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Git: with great power comes great complexity

Page 159: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Git flow

Page 160: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

Page 161: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

jira/IND-123

Page 162: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

jira/IND-123

Page 163: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review Feedback

Creates Pull Request

Local development

Develop Feature

=

Page 164: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Feature code can also be in libraries

Page 165: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

common-webapp common-database jobservice-api

Search Webapp

Page 166: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review Feedback

Creates Pull Request

Local development

Develop Feature

=

Page 167: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Release Managers Execute Releases

Page 168: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

4 Record release details for tracking, analysis, and repeatability

3 Quickly address bugs in releases

2 Understand cross-product and cross-team dependencies

1 Understand which features are being released

Page 169: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Yes

Does the feature meet all release

criteria?

Yes

Page 170: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 171: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

release

Page 172: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

common-webapp common-database jobservice-api

Search Webapp

Page 173: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

common-webapp 1.2.6

common-database

3.1.5jobservice-api

1.0.1

Search Webapp

Page 174: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Build Run Tests Deploy to QA

Page 175: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 176: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What’s in the box?

Page 177: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Look at a dashboard in Jira with everything that’s supposed to be in the release.

Page 178: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Look at Git log to see commits for features

Page 179: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Look at Git log for each new library version

Page 180: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Look at code reviews for each feature to make sure they’re complete

Page 181: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 182: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Use Jira for Release Tracking

Page 183: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Bug Bug Feature

Fix Version

Page 184: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Bug Bug Feature

Fix Version DeployTicket

Page 185: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Bug Bug Feature

Fix Version

Other App Feature

DeployTicket

Page 186: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Bug Bug Feature

Fix Version

Other App Feature

DeployTicket

Depends upon

Page 187: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Bug Bug Feature

Fix Version

Other App Feature

DeployTicket

Depends upon

Depends upon

Page 188: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Test

Page 189: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 190: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 191: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deploy!

Page 192: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 193: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 194: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

release

jira/IND-123

Page 195: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

deploy/2016-06-22

jira/IND-123

Page 196: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

jira/IND-123

master

deploy/2016-06-22

Page 197: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

deploy/2016-06-22

Page 198: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

JIRA updatesClose released issues

Page 199: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

JIRA updatesClose deploy ticket

Page 200: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

JIRA updatesMark Fix Version as “Released”

Page 201: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 202: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

4 Record release details for tracking, analysis, and repeatability

3 Quickly address bugs in releases

2 Understand cross-product and cross-team dependencies

1 Understand which features are being released

Page 203: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 204: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 205: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 206: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 207: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Clicks and Git Commands>100

Release with 4 features

Page 208: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Extra Actions Per Feature~13

Page 209: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

2014 Apr Jul Oct 2015 Apr Jul Oct 2016

Total Developers Producing Code By Month

Page 210: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

2014 Apr Jul Oct 2015 Apr Jul Oct 2016

Unique projects deployed per month

Page 211: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

We needed to automate

Page 212: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Why automate rather than simplify?

Data History Transparency

Page 213: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

We needed to automate

Page 214: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Control Tower

Page 215: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 216: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 217: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 218: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 219: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 220: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 221: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 222: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 223: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 224: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

What feature code is in libraries?

Page 225: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

common-webapp 1.2.6

common-database

3.1.5jobservice-api

1.0.1

Indeed Webapp

Page 226: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 227: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 228: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 229: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 230: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 231: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 232: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 233: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 234: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

release

jira/IND-123

Page 235: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

release

jira/IND-123

IND-123 commits In release IND-123 commit Not in release

Page 236: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 237: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

master

release

jira/IND-123

Page 238: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Goals of Our Release Process

1

2

3

4

Understand which features are being releasedUnderstand cross-product and cross-team dependenciesQuickly address bugs in releasesRecord release details for tracking, analysis, and repeatability

Page 239: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 240: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 241: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 242: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 243: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Develop Features

Push Git Branch

Create CodeReview

Mark Issue as Resolved

Take Code Review

Feedback

Creates Pull Request

Local developmen

t

Define Release

Check code review statuses

for issues

Check Git branch merge status

Check with

developer

Check dependent issues of each

feature

Check Issue Statuses

Add to list of features for

release

Determine which library upgrades are available or

needed

Merge desired features to

release

Upgrade library dependencies

Push to origin

Create release branch

Update issue statuses

Create fix version

Create deploy ticket

Add fix version to issues in release

Link other dependent issues to deploy ticket

Test Release

Run unit tests in Jenkins

Send bugs back to

developer

Test release in QA

environment

Build Release in

Jenkins

Deploy to production

Developer fixes bugs

Merge feature

branch to release branch

Jenkins deploys in

QA environment

Are there bugs?

Yes

Does the feature meet all release

criteria?

Yes

Record Release

Delete release branch

Merge release to integration

branch

Tag Release

Close Issues

Delete feature

branches

Merge release to production

branch

Close Deploy ticket

Release fix version

Page 244: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Test DeployDevelop Feature

Define Release

Page 245: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Results

Page 246: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 247: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Clicks and Git Commands>100

Release with 4 features

Page 248: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Control Tower Clicks<15Release with 4 features

Page 249: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Extra Actions Per Feature~13

Page 250: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Extra Actions Per Feature0

Page 251: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Jul Oct 2015 Apr Jul Oct 2016 Apr

Deploys per month

Page 252: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Deploys Per Project1.9X

Page 253: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 254: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production
Page 255: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Problems

1 Release management took a lot of time

2 It was hard to understand what exactly was in a release

3 Lots of manual steps = possibility for error

4 Only senior engineers knew enough to handle releases

Page 256: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

More knowledge = Less risk

Page 257: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

of developers are release managers57%

Page 258: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

To start doing releases~3 months

Page 259: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Page 260: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Everything can be automated

Page 261: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Engineers don’t like mystery

Page 262: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Lessons Learned and Takeaways

Automate the process you have, not the process you want

Page 263: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Where do we go from here?

Page 264: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Too much human interaction

Page 265: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Train machines to handle releases

Page 266: Automation and Developer Infrastructure — Empowering Engineers to Move from Idea to Production

Engineering blog & talks - indeed.tech

Open Source - opensource.indeedeng.io

Careers - indeed.jobs

Twitter - @IndeedEng

Learn More