Slide 1

Slide 1 text

! Code, Test, Deploy How to Ship Software Like a Startup Ben Balter government.github.com [email protected]

Slide 2

Slide 2 text

! What’s GitHub?

Slide 3

Slide 3 text

! The world’s largest code-sharing platform " Founded 2008 ! VC Funded $100M # Hubbers 232 $ Users 7M % Projects 15M

Slide 4

Slide 4 text

! In your datacenter, or in the cloud & GitHub.com (SaaS) Public engagement
 github.com/ngageoint '
 GitHub Enterprise (VM) Internal collaboration
 enterprise.github.com

Slide 5

Slide 5 text

! The constraints of open source

Slide 6

Slide 6 text

! " Electronic High fidelity mediums expose process

Slide 7

Slide 7 text

! ( Transparent Communicate decisions in realtime, and forever

Slide 8

Slide 8 text

! ) Asynchronous Focus workflow on code, not meetings

Slide 9

Slide 9 text

! * Informal Adopt cultures, not polices

Slide 10

Slide 10 text

! + Code

Slide 11

Slide 11 text

! , Git * 2d96cfe - (HEAD, tag: v3.1.1, origin/master, origin/HEAD, master) :gem: bump (43 minutes ago) * f4b446b - remove stray backtick (44 minutes ago) * 83599e3 - Merge branch 'master' of https://github.com/benbalter/g-man (46 minutes ago) |\ | * 42514ea - Merge pull request #61 from devscott/laxco (50 minutes ago) | |\ | | * 072d9b5 - Adding in additional entry for La Crosse County, WI (54 minutes ago) | |/ * | 1e95d95 - remove unresolvable domains (46 minutes ago) * | 1a8645a - remove uwyo.edu/CES (86 minutes ago) |/ * 70410ba - Merge pull request #60 from jpmckinney/canada (2 hours ago) |\ | * a77ad43 - Use consistent comments for Canada hosts (2 hours ago) | * 1776e45 - Add more Canadian hosts (2 hours ago) * | 05211a0 - Merge pull request #58 from mitio/bulgarian-government-domains (3 hours ago) |\ \ | * | fe8f862 - Add Bulgaria's government main domain (3 hours ago) | |/ * | 85d0c7b - Merge pull request #59 from mitio/fix-readme-typos (3 hours ago) |\ \ | |/ |/| | * f558a90 - Add missing word in the readme (3 hours ago)

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

% Find your project

Slide 14

Slide 14 text

- Prioritize tasks

Slide 15

Slide 15 text

. Propose the change

Slide 16

Slide 16 text

/ Review

Slide 17

Slide 17 text

0 Discuss

Slide 18

Slide 18 text

1 Merge

Slide 19

Slide 19 text

2 Mentions

Slide 20

Slide 20 text

! 3 Friction Delay between “I want to contribute” and “I have contributed”

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

! 4 Scripts to rule them all $ script/test Bootstrapping $ boxen giants $ cd ~/github/giants $ script/bootstrap Running $ script/server Testing

Slide 23

Slide 23 text

! 5 Test

Slide 24

Slide 24 text

6 Meet Hubot

Slide 25

Slide 25 text

7 ChatOps

Slide 26

Slide 26 text

# Shared Command Line •View cameras in our datacenter • Search error logs • Manage and trigger alerts • Perform server maintenance • View load balancer status • Spin up cloud instances • Provision servers • Adjust firewall ports • Activate DDoS Mitigation • Restart processes • Configure DNS • Deploy to production

Slide 27

Slide 27 text

Two other ways Hubot helps Push Notifications Situational Awareness

Slide 28

Slide 28 text

8 Continuous Integration (CI)

Slide 29

Slide 29 text

9 Build Status

Slide 30

Slide 30 text

: On each push… •~1,500 test suits •~15,00 tests •~75,00 assertions • x 2 environments (.com, Enterprise) •Tests > 20 seconds are considered a failure •~ 90 seconds to complete

Slide 31

Slide 31 text

! /Deploy

Slide 32

Slide 32 text

! Nothing gets deployed unless tests are green

Slide 33

Slide 33 text

A typical deployment flow Development Staging Production

Slide 34

Slide 34 text

GitHub's ; flow Development Staging Production Development Development Staging Staging

Slide 35

Slide 35 text

, Branch Labs

Slide 36

Slide 36 text

< Queuing

Slide 37

Slide 37 text

⚡ Doing it live

Slide 38

Slide 38 text

Meanwhile, back at the pull request…

Slide 39

Slide 39 text

! Tools make the difference

Slide 40

Slide 40 text

> A typical day at GitHub • 230 employees 
 (2/3rd remote) • 185 chatrooms • ~30,000 lines of text 
 (13,000 from Hubot) • ~500 images • 500+ deploys • 1000+ pushes • 320 issues opened •185 pull requests opened 
 (of which 145 merged that day)

Slide 41

Slide 41 text

~130 production deploys per day

Slide 42

Slide 42 text

~41 deploys to GitHub.com per day

Slide 43

Slide 43 text

! Code, Test, Deploy How to Ship Software Like a Startup Ben Balter government.github.com [email protected]