Closing keynote for RubyConf Brazil.
Addicted to Stablea.k.a how to sleep like an octocat
View Slide
Hundreds of Sites
Hundreds of SitesThousands of Decks
Hundreds of SitesThousands of DecksMillions of People
Hundreds of SitesThousands of DecksMillions of PeopleBillions of Views
“People want features,but need stability.
Sta·bleNot likely to change or fail
AppCode and Servers
TestingAutomate
?
?test/unit
?rspectest/unit
?rspectest/unit minitest
YES
design YES
design YES change
design YES changeregression
Work by me
Work by mePushed code fix
Work by robots
Work by robotsClosed issue
Work by robotsClosed issueRan test suite
Work by robotsClosed issueRan test suiteDeployed code
Backup and RestoreAutomate
A Single ServerNever trust
Replicate
ReplicatePromote
ReplicatePromotePractice
“Me, at 8pm on a SaturdayI’m confirming the stepsand order of commands.
DeletedEverythingI accidentallySincerely,Your Employee
DeletedEverythingI accidentallySincerely,Your Customer
usersusers.archivedgaugesgauges.archived
hubot restore
DeletedEverythingI accidentallySincerely,You
DeploymentAutomate
hubot deploy github
hubot deploy speakerdeck
hubot deploy gauges
hubot deploy gauges/my-branch
puppethttps://github.com/puppetlabs/puppet
moonshinehttps://github.com/railsmachine/moonshine
HOSTFILTER=‘app7.foo.com’ \cap production deploy:setup
HOSTFILTER=‘app7.foo.com’ \cap production deploy
ExceptionsCollect and Fix
< 1 exceptionper million page views (gauges)
MetricsCollect and Graph
AlertsEmail, Push and SMS
Nagios
PingdomNagios
Pager DutyPingdomNagios
FailoverAutomate
web1 web2haproxy/heartbeat
Trackingapp3 app4 app5 app6web1 web2
Trackingapp3 app4 app5 app6web1 web2- option httpchk GET /pulse/tracking
Trackingapp3 app4 app5 app6web1 web2class PulseApp < Sinatra::Baseget '/pulse/tracking' dopulse :kestrelendend
Trackingapp3 app4 app5 app6web1 web2app1 app2Reporting
Trackingapp3 app4 app5 app6web1 web2app1 app2Reporting- option httpchk GET /pulse/reporting
Trackingapp3 app4 app5 app6web1 web2app1 app2Reportingclass PulseApp < Sinatra::Baseget '/pulse/reporting' dopulse :mongoendend
Trackingapp3 app4 app5 app6web1 web2q1 q2app1 app2Reporting
Trackingapp3 app4 app5 app6web1 web2q1 q2Workersdb1db2 db3app1 app2Reporting
TeamCollaboration and Freedom
46 hubbersWhen I started in December
115 hubbersAs of August 31, 2012 at 10:43am EST
How is that stable???
CollaborateAlways
Pull RequestsDiscussion + ❤
ChatCampfire to your phone
VideoFace to face and Pairing
Internal ToolsIdeas, Hiring, Music and more!
300+ ideas
300+ ideas3000+ comments
300+ ideas3000+ comments100+ people
CommunicateAlways
4300+ statuses
4300+ statuses4200+ comments
4300+ statuses4200+ comments100+ people
170 talks
170 talks112 people
170 talks112 people2 summits/year
DocumentAlways
EmpowerAlways
Anyone can view
Anyone can viewAnyone can commit
Anyone can viewAnyone can commitAnyone can deploy
296 branches
296 branches2980 commits
296 branches2980 commits307 issues
IN ONE MONTH
ONLY THE WEB APP
BrandSurprise and Delight
FeedbackStupid Easy
[email protected][email protected][email protected]
SupportFast and Friendly
DocumentationUseful and Thorough
CommunicationHonest and Open
If you present,GitHub covers the bill for you.
If you present,GitHub covers the bill for you and a buddy.
“On Saturday, June 2nd, we had aperfect storm of cascading failuresresulting in around four hours oflost tracking data.
“We have commissioned a newdatabase cluster with automaticfailover that we hope to be usingsometime next week.
“We hate that we lost your data.Know that we have learned fromthis and will rise from the ashes ofyour data loss like a GLORIOUSPHOENIX.
CelebrationPublic and Genuine
automate testing, backingup, restoring, deploying,collect exceptions, metrics,send alerts, fail gracefully,collaborate, communicate,document all the things,empower, get feedback,provide awesome support,communicate, celebrate
The End.