How GitHub works like an open source project

19d03ecc1ff5da1a5e63a3ddaa2d84c2?s=47 Ben Balter
October 30, 2014

How GitHub works like an open source project

and you can too!

19d03ecc1ff5da1a5e63a3ddaa2d84c2?s=128

Ben Balter

October 30, 2014
Tweet

Transcript

  1. ! How GitHub works like an open source project (and

    you can too!) Ben Balter government.github.com government@github.com
  2. ! What I’m here to talk about

  3. ! How you work is as important as what you

    work on
  4. ! What I’m not here to talk about

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

  6. These adorable kittens

  7. ! The world’s largest code-sharing platform " Founded 2008 !

    VC Funded $100M # Hubbers 232 $ Users 7M % Projects 15M
  8. ! Built on open source

  9. ! Contributes to open source

  10. ! Supports open source

  11. ! The constraints of open source

  12. ! " Electronic High fidelity mediums expose process

  13. ! & Transparent Communicate decisions in realtime, and forever

  14. ! ' Asynchronous Focus workflow on code, not meetings

  15. ! ( Informal Adopt cultures, not polices

  16. ! What does your organization optimize for?

  17. ! Butt-in-seat is a terrible metric

  18. ! Optimize for Happiness developer ^

  19. ! Software is an inherently creative endeavor

  20. ! You can’t mandate creativity

  21. ! Google had 20% time

  22. ! GitHub has 100% time

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

  24. ! Open allocation (and organic team formation)

  25. ! The result: a side project culture

  26. ! Internal users are people too

  27. ! Half-measures are as bad as nothing at all

  28. None
  29. ! Counterpoint: Business minimalism

  30. ! Metawork is a great waste of time

  31. ! A culture allergic to administrative distraction

  32. ! Prefer social constraints over technical constraints

  33. ! Prefer social constraints over administrative constraints

  34. ! Non-blocking is better than blocking

  35. ! Eliminate work

  36. ! Eliminate all humans

  37. ! Encourage flow

  38. ! How GitHub communicates

  39. Required reading zachholman.com/posts/github-communication

  40. ! “Meetings pull you from actual work in order to

    talk about doing work”
  41. ! email? lolwat

  42. ! GitHub | Chat | Team | Halp

  43. ! How GitHub uses GitHub to build GitHub (TM)

  44. GitHub uses GitHub for Code Legal HR Blog posts Documentation

    Policies Sales Ops
  45. Create a descriptively named feature branch

  46. Add commits

  47. Open a pull request

  48. Discuss and Review

  49. Merge and Deploy

  50. ! ) Friction Delay between “I want to contribute” and

    “I have contributed”
  51. None
  52. ! * Scripts to rule them all $ script/test Bootstrapping

    $ boxen giants $ cd ~/github/giants $ script/bootstrap Running $ script/server Testing
  53. ! Chat

  54. None
  55. ! Why chat?

  56. ! Chat is inherently asynchronous

  57. ! Tapping someone on the shoulder is inherently being a

    jerk
  58. ! Scheduling a meeting is inherently a violation of the

    Geneva convention
  59. ! Chat has transcripts

  60. ! Chat exposes process

  61. + Meet Hubot

  62. , ChatOps

  63. # 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
  64. Some other ways Hubot helps Push Notifications Situational Awareness

  65. Twitter Subscriptions Ops “github down” The Government Room “open source

    government” The Danger Room “animal hijinks gif”
  66. ! - Continuous Integration (CI)

  67. - Continuous Integration (CI)

  68. . Build Status

  69. / 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
  70. ! /Deploy

  71. ! Nothing gets deployed unless tests are green

  72. A typical deployment flow Development Staging Production

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

  74. 1 Branch Labs

  75. 2 Queuing

  76. ⚡ Doing it live

  77. Meanwhile, back at the pull request…

  78. ! Team

  79. Team Web | Android | iOS

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

  81. A communications culture

  82. A distributed company

  83. Profiles

  84. Automated AFK Tripit API

  85. ! Halp

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

  87. Halp works just like GitHub @mentions Teams Markdown Emoji Opt

    in/out Everything at GitHub
  88. None
  89. Halp works just like Gmail labels search filters

  90. Eliminate work github.com/benbalter/gman

  91. ! Tier-1 support Collaborative support

  92. ! Speak like a human

  93. ! Tools make the difference

  94. 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)
  95. 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
  96. ~130 production deploys per day

  97. ~41 deploys to GitHub.com per day

  98. ! To summarize…

  99. ! 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.
  100. ! How GitHub works like an open source project (and

    you can too!) Ben Balter government.github.com government@github.com