Slide 1

Slide 1 text

RELEASE FASTER David Cramer twitter.com/zeeg Sunday, September 15, 13

Slide 2

Slide 2 text

Sunday, September 15, 13

Slide 3

Slide 3 text

I work on "Developer Productivity" Sunday, September 15, 13

Slide 4

Slide 4 text

(No one knows what that means) Sunday, September 15, 13

Slide 5

Slide 5 text

I also build Sentry Sunday, September 15, 13

Slide 6

Slide 6 text

"How do we release faster?" Sunday, September 15, 13

Slide 7

Slide 7 text

Continuous Deployment (n) Shipping new code as soon as it's ready Sunday, September 15, 13

Slide 8

Slide 8 text

# Update the site every 5 minutes */5 * * * * cd /www/example.com \ && git pull \ && service apache restart Sunday, September 15, 13

Slide 9

Slide 9 text

Continuous Deployment (n) Shipping new code as soon as it's ready Sunday, September 15, 13

Slide 10

Slide 10 text

Review Integration Deploy Failed Build Reporting Rollback Commit Sunday, September 15, 13

Slide 11

Slide 11 text

Better Testing Simplify Development Automate Releases Feature Gates Code Review Sunday, September 15, 13

Slide 12

Slide 12 text

A Dropbox tale.. Sunday, September 15, 13

Slide 13

Slide 13 text

"Go through these [extremely manual] instructions to setup a development VM" Sunday, September 15, 13

Slide 14

Slide 14 text

Sunday, September 15, 13

Slide 15

Slide 15 text

"Why don't we just use Vagrant?" Sunday, September 15, 13

Slide 16

Slide 16 text

Optimize the Bootstrap Sunday, September 15, 13

Slide 17

Slide 17 text

Bootstrap affects newly hired developers Sunday, September 15, 13

Slide 18

Slide 18 text

Bootstrap affects rebuilding environments Sunday, September 15, 13

Slide 19

Slide 19 text

Bootstrap affects time to run tests Sunday, September 15, 13

Slide 20

Slide 20 text

Bootstrap affects our sanity Sunday, September 15, 13

Slide 21

Slide 21 text

vagrant up ⇢ provision.sh Sunday, September 15, 13

Slide 22

Slide 22 text

Remove Dependencies Sunday, September 15, 13

Slide 23

Slide 23 text

You cannot reproduce your production environment Sunday, September 15, 13

Slide 24

Slide 24 text

Stop Trying Sunday, September 15, 13

Slide 25

Slide 25 text

