你应该从Github学到什么

转自:http://heikezhi.com/2011/04/03/ten-lessons-from-githubs-first-year/

尽早开始

当Chris和我在07年年底开始搭建Github时,Git还只是一个默默无闻的版本控制系统。当然,Linux内核的黑客们从它诞生的第一天就已经用上它了,但是在这个小圈子之外,很少有开发者将它作为日常的版本管理工具。我了解Git都是拜Dave Fayram所赐,他是我在Powerset的前同事,也是我的好朋友,Dave是个典型的新技术追逐狂人,就我的记忆里,他应该是第一个在Ruby社区推广Git的人。

在那个时候,Git的生态环境还相当恶劣,在1.5版本发布之后,Git才逐渐引起人们的注意,在当时只有repo.or.cz提供Git托管服务,对我来说,它的功能非常有限,也不好用,并且设计的很糟糕。当时还没有商业的Git托管服务,尽管如此,但人们已经开始在各种Ruby聚会上讨论Git,讲述他是多么的酷。但还是有点缺憾,Git的设计目标是让人们能够通过一种简洁的方式来分布式的管理代码,但是对于私有代码,这种方式如何保障代码被安全的分享呢?你唯一的选择就是自己在Unix机器上设置账户,搭建一个ad-hoc解决方案,但这种方式显然不够完美。

然后Github就诞生了,在它诞生的时候还根本就不存在付费Git托管这个市场,我们需要自己来创造这个市场。我非常清楚的记得,当时我告诉人们:”我不期望Github能立即成功,因为git需要一点时间来成长,但是我们会为那一刻做好准备“,chris和我都迫不及待的期待这一切能早点发生,当时我还在powerset工作,而他则通过提供Rails的咨询服务维持生活。选择尚处于萌芽期的新技术,让我们可以不用花费太多,只是利用我们的业余时间就可以创建一家新公司,并且也没什么竞争。

适应你的用户

这是一条似是而非的建议:倾听你的用户,但是不要让他们来告诉你应该做什么。让我稍微解释一下,比方说我们有个用户告诉我们:“GitHub应该提供通过FTP上传项目文档的功能”,但他实际想说的其实是“我需要一种简单的方式来发布项目文档”,但是他们常常会借用现有的技术来描述他们的需求,我们其实可以很容易的按客户的要求实现一个基于FTP的文档上传解决方案,但是我们又多花了点心思深入研究了一下这个需求,最终我们的方案是让用户通过git来发布内容,这个办法即满足了用户的需要又足够简洁优雅。

这里不得不说,另一个对这个概念深有理解的就是苹果公司,我相信有很多苹果用户都希望苹果做一部电话,但是steve Jobs和他的那伙人又顺着这个需求做了更深入的分析然后找出了用户真正需要的:一部外观漂亮,简单好用,并且可以很容易同步的移动设备,然后他们颠覆了整个行业,这就是秘密所在,永远不要给用户他们所要求的,给他们他们需要的

寻找乐趣

我的大学是加州的一个叫Harvey Mudd的小学校,是的,我肯定你从没听过它,但是如果你还记得那些曾在高中时让你非常着迷的美国新闻以及世界报道中关于”最佳大学“的书(是的,你可能没感觉,但我很着迷),你会发现,Harvey Mudd被评为课外作业最多的学校,是的,比MIT还要多,比Caltech也要多。事实证明这是真的,多到我都无法用语言来描述,这给我留下了很多痛苦回忆,包括被复杂又无聊的spring/mass/damper系统所折磨,以及计算一条线缆被双螺旋的磁铁围绕所产生的磁通量等等。我们拼命的学习,非常用功,但是我们玩的也很疯,因为那是唯一可以让我们保持神智正常的方法。

