Slide 1

Slide 1 text

How Intercom ships code to production 100 times a day Eugene Kenny Senior Engineer,
 Intercom

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

¯\_(ツ)_/¯

Slide 4

Slide 4 text

2013 2017 Engineers 10 100+ Applications 1 70 Languages 1 7

Slide 5

Slide 5 text

Deploys per day 0 12.5 25 37.5 50 2013 2014 2015 2016 2017

Slide 6

Slide 6 text

Deploys per day 0 17.5 35 52.5 70 2012 2013 2014 2015 2016 2017 Intercom Embercom

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

In the beginning • Intercom originally deployed to Heroku • Built Muster in 2012 • Based on experience with similar tools at previous companies @eugeneius

Slide 9

Slide 9 text

Getting up to speed • I joined Intercom in 2013, with no experience in continuous deployment • Came from a smaller company that deployed code manually • How hard could it be? @eugeneius

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Every change is automatically deployed to production @eugeneius

Slide 12

Slide 12 text

The latest change is automatically deployed to production @eugeneius

Slide 13

Slide 13 text

The latest change that passed CI is automatically deployed to production @eugeneius

Slide 14

Slide 14 text

The latest change that passed CI is automatically deployed to production unless the pipeline is locked or rolled back @eugeneius

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

(we haven’t implemented any of this) @eugeneius

Slide 17

Slide 17 text

Build Deploy @eugeneius

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

In the beginning • Check out the code • Run: – bundle install – rake assets:precompile • @eugeneius

Slide 20

Slide 20 text

Additional languages • New Java service needed to be deployed • Taught Muster about different project types, configuration files… • Added complexity, but unblocked the team @eugeneius

Slide 21

Slide 21 text

Ruby upgrade problem • Upgrade different apps at different times • Use different version from Muster itself • Containers… Heroku? @eugeneius

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Deploying frontend apps • Muster assumed the release would be deployed and run on EC2 instances • Doesn’t fit with frontend apps (Ember.js) • Implemented an S3 deployment target • Muster is now more complex (again!) @eugeneius

Slide 25

Slide 25 text

Muster used to deploy itself • Seemed awesome - dogfooding! • It was (sometimes) not awesome • Weird failure modes @eugeneius

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Why not buy it? • Started in 2012, not many options • Broad responsibilities: build, deployment, infrastructure management… • Have tried to replace individual components, with mixed results @eugeneius

Slide 28

Slide 28 text

Story Time @eugeneius

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Thank You! @ShipItCon #ShipItCon2017