Do you really need Apache? RTQDCDN[PQV Sunday, September 15, 13

Slide 26

Slide 26 text

Do you really need HAProxy? UGTKQWUN[! Sunday, September 15, 13

Slide 27

Slide 27 text

Do you really need RabbitMQ? JQYCDQWV4GFKU! Sunday, September 15, 13

Slide 28

Slide 28 text

Do you really need Zookeeper? PQRG Sunday, September 15, 13

Slide 29

Slide 29 text

Do you really need Hadoop? NQN Sunday, September 15, 13

Slide 30

Slide 30 text

Do you really need Anything? Sunday, September 15, 13

Slide 31

Slide 31 text

Utilize your build servers for complicated dependencies Sunday, September 15, 13

Slide 32

Slide 32 text

Find Your Bottlenecks [QWRTQDCDN[FQP VPGGFC8/KH[QWJCXGGPIKPGGTU Sunday, September 15, 13

Slide 33

Slide 33 text

Better Testing Simplify Development Automate Releases Feature Gates Code Review Sunday, September 15, 13

Slide 34

Slide 34 text

Culture vs Tooling Sunday, September 15, 13

Slide 35

Slide 35 text

Make Testing Easier Ensure you want to write tests Sunday, September 15, 13

Slide 36

Slide 36 text

"Oh look, a test I can copy/paste" Sunday, September 15, 13

Slide 37

Slide 37 text

Encourage building better testing tools and paradigms Sunday, September 15, 13

Slide 38

Slide 38 text

pip install pytest Sunday, September 15, 13

Slide 39

Slide 39 text

pip install flake8 Sunday, September 15, 13

Slide 40

Slide 40 text

pip install mock Sunday, September 15, 13

Slide 41

Slide 41 text

Your goal is to make testing accessible Sunday, September 15, 13

Slide 42

Slide 42 text

Automatically test individual commits to ensure every change is stable Sunday, September 15, 13

Slide 43

Slide 43 text

Sunday, September 15, 13

Slide 44

Slide 44 text

Test Continuously Before code review (lint) Sunday, September 15, 13

Slide 45

Slide 45 text

Test Continuously During code review Sunday, September 15, 13

Slide 46

Slide 46 text

Test Continuously Post-code review (merge) Sunday, September 15, 13

Slide 47

Slide 47 text

Optimize test execution time to deliver feedback ASAP Sunday, September 15, 13

Slide 48

Slide 48 text

Sunday, September 15, 13

Slide 49

Slide 49 text

Keep a tight Feedback Loop PQQPGYCPVUVQHKPFQWVVJGPGZVFC[VJCVVJGKTEQFGYCUDTQMGP Sunday, September 15, 13

Slide 50

Slide 50 text

Prevent mistakes by blocking commits which fail the build cycle Sunday, September 15, 13

Slide 51

Slide 51 text

Failed builds won't deploy Sunday, September 15, 13

Slide 52

Slide 52 text

Failed builds won't merge Sunday, September 15, 13

Slide 53

Slide 53 text

Better Testing Simplify Development Automate Releases Feature Gates Code Review Sunday, September 15, 13

Slide 54

Slide 54 text

Mandatory Code Review Sunday, September 15, 13

Slide 55

Slide 55 text

Sunday, September 15, 13

Slide 56

Slide 56 text

Use Code Review to sanity check code Sunday, September 15, 13

Slide 57

Slide 57 text

Use Code Review to influence testing culture Sunday, September 15, 13

Slide 58

Slide 58 text

Use Code Review to educate developers Sunday, September 15, 13

Slide 59

Slide 59 text

Use Code Review to decrease cycle time Sunday, September 15, 13

Slide 60

Slide 60 text

"Does this change look sane?" Sunday, September 15, 13

Slide 61

Slide 61 text

"No, this will break X, Y, and Z" FKF[QWGXGPMPQY:YCUCVJKPI! Sunday, September 15, 13

Slide 62

Slide 62 text

Aim for Quality Patches Sunday, September 15, 13

Slide 63

Slide 63 text

Changes happen outside of master causing master to be the new stable CMCVKRQTVTWPM Sunday, September 15, 13

Slide 64

Slide 64 text

Better Testing Simplify Development Automate Releases Feature Gates Code Review Sunday, September 15, 13

Slide 65

Slide 65 text

Choose your Audience Sunday, September 15, 13

Slide 66

Slide 66 text

Releasing a feature internally can be as effective as externally Sunday, September 15, 13

Slide 67

Slide 67 text

Use feature gates to limit the audience your change affects Sunday, September 15, 13

Slide 68

Slide 68 text

Gargoyle at Disqus Sunday, September 15, 13

Slide 69

Slide 69 text

from gargoyle import gargoyle def my_view(request): if gargoyle.is_active('awesome', request): return 'my new awesome feature' else: return 'boring old version' Sunday, September 15, 13

Slide 70

Slide 70 text

Better Testing Simplify Development Automate Releases Feature Gates Code Review Sunday, September 15, 13

Slide 71

Slide 71 text

Look at Heroku Sunday, September 15, 13

Slide 72

Slide 72 text

$ heroku create sushi Creating sushi... done http://sushi.herokuapp.com/ | git@heroku.com:sushi.git $ git push heroku master ----> Heroku receiving push ----> Rails app detected ----> Compiled slug size is 8.0MB http://sushi.herokuapp.com deployed to Heroku Sunday, September 15, 13

Slide 73

Slide 73 text

Continuous deployment is not deploying every commit Sunday, September 15, 13

Slide 74

Slide 74 text

Focus on the ability to release every commit, not actually doing it Sunday, September 15, 13

Slide 75

Slide 75 text

Review Integration Deploy Failed Build Reporting Rollback Commit Sunday, September 15, 13

Slide 76

Slide 76 text

Stage Release TGNGCUGECPOGCPYJCVGXGTKVPGGFUVQYKVJKP[QWTQTICPK\CVKQP Sunday, September 15, 13

Slide 77

Slide 77 text

Closing Thoughts Sunday, September 15, 13

Slide 78

Slide 78 text

Quality over Quantity PQUGTKQWUN[ Sunday, September 15, 13

Slide 79

Slide 79 text

Scale culture through tooling Sunday, September 15, 13

Slide 80

Slide 80 text

Your problems are not unique Sunday, September 15, 13

Slide 81

Slide 81 text

Thank You! (p.s. Tokyo is amazing) twitter.com/zeeg Sunday, September 15, 13