Slide 1

Slide 1 text

! How GitHub works like an open source project (and you can too!) Ben Balter government.github.com [email protected]

Slide 2

Slide 2 text

! What I’m here to talk about

Slide 3

Slide 3 text

! How you work is as important as what you work on

Slide 4

Slide 4 text

! What I’m not here to talk about

Slide 5

Slide 5 text

“a particular matter involving specific parties” Why GitHub is awesome

Slide 6

Slide 6 text

These adorable kittens

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

! Built on open source

Slide 9

Slide 9 text

! Contributes to open source

Slide 10

Slide 10 text

! Supports open source

Slide 11

Slide 11 text

! The constraints of open source

Slide 12

Slide 12 text

! " Electronic High fidelity mediums expose process

Slide 13

Slide 13 text

! & Transparent Communicate decisions in realtime, and forever

Slide 14

Slide 14 text

! ' Asynchronous Focus workflow on code, not meetings

Slide 15

Slide 15 text

! ( Informal Adopt cultures, not polices

Slide 16

Slide 16 text

! What does your organization optimize for?

Slide 17

Slide 17 text

! Butt-in-seat is a terrible metric

Slide 18

Slide 18 text

! Optimize for Happiness developer ^

Slide 19

Slide 19 text

! Software is an inherently creative endeavor

Slide 20

Slide 20 text

! You can’t mandate creativity

Slide 21

Slide 21 text

! Google had 20% time

Slide 22

Slide 22 text

! GitHub has 100% time

Slide 23

Slide 23 text

! What’s important to GitHub What’s important to You

Slide 24

Slide 24 text

! Open allocation (and organic team formation)

Slide 25

Slide 25 text

! The result: a side project culture

Slide 26

Slide 26 text

! Internal users are people too

Slide 27

Slide 27 text

! Half-measures are as bad as nothing at all

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

! Counterpoint: Business minimalism

Slide 30

Slide 30 text

! Metawork is a great waste of time

Slide 31

Slide 31 text

! A culture allergic to administrative distraction

Slide 32

Slide 32 text

! Prefer social constraints over technical constraints

Slide 33

Slide 33 text

! Prefer social constraints over administrative constraints

Slide 34

Slide 34 text

! Non-blocking is better than blocking

Slide 35

Slide 35 text

! Eliminate work

Slide 36

Slide 36 text

! Eliminate all humans

Slide 37

Slide 37 text

! Encourage flow

Slide 38

Slide 38 text

! How GitHub communicates

Slide 39

Slide 39 text

Required reading zachholman.com/posts/github-communication

Slide 40

Slide 40 text

! “Meetings pull you from actual work in order to talk about doing work”

Slide 41

Slide 41 text

! email? lolwat

Slide 42

Slide 42 text

! GitHub | Chat | Team | Halp

Slide 43

Slide 43 text

! How GitHub uses GitHub to build GitHub (TM)

Slide 44

Slide 44 text

GitHub uses GitHub for Code Legal HR Blog posts Documentation Policies Sales Ops

Slide 45

Slide 45 text

Create a descriptively named feature branch

Slide 46

Slide 46 text

Add commits

Slide 47

Slide 47 text

Open a pull request

Slide 48

Slide 48 text

Discuss and Review

Slide 49

Slide 49 text

Merge and Deploy

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

! Chat

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

! Why chat?

Slide 56

Slide 56 text

! Chat is inherently asynchronous

Slide 57

Slide 57 text

! Tapping someone on the shoulder is inherently being a jerk

Slide 58

Slide 58 text

! Scheduling a meeting is inherently a violation of the Geneva convention

Slide 59

Slide 59 text

! Chat has transcripts

Slide 60

Slide 60 text

! Chat exposes process

Slide 61

Slide 61 text

+ Meet Hubot

Slide 62

Slide 62 text

, ChatOps

Slide 63

Slide 63 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 64

Slide 64 text

Some other ways Hubot helps Push Notifications Situational Awareness

Slide 65

Slide 65 text

Twitter Subscriptions Ops “github down” The Government Room “open source government” The Danger Room “animal hijinks gif”

Slide 66

Slide 66 text

! - Continuous Integration (CI)

Slide 67

Slide 67 text

- Continuous Integration (CI)

Slide 68

Slide 68 text

. Build Status

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

! /Deploy

Slide 71

Slide 71 text

! Nothing gets deployed unless tests are green

Slide 72

Slide 72 text

A typical deployment flow Development Staging Production

Slide 73

Slide 73 text

GitHub's 0 flow Development Staging Production Development Development Staging Staging

Slide 74

Slide 74 text

1 Branch Labs

Slide 75

Slide 75 text

2 Queuing

Slide 76

Slide 76 text

⚡ Doing it live

Slide 77

Slide 77 text

Meanwhile, back at the pull request…

Slide 78

Slide 78 text

! Team

Slide 79

Slide 79 text

Team Web | Android | iOS

Slide 80

Slide 80 text

! Team communicates… What’s up Ships Ideas Hubbers Notifications

Slide 81

Slide 81 text

A communications culture

Slide 82

Slide 82 text

A distributed company

Slide 83

Slide 83 text

Profiles

Slide 84

Slide 84 text

Automated AFK Tripit API

Slide 85

Slide 85 text

! Halp

Slide 86

Slide 86 text

What goes through halp? support@ government@ sales@ press@ security@

Slide 87

Slide 87 text

Halp works just like GitHub @mentions Teams Markdown Emoji Opt in/out Everything at GitHub

Slide 88

Slide 88 text

No content

Slide 89

Slide 89 text

Halp works just like Gmail labels search filters

Slide 90

Slide 90 text

Eliminate work github.com/benbalter/gman

Slide 91

Slide 91 text

! Tier-1 support Collaborative support

Slide 92

Slide 92 text

! Speak like a human

Slide 93

Slide 93 text

! Tools make the difference

Slide 94

Slide 94 text

4 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 95

Slide 95 text

4 A typical week at GitHub/GitHub Authors 78 Commits 1.1k Files changed 900 Additions 23k Deletions 7k Issues opened 50 Pull requests opened 50 Pull requests merged 200 People merging 60 Issues closed 70

Slide 96

Slide 96 text

~130 production deploys per day

Slide 97

Slide 97 text

~41 deploys to GitHub.com per day

Slide 98

Slide 98 text

! To summarize…

Slide 99

Slide 99 text

! GitHub Zen api.github.com/zen Responsive is better than fast. It’s not fully shipped until it’s fast. Anything added dilutes everything else. Practicality beats purity. Approachable is better than simple. Mind your words, they are important. Speak like a human. Half measures are as bad as nothing at all. Encourage flow. Non-blocking is better than blocking. Favor focus over features. Avoid administrative distraction. Design for failure. Keep it logically awesome.

Slide 100

Slide 100 text

! How GitHub works like an open source project (and you can too!) Ben Balter government.github.com [email protected]