`
love~ruby+rails
  • 浏览: 852267 次
  • 性别: Icon_minigender_1
  • 来自: lanzhou
社区版块
存档分类
最新评论

How GitHub Works

阅读更多

Ryan wrote a really great comment over at rc3.org in response to an interview Scott did talking about how we work over at GitHub. Since I can’t seem to link to the comment directly, I’m reproducing it here:


Having worked in this environment for a little while, I’m not sure I agree that these are really prerequisites, but I’ll try to comment on each:

 

Your developers must be users of the product.

 

This is probably the key to everything. Seriously. Take everything below with a grain of salt.

 

Your developers must be able to iterate without relying too much on other members of the team.

 

We rely on each other quite a lot, actually. When somebody starts pasting screen caps of some concept into the campfire and they’re really good, people want to jump in and be a part of it. Sometimes you’re working on something and are totally content and loving it but you see that somebody else is really close and they could use a hand and so you make a decision to drop what you’re doing and switch over to that because, hey, let’s just ship that real quick because it’s close and it’s amazing and it’s not like the thing you’re working on has a deadline.

There’s a tremendous amount of freedom and flexibility. More times than not, that results in people using that flexibility to work together in ways that may not have been foreseen or planned.

There’s also times when people don’t jump in on a new concept. Those things may move more slowly. Maybe they should move more slowly. There’s times when something is worked on for a couple of days and then people lose interest for whatever reason. Maybe it’s not interesting.

I think this is part of what Scott was referring to when he said, “open source software style of business”. In an open source project, it’s hard for bad ideas to gain a lot of support. The maintainer doesn’t really get to tell other contributors what to work on. They can set a vision and tone, but an idea sinks or swims largely on its own merits and whether the people contributing feel it’s worthwhile as a collective.

I guess conventional wisdom is that team planning meetings (in whatever methodology you subscribe to) can be used to get the same results in a more orderly fashion. You get everyone in a room and you ask them, “do you think this is interesting? Should we prioritize X over Y?” And everyone says, “Hmmmm. Yes, let’s do Y first and then X but definitely not B,” and there’s debate and eventually everyone comes to an agreement and starts working on whatever was decided. There’s a lot of thinking and talking and committing involved.

The problem with the planning approach in my experience is this: what people think/say they want to do and what they really want to do (or what they’re capable of doing) are often wildly different things. It’s kind of like: “put your money where your mouth is.” Say you show me some thing and ask me whether I think it’s cool or valuable and I say, “yeah, it’s great and I’d totally buy it, yeah.” And then you say, “give me $100 and you can have this thing,” and now I’m not so sure. The act of actually having to take money out of my pocket and trade it for this thing is a powerful device. All the bullshit is distilled down to a very simple binary event: I pay or I go do something else. There’s no hypotheticals at that point.

I think time is kind of like that. It’s hard to tell how it’s best spent until a real person is faced with a decision to actually spend it or not spend it. At GitHub, we have a very simple voting/prioritization system: whatever people decide to work on is a priority, by definition. If something is interesting, more people end up working on it. This doesn’t mean there’s no priorities. It just means we find out about them instead of deciding on them.

And I want to stress that there’s more than just this selfish I’m-intellectually-curious-about-X-and-so-X-is-all-I’m-going-to-work-on thing going on here. You want to ship. You want to make money. You want people to love the shit you put out. You want to kick ass. You want your coworkers to kick ass. You want the site to be stable and fast and reliable. All of those things are at work all the time and they play into what you decide to work on at every moment.

 

The business must not have customers who are promised certain features by a certain date. Customers of every software company I’ve ever worked for have requested features that no developer wants to work on, but they pay the bills, so we worked on them anyway.

 

I’ll agree that dates are hard with this kind of setup, but dates are always hard. We’re just honest about it. I’d say the only difference between GitHub and most other places I’ve worked at in practice is that I apologize for being late a lot less. The same work gets done in the same amount of time, there’s just fewer estimation errors because there’s less estimating. Actually, I feel like I get more done “on time” because I have more freedom to take things that really aren’t time critical and shift them around because I wasn’t forced to put an artificial deadline on them in the first place.

As for working on stuff that’s tedious or maybe not immediately gratifying, that happens all the time. Again, the goal isn’t always to just work on what’s intellectually interesting. Things can be interesting for all kinds of reasons. Money is certainly interesting. Helping somebody out in a jam on a support request is interesting, even though the work might not be all that fun. Plugging a security vulnerability 20 minutes after it was reported is interesting. Fixing a bug that’s flooding your exception notification system is interesting.

I want GitHub’s availability and reliability to be unmatched. The steps required to get there aren’t all intellectually stimulating. Some of the stuff is a real chore. But I want to get there dammit. Getting there is interesting.

Also, most things are interesting to someone. There’s a few areas right now that no one has a particularly strong interest in. When things become neglected, they’re very quickly obvious. They don’t have a chance to fester. They just pop and are ugly and everybody has to look at it all the time and it’s annoying. At GitHub, those things are taken as a sign that we should consider hiring somebody who is interested in that thing. The more everyone is forced to take time away from what they would rather be doing to deal with the thing, the more pressure is created to find the person that’s going to love that thing and fix it for good.

I didn’t realize I had so much to say about this. I guess I feel like I’ve already learned a ton from these guys and am anxious to share. I’m still trying to figure out how it works so damn well myself. I doubt anyone really understands the thing. We’re all pretty good at rolling with it.


Ryan’s right that we’ve never really sat down to discuss how our process works, short of us all agreeing that we like it. I’m curious to see in the upcoming years as we continue to hire additional people how our setup evolves.

Hiring talented developers like Scott, Ryan, and Kyle lead me to believe that as long as we’re hesitant and selective about who works for us, there’s no reason we can’t carry on this way without implementing bizarre solutions to problems that shouldn’t exist in the first place.

I jotted down some notes on hiring people a while ago, perhaps it’s time to actually write the post.

分享到:
评论

相关推荐

    how-github-works

    GitHub是一个基于Git的代码托管平台,它允许开发者们存储、管理并协作编码项目,无论这些项目是开源的还是私有的。GitHub的故事始于四个创始人在各种非传统场所的会面,比如咖啡馆、酒吧、餐馆、飞机上,甚至是监狱...

    Android代码-AndroidBoilerPlateLibrary

    People code now, ask how it works when they make mistakes, then say the documentation is bad when they can't fix it in 10 minutes. Libraries required (no gradle provided): me.grantland.wi

    Android代码-android-RavenServer

    How it works? There is a http server running in a background service, start a activity, on a request is accepted. ABOUT ME: Github | twitter | 微博 About the demo Run the demo. Then send the url ...

    Android代码-“水滴”swipeRefreshLayout

    Even if this works fine with API.13 or less, we support only for API.14 or more. Screenshots Watch YouTube video here. Requirements Target Sdk Version : 21 Min Sdk Version : 14 How to use Add ...

    tomcat源码

    how tomcat works source code to read and study ,later if you need others resources ,please contact me!

    hadoop权威指南.示例代码

    ch06 - How MapReduce Works ch07 - MapReduce Types and Formats ch08 - MapReduce Features ch09 - Setting Up a Hadoop Cluster ch10 - Administering Hadoop ch11 - Pig ch12 - Hive ch13 - HBase ch14 - ...

    Learn Android Studio(Apress,2015)

    Learn Android Studio covers Android Studio and its rich tools ecosystem, including Git and Gradle: this book covers how Android Studio works seamlessly with Git, for source control, and Gradle, a ...

    Android代码-HgLauncher

    HgLauncher is a launcher with a design philosophy of 'if it works, it works.' Consisting of simply a scrolling list of apps, there is very little visual cue to disturb you. If all you want in a ...

    mitmproxy 使用 golang 实现 使用Golang实现的中间人攻击(Man-in-the-middle),解析、监测、窜改HTTP,HTTPS流量 .zip

    关于手动设置代理与透明代理模式的区别,请参考 Python 版 mitmproxy 文档How mitmproxy works。go-mitmproxy 目前支持文章中提到的“Explicit HTTP”和“Explicit HTTPS”。命令行工具安装go install github....

    iOS 7 Programming Fundamentals

    Explore the C language to learn how Objective-C works, Learn how instances are created, and why they’re so important, Tour the lifecycle of an Xcode project, from inception to App Store, Discover ...

    iOS 7 Programming Fundamentals: Objective-C, Xcode, and Cocoa Basics

    Explore the C language to learn how Objective-C works Learn how instances are created, and why they’re so important Tour the lifecycle of an Xcode project, from inception to App Store Discover how to...

    Advanced R(Apress,2016)

    Add tests to R code to insure it works as intended Build packages automatically with GitHub Use R to talk directly to databases and do complex data management Run R in the Amazon cloud Generate ...

    DevOps+with+Kubernetes-Packt+Publishing(2017).pdf )

    Kubernetes services and how default networking works in Kubernetes. External access to our services is necessary for business needs. Chapter 6, Monitoring and Logging, shows you how to monitor a ...

    DevOps with Kubernetes accelerating software delivery with container orch

    Kubernetes services and how default networking works in Kubernetes. External access to our services is necessary for business needs. Chapter 6, Monitoring and Logging, shows you how to monitor a ...

    Android代码-Android-PdfMyXml

    convert your android XML layouts into PDF document, works on all versions of Android. Dependencies pdfjet How to use Option 1: Simply fork or download the project, you can also download and create ....

    Android代码-Animated-Expanding-ListView

    It works in all version of Android and it's very easy to adapt to your project. How to use with Gradle Simply add the repository to your build.gradle file: repositories { jcenter() maven { url '...

    AndroidPhotoView

    Works perfectly when used in a scrolling parent (such as ViewPager). Allows the application to be notified when the displayed Matrix has changed. Useful for when you need to update your UI based on ...

Global site tag (gtag.js) - Google Analytics