在一个创业公司工作就和这差不多,你就像是在大学,你需要解决许多难以想象的问题,但如果你是和你最好的朋友一道,我相信这会给你留下一段非常美好的记忆。在这样的环境下,你必须学会不时的偷偷懒来保持平衡,过度劳累是个非常危险的现象,培养一个轻松玩乐的氛围,对保持你个人的健康以及公司的健康发展都至关重要。

留意Twitter

我发现Twitter在获取实时反馈方面非常用用,如果网站因为某些原因变慢了,Twitter会立刻告诉我,如果站点在某些国家不能访问了,我也可以通过Twitter及时发现,如果我们刚刚发布了一个新的很受欢迎的特性,通过在Twitter搜索用户的反馈也可以让我稍微的自我陶醉下。

现在人们有种将Twitter变成出气筒的趋势,网站上的任何一个小Bug通过Twitter都有可能被放大成一场大灾难,并且他们还会给你加上一个非常让人泄气的”FAIL“标签。不过值得注意的是,通过关注这些发泄不满的Tweet,可以很好的帮助我们确定短期的Bug修复列表,我们在Twitter上创建了一个GitHub账号来专门回应用户的负面反馈,这种方式很有效的消除了很多用户的不满。

如果你有iPhone,我强烈的推荐Summizer这个来自Fanzter, Inc的应用,这个应用让搜索,查看和回应tweets变得无比简单。

随时部署

在第一届RailsConf上,我有幸听到Martin Fowler关于交付的很赞的演讲,他举了一些很不错的例子来阐述敏捷开发,我临时借用一下。

想象你接到一个任务让你制造一把电脑控制的枪,它需要精准的命中50米之外的目标,这是唯一的需求。一种方式是打造一个复杂的机器在射击之前对一切不确定的参数进行测量(风速,海拔,温度等等),然后瞄准目标发射。另一种方法是打造一个简单一点的机器定期发射,然后检查那些子弹是否命中了目标,再根据结果实时调整并准备下一次射击。这两种方式的不同在于,后者认识到子弹非常便宜。因此在第一组人完善他们的风力检测装置时,你应该已经完成了你的简单武器系统并成功命中了目标。

在Web开发的世界中也是如此,目标就是你网站的终极呈现,而子弹就是每一次部署,以及你收集用户反馈的机制。Web应用的第一年往往很神奇,你的用户都是些喜欢尝鲜的人,他们往往希望每几周就来个新特性,即使这会造成几小时的宕机,只要你能保证这些特性慢慢成熟起来,他们还是会原谅你。在Github的早期,我们曾经在一个下午部署了10次,因此我们一直都在朝着那个终极目标一点点靠近。

一定要抓住第一年的好时机,一旦一些非常重要的客户开始使用你的产品,你就不得不多加小心不要让你射偏的子弹打到他们的身上,再往后,宕机或者有漏洞的部署还会造成经济损失,这时你就需要依靠一些建模工具来预测你的目标了。

办公室不是必需的

GitHub的4个全职员工都在旧金山地区,但我们还没有自己办公室,不过我们也不是完全通过虚拟空间来联系,事实上,每周你都可以在北边海滩的一个咖啡馆看到我们围坐在一张用2个4平方的小桌拼起来的像是老式的折叠板那样的方桌前。这不是Google campus,但是租金真的很便宜,并且饮料尝起来也不错。

其实我们也不是不想找个地方安顿下来,我们几乎已经租下了一个老酒吧,但是最后我们还是觉得没必要这么匆忙,我们想再等等,直到找到一个完美的办公室,而在那之前,我们就可以将省下来的钱投入公司运营,或者放入我们自己的口袋。至少到目前为止,我对我的沙发和咖啡馆还算满意。

当然,如果没有37signals的在线聊天室应用campfire,以及一个非常难找但是相当好用的Mac桌面客户端Propane,这一切都将变得不可能,这里强烈推荐下这两个工具。

使用开源进行招聘

除了Github的3个cofounder之外,我们还招聘了一个全职的开发者(Scott Chacon)和一个兼职的技术支持(Tekkub)。

