Slide 1

Slide 1 text

github how uses to build zach holman

Slide 2

Slide 2 text

github how uses to build x

Slide 3

Slide 3 text

github how uses to build github github

Slide 4

Slide 4 text

how uses to build github

Slide 5

Slide 5 text

how uses to build github

Slide 6

Slide 6 text

how uses to build github your company your product

Slide 7

Slide 7 text

@holman

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

we work asynchronously

Slide 10

Slide 10 text

WORKING ASYNCHRONOUSLY: YOU CAN DO SHIT WITHOUT NEEDING TO PULL ME OUT OF THE ZONE™. NO MEETINGS • NO DEADLINES • NO MANAGERS

Slide 11

Slide 11 text

CHATROOMS NO PRESENCE NEEDED LOG ALL THE THINGS EVERYONE ON THE SAME PAGE TIME FLEXIBILITY WORK WHEN YOU WANT TO WORK

Slide 12

Slide 12 text

HOW GITHUB WORKS zachholman.com/posts/how-github-works

Slide 13

Slide 13 text

PULL REQUESTS + BRANCHING ISSUES OAUTH AS IDENTITY HOOKS & HUBOT SECRETS OKAY LET’S TALK ABOUT

Slide 14

Slide 14 text

+ pull requests branching

Slide 15

Slide 15 text

Y’all got some weird branches.

Slide 16

Slide 16 text

master deploy-62 deploy-63 deploy-63b deploy- ?

Slide 17

Slide 17 text

REPOSITORY TRUSTED DEVELOPERS FORK FORK FORK SHITTY DEVELOPERS ʘ‿ʘ ಠ_ಠ

Slide 18

Slide 18 text

Keep your branches simple.

Slide 19

Slide 19 text

How GitHub does branching:

Slide 20

Slide 20 text

MASTER BRANCH

Slide 21

Slide 21 text

Everyone can push, everyone can deploy.

Slide 22

Slide 22 text

Frees up your time from micromanaging someone else’s code.

Slide 23

Slide 23 text

Master is always deployable.

Slide 24

Slide 24 text

Master is always deployable. We deploy 10-40 times a day.

Slide 25

Slide 25 text

If you’re nervous, deploy to staging. Or deploy a branch. Or deploy to a subset of our production boxes. TWITTER-DRIVEN DEVELOPMENT CHECK TWITTER, SEE IF YOU BONED A DEPLOY

Slide 26

Slide 26 text

Keep your branches simple.

Slide 27

Slide 27 text

What about code quality? ಠ_ಠ

Slide 28

Slide 28 text

REQUESTS PULL OOH! FUTURISTIC!

Slide 29

Slide 29 text

Pull Requests are our code review.

Slide 30

Slide 30 text

DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS DISCUSSIONS DISCUSSIONS DISCUSSIONS DISCUS WHATPULL REQUESTS? ARE

Slide 31

Slide 31 text

A PULL REQUEST IS A DISCUSSION CODE DISCUSSION FEATURE DISCUSSION STRATEGY DISCUSSION

Slide 32

Slide 32 text

CODE DISCUSSION FEATURE DISCUSSION STRATEGY DISCUSSION

Slide 33

Slide 33 text

REFERENCE ISSUES REVIEW CODE DIFFS WRITE CODE COMMENTS CODE DISCUSSION FEATURE DISCUSSION STRATEGY DISCUSSION

Slide 34

Slide 34 text

REFERENCE ISSUES REVIEW CODE DIFFS WRITE CODE COMMENTS CODE DISCUSSION FEATURE DISCUSSION STRATEGY DISCUSSION ALL ON A BRANCH

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

TITLE OF THE PULL REQUEST DESCRIPTION COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS DISCUSS COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT COMMIT

Slide 37

Slide 37 text

talk about changes show all commits show specific code changes

Slide 38

Slide 38 text

MASTER BRANCH

Slide 39

Slide 39 text

MASTER BRANCH PULL REQUEST

Slide 40

Slide 40 text

BIG SECRET #1 PULL REQUESTS: YOU DON’T NEED TO FORK ANYTHING.

Slide 41

Slide 41 text

WHY PULL REQUESTS ARE RAD: REASONS 4

Slide 42

Slide 42 text

WHY PULL REQUESTS ARE RAD: ASYNCHRONOUS No meetings.

Slide 43

Slide 43 text

WHY PULL REQUESTS ARE RAD: NOTIFICATIONS Email is your interface.

