GitHub第一年的10个启示
这篇博客写于2008年12月底,时至今日已有2年多的光景。它一直在我的草稿箱里,等待完成剩余的2%。我从未发布这篇文章,因为它不在我的列表之内。对我而言它就是对过去的一个提醒,让我时刻记得那些事情。在我写下这些的时候,我们已经从4个人发展成为26个人的团队,搬进了写字楼,安装了一台饮料机,并且仍然没有从外面募集资金。在某些方面,事情已经发生了巨大的变化,但在核心问题上,还是和过去一样。想到这一点,我的脸上充满了喜悦。(编注:作者此文发布于2011年3月29日)
年末的时候,准备一杯你最喜欢的饮料,调低光线,紧靠着壁炉坐下来,想想过去的12个月里有哪些收获。
对我而言,2008年里我参与了设计、开发并启动了GitHub。建立新公司是一个非常紧张的学习过程。一年中经历了许多的失败和成功,我从中得到了很多宝贵的经验。下面就是其中的一部分。
1. 尽早起步
Chris和我在2007年底开始创建GitHub的时候,大多数人只知道Git是一个版本控制系统。当然,对于Linux内核开发者而言,他们从一开始就是用Git,但是在那个小圈子之外,很少有开发者会在日常的工作中使用。我第一次接触Git是由Dave Fayram介绍的,他既是我的好友也是Powerset一起工作过的同事。作为早期接纳Git的开发者Dave非常典型,在我看来他在Ruby社区以及之外的领域推广Git不遗余力。
回到2007年,那时Git的土壤还非常贫瘠。在1.5版本发布之后,Git才逐渐被普通开发者采用。真正提供Git服务的网站也只有repo.or.cz_。_我感觉它提供的服务非常有限,显得笨拙而且设计很糟糕。没有什么商用Git服务可供选择。尽管如此,在Ruby社区人们开始谈论Git,以及它有多么的优秀。但有的时候Git还是有些问题。Git的设计理念就是提供分布式的代码服务,但是如何在共享的同时保证私有代码的安全?你唯一的选择只有在Unix上创建一个账号,并将它作为临时的解决方法。没有理想的解决办法。
因此GitHub应运而生。然而,在GitHub诞生之时市场上还没有收费的Git服务。我们需要打开这个市场。还清晰地记得当时我是这么告诉人们:“我不期望GitHub会马上成功。Git需要一段时间才会被大家接受,而那时我们已经准备就绪。”无论是我或是Chris都没有期待这会马上发生。那时我在Powerset做全职工作,Chris是一名Rails顾问且收入颇丰。选择一项小众的技术并基于它及早地进行开发,我们能够在没有经营成本、没有竞争的情况下,利用业余的时间创办了一家公司。
译注:Rails:一个高效的Web开发框架。
2. 适应你的客户
这是一个看上去矛盾的建议:倾听你的客户,但是不要听从他们让你去做的事情。请容许我解释一下。考虑这样一个功能请求,比如“GitHub应当允许我通过FTP上传项目文档。”实际上用户真正想要表达的是:“我想要一个发布项目相关内容的简便方法。”由于用户习惯了现有的技术,因此他们会按照对于他们更加熟悉的方式提出要求。我们如果完全按照用户要求做,那么会实现某种糟糕的FTP服务。但如果我们看到了请求背后的真正问题,就会像现在的做法一样,允许用户通过自己的帐号向Git仓库发布内容。这不但实现了用户要求的功能,而且解决的方式非常简洁。
另一家能够基本理解这个概念的公司就是Apple。我肯定有很多人要求Apple生产一款手机,但是Steve Jobs和他的团队知道在这个要求背后人们想要的究竟是什么:一个美观、易用、同步方便的移动设备,用上它会让你变得很酷。这就是秘诀。不要按照他们要求的去做,给他们真正想要的东西。
3. 享受乐趣
我在加里佛利亚一所叫做Harvey Mudd的学校里上的大学。是的,我知道你没有听说过。但是如果还记得高中时期很迷信的那本由《美国新闻和世界报道》出版的《全美最好的大学》那本书(好吧,也许你并不迷信,但我是信了),Harvey Mudd是所有工程类大学中每晚家庭作业最多的大学。对的,比MIT和加州理工还要多。我可以告诉你,事实的确如此。在我的记忆中,有很多关于异常复杂的弹簧、质量和阻尼系统,以及按照双螺旋方式给一个圆柱体缠上线圈的可怕经历。我们学习得很刻苦——非常刻苦。但是我们也玩得很疯狂。这是唯一能够让我们保持理智的事情了。
创业有点像大学生活。你和世界上最好的朋友一起疯狂地做项目,而且(通常)有很多时间。在这两种环境下,你都需要彻底放松这样才能保持平衡。筋疲力尽是一个真正危险的信号。营造一个好玩并有创意的环境,对于保持身体健康和公司的良好状态(得到好的创意)都是至关重要的。
(Github 创始人之一 Tom Preston Werner,伯乐在线配图)
4. 关注Twitter
我发现Twitter上的即时反馈非常有价值。如果GitHub网站因为某些原因变得很慢,Twitter会如实地告诉我。如果在某些国家网站不能访问(比如中国),我会通过Twitter了解到。如果刚发布的新功能很棒,我会从Twitter搜索的结果中受到鼓舞。
人们会在Twitter上抱怨GitHub所有细小的bug,通常结尾会带上令人不快的“失败”字眼。这些看起来令人厌烦,但总的看来还是值得注意。通常这些无知的bug会告诉你,是否应该将一个隐秘的bug加入待解决的列表。我们也在Twitter上创建了一个GitHub账号用来回复那些负面的评论。这样的支持服务通常会让客户的心情由阴变晴。
如果你有iPhone,我由衷地推荐Fanzter公司的Summizer应用程序。它会让你在Twitter搜索、查看以及回复变得非常容易。
5. 随心所欲地部署!
在第一次RailsConf上,我有幸聆听了Martin Fowler的精彩演讲。在会上他对敏捷开发使用的一些聪明的隐喻,在这里我将使用它们并进行一些修改。
假设要求你设计一款计算机控制的手枪,能够精确地设计到50米开外的目标。这是唯一的需求。一种方法是设计一个复杂的机器,能够在射击之前够测量所有可能的因素(例如风速、射击角度、温度等),然后发射。另外一个方法是设计一个简单的机器,能够快速射击并检测每次射击命中的位置。它能够使用这些信息为下一次的射击提供校正,在很短的时间内最终击中目标。
这两种方法的不同之处在于是否意识到子弹是很便宜的。在第一种方案完善了检测风速设备的时候,你已经用简单的武器击中了目标。
在web开发中,这个目标就是你提供的创意,而子弹就是你部署的网站以及客户提供的反馈。网站第一年提供的功能是很有吸引力的。你的客户通常可能是早期的适用者,他们乐于尝试每隔几周推出的新功能。只要新功能很好,即使产品发布有一些推迟,他们也很容易原谅。在GitHub的早期,我们在一个下午发布了10次,不断逼近那个目标。
第一年值得好好利用,因为一旦有重要的客户开始上门,你就得小心使用这种粗放的射击方式。在接下来的游戏中,宕机和糟糕的部署会带来经济损失,因此你需要更多地依靠工具来预测工作的方向。
6. 你不需要办公室
GitHub所有全职员工都在旧金山工作,然而我们没有设立办公室。但我们也不是完全地在网络上工作。事实上,一周几次你会发现我们在北滩的一个咖啡馆里,围坐在一个由2×4米老式公告栏订起来的正方形桌子周围。虽然不如谷歌园区,但租金很便宜而且饮料非常可口。
这并不意味着我们没有开始寻找可以落脚的地方。恩,我们差不多快要租下了一个旧的酒吧,但最后还是没有仓促做出决定。我们一直在等待一个完美的办公室。直到那个时候,我们才会将攒下资金投入到公司中,或者落袋为安。我认为目前只要有沙发和咖啡就足够了。
当然,如果没有37signal公司的Campfire web聊天工具以及如虎添翼的Propane OSX桌面应用软件,这一切都不会发生。我强烈推荐这两个产品。
7. 通过开源项目招聘
在GitHub,除了3个联合创始人,我们还雇用了一个全职开发者(Scott Chacon)和一个兼职支持专员(Tekkub)。
我们雇用Tekkub是因为他不但是GitHub的最早用户之一,而且为GitHub上的75个项目(大多数为魔兽世界的插件)积极进行维护,同时在GitHub早期积极地给我们提供反馈。他甚至还在IRC频道里为大家提供帮助,仅仅因为他很享受这个过程。
我认识Scott是在旧金山举办的一次Ruby见面会上,他展示了自己开发的众多基于Git项目中的一个。Scott比会场中的其他人更早使用了Git。在我在自己的Git Binding上fork/exec的时候,他已经开始用纯Ruby实现Git了。对我来说形势已经非常明朗,要么他成为我最强有力的同盟,要么他就会是我最具威胁的敌人。幸运的是,我们在会后一起把酒言欢并成为了朋友。不久之后,Scott开始为我们提供咨询并编写了Gist的全部后台程序。那时我们已经意识到,无须任何的面试或者推荐,我们会不惜一切代价将Scott招至麾下。我们已经了解所有需要知道的信息,并毫无保留地给他offer。
这一次我们得到的经验是,通过考察候选人过去的表现而不是预测未来的表现,会更简单且风险更低。由此得出的一个结论是:如果你打算加入创业公司(为打算创业的人工作),可以在相关的社区参与开源工作。用你的时间和编写的代码证明你就是这份工作的最佳人选。
8. 信任你的团队
没有什么比事必躬亲的上司更让我痛恨的了。5年前,当我还在做图形设计咨询的时候,我有一位客户几乎就是柏拉图式的事无巨细。他坚持让我到他的办公室里,坐在小黑屋里用一台破旧的Mac设计图标、目录,并给泳衣模特照片润色(这部分工作并不是那么糟糕!)。当我在干活的时候,他会从我的面前飘过并厉声道出他的建议。“太红了!你不能把这些字弄的更小一点吗?马上把这些瑕疵去掉!”这些几乎让我陷入疯狂。
这位客户一般在早上会给我安排工作,然后离开去忙他的生意,6个小时以后回来。我会把他交代的内转换成Photoshop操作,并用2倍于机器人的速度弄出更好的设计。他这样的安排,不仅忽视了我的设计能力,同时也是对时间和才能的浪费。
事无巨细地领导风格是一种信任的缺失。治疗这种症状的方法就是,聘请专家并且相信他们的判断。在一家创业公司,事必躬亲地管理会打击士气,而给与信任会鼓舞团队。当一个团队中的人才互相信任并决心做出优秀产品的时候,会取得令人惊讶的成果。
关于Github公司的运作/工作方式,请参阅其员工 Zach Holman 写的三篇文章:
第一篇:《GitHub如何运作:时间并不决定一切》
第二篇:《GitHub如何运作:异步工作》
第三篇:《GitHub如何运作:创新很重要》
9. 你不需要风险投资
最近有很多关于风险投资市场正在发生变化的文章。我不打算假装成这个问题的专家,但我可以肯定像我们这样的web创业公司不需要任何外部资金就可以成功。得出这样的结论,因为我们没有从投资者那里拿过一毛钱。我们开始创办这家公司的时候只有几千美元,在向大众开放的时候就开始盈利并对注册用户收费。
最后,每家创业公司都是与众不同的,唯一能够确定外部投资是否有意义的人就是你自己。也许有成千上万的理由会让你寻找并接受投资,但你必须确保这会将你的利益最大化,因为很有可能你并不需要这么做。我上一次离职的理由之一就是“我的收入不会再增加了”。如果我们接受了投资,我再也不能说出那样的话。
10. 尽可能地开放源码
为了让GitHub能够操作Git仓库,我创建第一个Ruby Git binding。逐渐的,这个库逐渐完善,接着我们面临一个选择:我们应该将它开源还是保持私有?这两个选择都各有利弊。保持私有意味着与基于Ruby的Git服务网站竞争会加剧,选择开源就意味着…