From: [email protected]
Subject: Search Results
If you have a spare moment, go to github.com/search.
These search pages need some lovin’
in a bad, bad way.
Slide 15
Slide 15 text
Backend
Two-person teams
Slide 16
Slide 16 text
Two-person teams
Frontend
Slide 17
Slide 17 text
Building
Slide 18
Slide 18 text
Okay, let’s build something
Slide 19
Slide 19 text
BRANCHES
Slide 20
Slide 20 text
git checkout -b search-next
BRANCHES
Slide 21
Slide 21 text
Really simple branching
BRANCHES
Slide 22
Slide 22 text
Cut a branch from master
BRANCHES
(rarely from non-master branch)
Slide 23
Slide 23 text
Push whenever; let others help
BRANCHES
Slide 24
Slide 24 text
No need for complicated forks
BRANCHES
Slide 25
Slide 25 text
COMMITS
Slide 26
Slide 26 text
git commit -m “Design Search”
COMMITS
Slide 27
Slide 27 text
git commit -m “:lipstick:”
COMMITS
Slide 28
Slide 28 text
COMMITS
Slide 29
Slide 29 text
We don’t rebase or
do any fancy merge strategies
COMMITS
Slide 30
Slide 30 text
Small, incremental commits
COMMITS
Slide 31
Slide 31 text
PULL REQUESTS
Slide 32
Slide 32 text
Open a Pull Request
PULL REQUESTS
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
Sometimes we open pulls before code
PULL REQUESTS
Slide 35
Slide 35 text
PULL REQUESTS
Sometimes we open pulls after code
Slide 36
Slide 36 text
PULL REQUESTS
Sometimes pulls aren’t for merging
Slide 37
Slide 37 text
130 commits 10 contributors
2 months
Slide 38
Slide 38 text
PULL REQUESTS
Let your pulls evolve
Slide 39
Slide 39 text
MENTIONS
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
MENTIONS
Low-overhead way to ask for help
Slide 43
Slide 43 text
MENTIONS
Non-intrusive way to ask for help
Slide 44
Slide 44 text
MENTIONS
Feel good about a ship by
mentioning the relevant team
Slide 45
Slide 45 text
TESTING
Slide 46
Slide 46 text
TESTING
Tests are kinda critical
Slide 47
Slide 47 text
TESTING
Every commit we push triggers three builds:
ruby 1.8
ruby 1.9
github enterprise
Slide 48
Slide 48 text
Build notifications
Slide 49
Slide 49 text
TESTING
Make it hard to ignore failures
Slide 50
Slide 50 text
Shipping
Slide 51
Slide 51 text
STAFF-SHIPPING
Limit your exposure
Slide 52
Slide 52 text
STAFF-SHIPPING
We have ~35 features staff-shipped
Slide 53
Slide 53 text
STAFF-SHIPPING
My GitHub looks different from yours:
Slide 54
Slide 54 text
REDACTED
Slide 55
Slide 55 text
STAFF-SHIPPING
Ranges from four-line config changes
to entire feature redesigns
Slide 56
Slide 56 text
STAFF-SHIPPING
Coworkers are the only real beta testers
Slide 57
Slide 57 text
STAFF-SHIPPING
def search_enabled?
current_user.staff?
end
master
Slide 58
Slide 58 text
STAFF-SHIPPING
def search_enabled?
true
end
ship-search
Slide 59
Slide 59 text
STAFF-SHIPPING
No risky deploys;
it’s already production-tested
Slide 60
Slide 60 text
STAFF-SHIPPING
Search’s design
was staff-shipped for two months
Slide 61
Slide 61 text
STAFF-SHIPPING
Search’s backend
was staff-shipped for four months
Slide 62
Slide 62 text
STAFF-SHIPPING
Gist 2.0
was staff-shipped for a year
Slide 63
Slide 63 text
STAFF-SHIPPING
More real-world
usage means fewer surprises
Slide 64
Slide 64 text
STAFF-SHIPPING
Shipping is scary; reduce surprises
Slide 65
Slide 65 text
DEPLOYMENT
Slide 66
Slide 66 text
DEPLOYMENT
Deploying is scary; reduce surprises
Slide 67
Slide 67 text
DEPLOYMENT
Deploying to production involves 80
servers and hundreds of Unicorn
processes and magic and it’s a
wonder this stuff works
Slide 68
Slide 68 text
DEPLOYMENT
We want it easy enough for a
designer to deploy
Slide 69
Slide 69 text
github/hubot
Slide 70
Slide 70 text
DEPLOYMENT
hubot deploy github
Slide 71
Slide 71 text
DEPLOYMENT
Hubot talks to an API that knows
how to deploy every app
Slide 72
Slide 72 text
DEPLOYMENT
hubot deploy github/ship-search
Slide 73
Slide 73 text
DEPLOYMENT
Deploy a branch;
rollback by deploying master
Slide 74
Slide 74 text
DEPLOYMENT
hubot deploy github/master
Slide 75
Slide 75 text
CHATOPS
Slide 76
Slide 76 text
CHATOPS
Chat’s important to us
Slide 77
Slide 77 text
No content
Slide 78
Slide 78 text
CHATOPS
Search didn’t need standup meetings
Slide 79
Slide 79 text
CHATOPS
Chat is asynchronous and non-blocking
Slide 80
Slide 80 text
CHATOPS
“Chatops”
Slide 81
Slide 81 text
CHATOPS
Transparent way of handling ops
Slide 82
Slide 82 text
CHATOPS
Search deployed, check perf
Slide 83
Slide 83 text
CHATOPS
/graph me -1h substr(es-*_github.load)
Slide 84
Slide 84 text
CHATOPS
Slide 85
Slide 85 text
CHATOPS
load on es-storage15 is higher
than the other storage nodes
Slide 86
Slide 86 text
CHATOPS
let's let it go a bit- could just be due to
relocating shards causing iowait
Slide 87
Slide 87 text
CHATOPS
Working over SSH is non-collaborative
Slide 88
Slide 88 text
CHATOPS
Makes it obvious what needs
automation and tooling