我们雇佣Tekkub是因为它是Github最早期的用户之一,并且他在Github上维护了超过75个项目(这实在是太加分了),并且他还非常勤快的向我们发送反馈,甚至在IRC频道上帮我们解答用户提问,而他做这一切只是因为他喜欢。

我第一次遇到Scott是在旧金山的一次Ruby活动上,他演示了他的大量围绕Git的项目中的一个,Scott是这个房间里使用Git时间最久的。他当时正在为一个基于Ruby的Git实现工作,而我也正在实现基于Git binding的Fork/exec,很显然,他属于那种既可以成为帮助你的盟友,又可以成为你非常危险的对手那种人。幸运的是,活动结束后我们找了个地方喝了几杯,然后就成了好朋友,不久之后,Scott就开始为我们提供咨询服务,并完成了Gist的后台架设,然后我们就知道我们可以全职雇佣Scott了,不需要面试和引荐,因为我们已经非常了解彼此,我们毫不犹豫的就给他了一个offer。

这件事教给我的一课就是,最简单也是风险最低的招人办法,就是基于他的过去来对他的将来进行评估,这个方法反过来也成立:如果你想要找一家创业公司工作(或者其它你喜欢的),你需要先对它周边的社区做点贡献,用你的时间和代码来证明你就是那个工作的最佳人选。

信任你的团队

没有什么比微管理来的更让我痛恨了,还记得5年前我还在做设计咨询的工作时,我有个在Platonic附近的客户,他就非常喜欢这种微管理,他坚持要我去他的办公室,然后坐在一台老式Mac后面设计各种标签以及分类,还有给一大堆穿着泳衣的模特照片润色(这个倒是不错),然后在我工作时,他会时不时在我身边徘徊并发号施令,”太红了!你能让文字更小点吗?把这块的瑕疵处理下吧!“,这实在很让人受不了。

这个客户其实只要每天花点时间把任务布置给我,然后去忙他自己的事情,过5,6个小时再回来看看就行了,我相信如果用这种方式,我的设计肯定会比现在好很多,并且只需要现在一半的时间就够了,但是他却把我当成一个需要根据他的指令来操作Photoshop的机器人,这严重压制了我的才能,也浪费了时间和金钱。

这种事无巨细的微管理其实是因为缺乏信任,解决的方法就是招聘更聪明的人并充分信任他们的判断。在创业公司,你可以使用微管理来减少动力,也可以通过給予信任来增强动力。当一群足够聪明并且彼此充分信任的人聚在一起,你就等着神奇的事情发生吧。

你不需要风险投资

最近有许多文章都讲到风投行业正在发生的改变,我不想假装成这方面的专家,但是我已经认识到对于像我们这样的Web创业公司,可以完全不需要外部的投资来取得成功,我清楚知道这一点,因为我们从来没有从投资者那里拿一分钱,我们自己筹集了几千块作为启动资金,并且在我们开放我们的收费和订阅计划的第一天我们就已经盈利了。

最后,每个创业公司都不尽相同,因此你只能靠自己来决定是否需要外部的投资,可能会有一大堆的理由驱使你去寻找和接受投资,但是你应该确保你做得事情是你最感兴趣的,因为很有可能你根本就不需要那样做。我可以辞掉我最后一份工作的其中一个原因就是我可以对他们说”我已经尽责了“,但是如果我拿了别人的钱,我就不能再那么说了。

开源所有你能开源的

为了让Github能够同Git仓库交互,我创建了第一个Ruby的Git绑定。最终,这个库变的相当完备并且我们面临一个选择:我们是将它开源还是继续保持私有?两种方式都各有利弊。保持私有意味着基于Ruby的Git托管服务的竞争门槛会高一些,但是开源它则意味着。。。

注意:这就是原帖结束的地方,我会尽量在接下来写一篇阐述我们的开源哲学的文章,但我保证这个等待绝对足够漫长。

你可能感兴趣的:(github,项目管理)