• 揭秘Facebook是如何开发软件的
    时间:2012-03-19   作者:佚名   出处:互联网

    Facebook的工作方式让我着迷。那是一个非常独特的工作氛围,无法复制(也并不适用于其它公司)。下面是我从很多在Facebook工作的朋友那里搜集到的关于这个公司如何开发和发布软件的只言片语。

      看起来对Facebook感兴趣的大有人在。这个公司以程序员为主导的企业文化受到人们的极大关注,很多公司都在努力实现这样的企业文化。尽管Facebook对于其内部的开发过程讳莫如深,但他们的技术团队还是会对其新功能和一些内部系统做一些公开的说明,可这些说明通常是关于“是什么”之类的文章,而不是关于“如何做”的…

    所以,作为一个外人,你很难知道Facebook是如何做到比其他公司更有效的对其产品进行改进和优化。我作为一个外部人士,尝试着去了解更多的关于Facebook内部是如何运转的信息,我把这几个月的观察收获进行了汇编。出于对于信息来源者的隐私保护,我删除了所有涉及到的人名和特定产品特征/产品名称。而且我把这篇文章延迟了6个多月才对外发布,所以,文章中所涉及的内容都不会太新太敏感。

    我希望这篇文章能给那些试图看清Facebook如何做到决策权“下放”而不引起管理混乱的人增加一些亮光。你很难评论Facebook这种做法的好坏,以及Facebook的产品质量跟这种做法的关系。我想、也希望如此多的互联网消费型公司都能从Facebook公司的例子中学到有用的知识。

    非常感谢那些在Facebook内部工作、帮助我得到这些信息的人,同时也感谢像epriest 和fryfrog这样对本文进行校正和修改的人。

    语录:

    ◆ 截止到2010年六月,这个公司的员工已经接近2000名,而在此10个月之前只有大概1100名。一年内几乎翻了一番!

    ◆ 公司最大的两群人是技术开发人员和实施人员(Ops),各自有400~500人。这两部分人占去了公司构成的50%。

    ◆ 产品经理跟技术人员的比例大概是1:7到1:10。

    ◆ 所有的技术人员都要通过4到6周的“新兵训练营”培训,培训中他们通过修改bug来了解Facebook系统,听资深/终身司职技术人员做演讲。每次训练营培训大概会有10%的学员不能通过考核,会被淘汰出公司。

    ◆ 新兵训练营后,所有的技术人员都要接触真实现场数据库(先会有个专门的讲座,关于“责任越大,能力越大”,还有一个明确的“违反即开除”的清单,例如泄漏私人信息)。

    [感谢fryfrog的修改]”公司有很多非常有效的防护措施来防止内部拥有这种能力的人做出各种恐怖的事情,”,如果你不幸成为需要做这种危险操作的人,你需要登记原因,而且会被密切的审查。一点疏忽都不能有,否则你完了。

    ◆ 任何技术人员都可以修改Facebook代码库里的任何一段代码,并按自己的意愿提交回代码库里。

    ◆ 非常强势的技术人员为主导的文化。“产品经理在这里基本上没有什么用处。” —— 引自一位开发人员的话。程序员人员可以在中途修改产品规格文档,重新调整要做哪个项目,随时都可以按自己的想法加入新的功能特征。

    [编辑评论]这篇博客的作者是一位产品经理,所以这段文字着实让我意外。你会在余下的语录里看到,Facebook的企业文化对产品的管理工作是十分重视的。所以,产品管理这个角色并不是可有可无的。并且,这个公司的企业文化是让“每一个员工”都感到对产品有责任。

    ◆ 在每月的跨团队会议中,进度报告由开发人员提交。产品市场和产品管理部门会出席这些会议,但如果在会上他们说了太多的话,会后领导会收到会议反馈“产品部门在会上说的话太多了。”他们真的希望开发人员能公认的完全控制产品,成为公司开发的产品的主要主导成分。

    ◆ 每个项目的人力调配完全是根据自愿。

    ◆ 产品经理要游说开发人员,让他们对自己的想法感兴趣。

    ◆ 开发人员选择他们听起来感兴趣的任务。

    ◆ 开发人员会对他们的经理说:“本周我打算做这5块工作。”

    ◆ 技术经理会尽可能的由着各程序员的喜好行事,但有时会要求某项工作必须先做。

    ◆ 程序员自己把握所有的技术特征 —— 前端的javascript,后端的数据库脚本,以及所有这之间的东西。如果他们需要设计人员的帮助(只有少数几个专职设计人员),那他需要找到一个对他们的项目感兴趣的设计师。找架构师也是如此。但通常,程序员会自己处理所有所需。

    ◆ 一个功能特征是否值得做,通常的判断方法是用一周快速实现,然后在抽样用户里测试它,例如找1%的内华达州用户进行测试。

    ◆ 开发人员通常喜欢关于基础架构,系统扩展性,“难题”等的任务 —— 这些都是能产生威望的地方。你很难让一个程序员对前端项目或用户界面工作提起兴趣。这跟你在一些面向客户的业务公司里发现的现象正好相反,那些公司里所有人都喜欢干客户能接触到的东西,他们会指着某一个界面功能说:“这是我做的”。在Facebook,后端的工作,例如新闻feed算法,广告定位算法,memcache优化工作等,都是程序员们的抢手工作。

    ◆ 对某项具有高优先级的功能有影响的修改(例如新闻feed),在代码提交合并前要经过代码审查。新闻Feed非常的重要,任何的改动都要经过Zuckerberg(Facebook创始人,总裁)亲自审查,但也有例外的时候。

    [纠正——感谢epriest]“任何的代码的修改都必须进行强制性的代码审查(由一个或多个技术人员执行)”。我想这篇文章中说的是Zuck 本人并不会亲自审查每一处变动。“

    [更正感谢fryfrog]”所有的代码的变更都会经过至少一个人的审查,这套系统让其他人很容易的查看、审查你的代码——即使你没有邀请他。想让未经审查的代码进入代码库属于一种蓄意的不良行为。”

    ◆ 没有QA的事儿,完全没有。开发人员完全负责代码的测试,bug修改,后期维护。有一些单元测试和集成测试的框架,但很少人会用它们。

    [更正感谢fryfrog]”我要说的是,我们实际上是有QA的,只是不是一个正式的QA团队。每一个在办公室或能连接到VPN的员工都能看到一个包含所有的变更内容的、下次将要对外发布的网站版本。这一版本的网站更新的十分频繁,你能比世界上其他人提前1~12小时看到这个即将发布的版本。公司鼓励所有员工积极的报告发现的任何问题,对于问题会做出快速的应变。”

    回复:很吃惊这里没有QA和自动单元测试——“大部分的开发人员都有能力写出没有bug的代码。只是在大多数的公司里他们没有动机主动去达到这种境界。当有QA部门存在时,你会轻松的把代码抛给他们,让他们去发现错误。”[编辑:请注意,这只是一种主观论断,我之所以把这样的话语收录到这篇文章里,是因为它跟我们其他公司里标准软件开发方法形成鲜明的对比。]

    [更正感谢epriest] ”我们有自动化测试,包括每次软件发布前必须通过的“push-blocking“测试。我们根本不相信所谓的”大部分的开发人员都有能力写出没有bug的代码“的说法,更别说一个公司会接受这种观点了。”

    回复:很吃惊产品经理会没有影响力/控制权——产品经理有很大的独立性和自由度。影响力的产生关键在于和技术经理建立好良好的关系。需要有足够的技术知识来避免自己提出愚蠢的建议。除此之外,产品经理建立开发路线/Backlog不需要任何的批准或通过任何的审查。产品经理的数量相当较少,但他们都认为对公司里非常重要的、自己感兴趣的一个区域负有重要的责任。

    ◆ 一般情况下,所有提交的代码会每周一次的打包发布(周二)。

    ◆ 如果努力些,本周做的修改也可以在同一天发布。

    ◆ 周二程序发布时,所有在本周有提交过代码的程序员都要求在现场留守。

    ◆ 在发布开始前,所有的开发人员的需要在特定的IRC频道里等候“点名“,如果没到的话,将会得到一次公开的批评。

    ◆ 实施组发布程序上线是一个逐步的过程

    ◆ Facebook大概有6万台服务器

    ◆ 程序的发布有9个集中操作的规模级别

    [更正感谢epriest]”有几个级别的发布并不是集中式的。有三个阶段是集中部署的(阶段1 = 内部发布,阶段2 = 小规模外部发布,阶段3 = 完整外部发布)。其它6个阶段是辅助操作,包括内部工具部署,视频部署等。”

    ◆ 最小层级的部署只涉及6台服务器

    例如,周二的新版本发布会从6台服务器开始(级别1),实施组观察这6台服务器,确保它们都能正常工作,才能推进到下一级别发布。

    ◆ 如果发布过程中出现问题(例如,抛出错误信息等),发布会终止。提交这些导致错误的程序的程序员会被叫来修正问题。然后发布会重新从级别1开始。

    所以,发布有可能会反复重复几个级别: 1-2-3-修复。回退到 1. 1-2-3-4-5-修复。回退到 1. 1-2-3-4-5-6-7-8-9。

    ◆ 实施组训练有素,令人敬佩的,公司很重视。他们的服务器测评是基于常见错误日志、负载&内存使用统计——包括用户行为统计。例如,如果新推出的发布导致了用户使用Facebook功能特征的百分比下降,实施组能在他们的统计工具里看到这种变化,他们会停止这一版的发布,调查其中的原因。

    ◆ 发布过程中,实施组使用以IRC为基础的调度系统,用它可以在需要的时候通过Facebook, email, IRC, IM, 以及短信找到相应的人。对实施组的呼叫不响应的会受到公开批评。

    ◆ 一旦程序部署到级别9,稳定下来,这周的发布就是完成了。

    ◆ 如果在特定的周期里没有足够的时间把功能开发出来,这个问题不大(除非有硬性的外部依赖)——功能会在完全完成后打包发布。

    ◆ 受到svn相关批评,公开批评,或经常的误工期会导致开发人员被辞退。“执行力非常的强“。没有效率或不是非常有才的人会非常的扎眼。经理通常会对低效能的员工观察6个月,然后说”我们无能为力,你不能很好的接受公司的文化。“对公司各个级别的人都是如此,即使是C级别和VP级别的人,如果他们不能做到非常的有效率,也会被迅速的辞退。

    [更正感谢epriest]“员工不会因为制造了bug而被开除。他们只会因为当有他们的代码被发布,有问题需要他在现场出现,但却没有出现来提供支持时被开除(还没有发现有人遇到这种情况)。“

    [更正感谢epriest]“被批评不会导致你被开除。对这样的事情我们受到了极大的宽容,大多数的资深程序员都曾干过至少一件恐怖的事,包括我。据我所知,没有人因为犯这样自然的错误而被开除。“

    [更正感谢fryfrog]我也没有听说过有任何人像本文中提到的那样因为犯错误而被开除的。我知道有人曾疏忽的把网站给弄瘫了。他们努力的修复遇到的问题,每个人都从中学到经验。被公开批评要比被开除恐怖的多,我的感觉。

    观察Facebook的软件开发文化发展过程是一件非常有趣的事情——特别要注意的是随着公司的迅猛扩展,这种文化发展能否跟得上步伐。

    你有什么样的想法?这“以程序员为主导的企业文化”在你的公司里也适用吗?

    网友留言/评论

    我要留言/评论

    相关文章

    作为一个创业者,如何在创业过程中保持清醒:我的一个曾经研究创业学的朋友最近也创建了他自己的公司,在创业学术领域有过多年经验和研究的他最终决定离开象牙之塔而踏上自己的创业之路。两周前,我们在一起吃饭,或许是以前职业的原因,他问了我一个问题:创业者如何保证在创业过程中,不迷失在自我中心里而无法自拔?
    中国年轻人创业若不拼爹难扛12个月:之前十年是经济飞速发展的时期,也是房价上涨最快的十年。未来十年,一系列的问题等待我们解决。《金证券》与搜狐财经强强联手,专访财经风云人物,畅谈税收、民营经济、收入、看病、钞票、经济、股市、中国、创业、住房话题。
    如何成为一个优秀的产品经理,来自Google内部人士的建议:众所周知,Google是一个工程师文化很浓的企业,甚至可以说这种文化已经深入其企业基因。但是作为一个拥有几千人的公司,其管理同样非常出色。那么在Google如何才能成为一个优秀的产品经理呢?一些来自Google的前产品经理与工程师在Quora上就这一问题进行了探讨。由于是Google这样的一个优秀的高科技公司,这些实践经验对于其它科技公司来说也具有参考意义。
    推荐免费下载精美网站模板的25个网站:这篇文章向大家推荐25个免费下载网站模板的网站,这些网站分享了众多精美的网站模板,您可以免费下载使用,相信这些精美的 网站模板 既能够帮助您节省大量的时间和精力,又能有很满意的效果,希望这些网站能帮助到您。
    互联网创业者应该知道的一些新idea:现在不少人天天上网,看新闻、发微博、聊天、收发邮件、购物、组织社交、看电影看美剧、找吃找喝……似乎总离不开那几个网站:新浪、搜狐、腾讯、网易,土豆、优酷,人人、开心,淘宝、京东,再加个大众点评什么的,似乎少了点新鲜感——这些成熟的、超大型的、人所皆知的网站就像超大型的百货公司,商品琳琅满目,能满足绝大部分人的日常需求;但正如寻求新鲜和与众不同的人们仍会穿街过巷找寻另类的潮流小铺那样,没有边际的互联网上还有n多让我们大开眼界的网站,它们或者不成熟,或者默默无闻,暂时还不能引起你的注意,但它的idea能让你耳目一新,给你一个不同的角度去看互联网、用互联网,这些才是神奇的网站。
    技术路线的选择重要但不具有决定性:最近微软在技术上连续有大动作,在PDC上发布了Windows Azure云计算平台,预告了Visual Studio 2010、.NET 4.0和C# 4.0。如果放在几年前,我相信微软粉丝们一定是欢声雷动,不过这次情况有点不太一样,在网上看到有人在抱怨微软技术更新速度太快而且四面出击,还有人扬言要改弦更张,投奔Linux或者Java阵营。我本人也收到一封来信,写信人大意是说自己大学时选择.NET路线,一路跟下来很辛苦,2.0还没学好,人家已经4.0预览了,感到很困惑,问我该怎么办。老实讲,这样的问题我无法回答,每个人具体情况不同,所应该采取的态度和解决方案也不同。从我自己来讲,其实技术路线问题也曾长时间地困扰我,所以我想把我现在的一些想法摊出来跟大家分享一下。罗列如下:
    给计算机系应届毕业生的一些建议:我最近参加了 Big Ivy University (BIU)的招聘会,和大约50位计算机专业的本科生交谈过。他们希望能到我的公司 10gen 来实习或者正式工作。我确信他们之中有很聪明的,但是他们没有学会如何把自己和别人区分出来。在我看来这些学生有类似的建立,类似的着装,类似的语言来和我聊天。计算机系的同学们,我想告诉你们如何让自己在招聘会上脱颖而出。假如你是一个很棒的黑客,你需要告诉我们,并且把这一点写入简历。否则我们找不到你!
    国内首个HTML5应用开发平台AppCan开启限量内测:2月15日消息,国内首个HTML5应用开发平台AppCan在经过1年多时间的研发和测试之后,今天向广大开发者开放内测,开发者可以登录AppCan内测专题页面领取邀请码。本次内测为限量测试,一共只发1000个邀请码,大家抓紧哦。
    Facebook 大会:扎克伯格的14句话:4月22日,据外国媒体报道,Facebook F8开发者大会近日在美国旧金山举行。创始人兼CEO马克.扎克伯格出席会议并作主要演讲和声明,以下是大会中总结的14个要旨。
    2011年最具影响力的16个开源项目:OpenLogic近日发布了2011年度开源软件趋势分析报告,Openlogic报告重点分析了现今流行以及活跃的用于企业基础架构中的核心应用程 序。同时报告将热门的开源项目主要分为了Web应用和应用服务器、应用程序框架以及数据库和大数据三大类别。以下为OpenLogic评选出的2011年 度最具影响力的16个开源项目。