Slide 44

Slide 44 text

WHY PULL REQUESTS ARE RAD: ACCESSIBLE Designers can evolve mockups and entire workflows. Non-technical staff can add their two cents.

Slide 45

Slide 45 text

WHY PULL REQUESTS ARE RAD: HISTORICAL Pull Requests can be experiments. Try something out, throw it away, retain a history.

Slide 46

Slide 46 text

GitHub’s Pull Requests

Slide 47

Slide 47 text

Realtime™ status.github.com real-time polling git (ssh): true git (http): true git (git://): true downloads: true pages: true svn: true SUDDENLY, a design

Slide 48

Slide 48 text

Realtime™ status.github.com real-time polling POST SCREENSHOTS MIX YOUR DESIGNERS + DEVELOPERS (AND .GIFs!)

Slide 49

Slide 49 text

CodeMirror syntax highlighting as you type

Slide 50

Slide 50 text

CodeMirror syntax highlighting as you type PULL REQUESTS ARE CHEAP AS HELL DON’T BE AFRAID TO TOSS IT ALL AWAY

Slide 51

Slide 51 text

Don’t be afraid to try to (gently) break GitHub. 8 months, couple hundred commits, dozens of mockups {

Slide 52

Slide 52 text

Pull Requests are about getting shit done without wasting a lot of time.

Slide 53

Slide 53 text

Can your workflow be improved? Do you really need all that process?

Slide 54

Slide 54 text

USE PULL REQUESTS MORE SPEND LESS TIME AVOIDING SHIPPING PULL REQUEST RECAP

Slide 55

Slide 55 text

issues we have

Slide 56

Slide 56 text

priorities estimates rich media things deadlines redundant wat more priorities just trolling us now where am i anyway

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

Can you survive on tools? SIMPLER

Slide 59

Slide 59 text

Can you work faster on tools? SIMPLER

Slide 60

Slide 60 text

Can you work better on tools? SIMPLER

Slide 61

Slide 61 text

Merlin Mann @hotdogsladies on email priorities :

Slide 62

Slide 62 text

A priority is observed, not manufactured or assigned. Otherwise, it's necessarily not a priority. “

Slide 63

Slide 63 text

Making something a BIG RED TOP TOP BIG HIGHEST #1 PRIORITY changes nothing but text styling. If it were really important, it'd already be done. Period. “

Slide 64

Slide 64 text

PRIORITIES DEADLINES ASSIGNEES ESTIMATES

Slide 65

Slide 65 text

Resist adding meta-work. It gets in the way of doing real work. (The real work will get done anyway.)

Slide 66

Slide 66 text

3We use Issues for three things.

Slide 67

Slide 67 text

shit, something is broken

Slide 68

Slide 68 text

hey, this could be cool

Slide 69

Slide 69 text

todo lists

Slide 70

Slide 70 text

Do you need more than that? Think about it. Most of the time, you don’t.

Slide 71

Slide 71 text

MEANS MORE TIME BUILDING YOUR PRODUCT ISSUES RECAP SIMPLE TOOLS

Slide 72

Slide 72 text

oauthas identity

Slide 73

Slide 73 text

RUBY IS SO FAST FUCK I LOVE IT SO MUCH —

Slide 74

Slide 74 text

~/Development/SECRETARYOFLABOR self-referential symlink `what` single LABOR.RB web app was super hammered when I wrote this ~/Development/unmarked_van an app that stalks people’s locations ~/Development/trace real-time stats graphing

Slide 75

Slide 75 text

continuous integration internal app distribution collectd graphs internal talk videos 30 INTERNAL APPS arbitrary data store internal twitter ios licensing + provisioning haystack exceptions

Slide 76

Slide 76 text

Outsiders are not welcome.

Slide 77

Slide 77 text

GitHub as Authentication TEAMS, ORGANIZATIONS, AND USERS

Slide 78

Slide 78 text

GitHub as Authentication USE OAUTH TO AUTHENTICATE USERS

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

github.com/atmos/sinatra_auth_github github_organization_access?('github') # => true

Slide 81

Slide 81 text

GitHub as Authentication SECURITY • CONSISTENCY • COOLICTY

Slide 82

Slide 82 text

DON’T REINVENT THE WHEEL YOUR AUTHENTICATION CAN BE FREE OAUTH RECAP

Slide 83

Slide 83 text

hooks &hubot

Slide 84

Slide 84 text

HUBOT OUR FRIENDLY CAMPFIRE BOT

Slide 85

Slide 85 text

OVER 300 COMMANDS, LIKE... • deploy every GitHub app • run branch-level tests • play music in the office • tell us who is in the office • dynamically build usage graphs • send and receive text messages • mustache every image posted in chat • track who swears each day • rank by twitter followers • ...and way, way more

Slide 86

Slide 86 text

github.com/github/hubot Hubot is not open source. LOL JK

Slide 87

Slide 87 text

bots — github: know your branch status hubot what hasn’t been deployed? Zach Hubot Zach: Here's what hasn't been deployed on master yet: https://github.com/github/github/compare/{sha}...master

Slide 88

Slide 88 text

bots — github: know your branch status hubot what hasn’t been deployed on issues2? Zach Hubot Zach: Here's what hasn't been deployed on issues2 yet: https://github.com/github/github/compare/{sha}...issues2

Slide 89

Slide 89 text

bots — github: know your branch status hubot what hasn’t been deployed on issues2? Zach Hubot Zach: Here's what hasn't been deployed on issues2 yet: https://github.com/github/github/compare/{sha}...issues2

Slide 90

Slide 90 text

bots — github: know your branch status hubot what hasn’t been deployed on issues2? Zach Hubot Zach: Here's what hasn't been deployed on issues2 yet: https://github.com/github/github/compare/{sha}...issues2

Slide 91

Slide 91 text

https://github.com/site/sha bots — github: know your branch status #=> 2c8c2e9932d0caceecd3ed8ee2adcda0ece3e564

Slide 92

Slide 92 text

bots — github: using the API hubot what are the pulls on holman/boom? Zach Hubot HTTParty should only be a soft dependency (master...jimmycuadra:soft-dependency) by jimmycuadra https://github.com/holman/boom/pull/46 boom roulette (master...culvr:master) by culvr https://github.com/holman/boom/pull/43

Slide 93

Slide 93 text

bots — github: using the API hubot how many issues did we close today for github/github? Zach Hubot 13 issues closed on github/github in the past 24 hours.

Slide 94

Slide 94 text

bots — github What does your company do over and over again? Can you automate that?

Slide 95

Slide 95 text

HUBOT RECAP HUBOT KNOWS WHERE YOU LIVE DO NOT TRUST HIM

Slide 96

Slide 96 text

secrets everyone has

Slide 97

Slide 97 text

WE TUCK STUFF AWAY SOMETIMES. OOPS.

Slide 98

Slide 98 text

EMOJI :heart: WORDS ARE FOR ACADEMICS, BRO :+1: :shipit: http://git.io/dmWZWg ...and so much more:

Slide 99

Slide 99 text

SHORTCUTS QUIT MAKING ME DO THINGS ALL SLOW-LIKE w t ?

Slide 100

Slide 100 text

IMAGES EVERYTHING IS BETTER WITH PIXELS ![title](url)

Slide 101

Slide 101 text

DIFF+PATCH GOD I HATE PIXELS JUST GIVE ME TEXT .diff + .patch after most URLs

Slide 102

Slide 102 text

require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html FENCED CODE IT’S LIKE CODE BUT WITH MORE FENCES

Slide 103

Slide 103 text

```ruby require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html ``` FENCED CODE IT’S LIKE CODE BUT WITH MORE FENCES

Slide 104

Slide 104 text

FENCED CODE IT’S LIKE CODE BUT WITH MORE FENCES require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html

Slide 105

Slide 105 text

MENTIONS GET SOMEONE ELSE TO DO YOUR WORK @username pull requests issues commits

Slide 106

Slide 106 text

WHITESPACE IT SUCKS add ?w=1 to URLs

Slide 107

Slide 107 text

REPO REFERENCES AROUND THE REPO, AROUND THE REPO, AROUND user/repo#issue

Slide 108

Slide 108 text

GIT.IO OFFICIAL LAUNCH ANNOUNCEMENT https://github.com/holman/really- fucking-long-url-wtf-is-u-doing git.io/url

Slide 109

Slide 109 text

GIT.IO OFFICIAL LAUNCH ANNOUNCEMENT http://git.io/nxVVig curl -i http://git.io -F 'url=#{url}' #{code}

Slide 110

Slide 110 text

TOOLS + PROCESS = PRODUCT SIMPLE BETTER AWESOME THE BIG RECAP

Slide 111

Slide 111 text

thanks!

Slide 112

Slide 112 text

zach holman zachholman.com/talks @holman twitter+github: