Facebook独特的开发和发布软件的方式

产品经理与工程师的比例为1比7。浓厚的工程师驱动文化;项目需要的资源都是绝对自愿的;运维团队是逐渐发布代码上线的;最小的级别只有6台服务器

Facebook独特的开发和发布软件的方式

我对Facebook的运作方式一直着迷。这是一个很独特的环境,不容易复制(他们的体系并不适合所有的公司)。我和Facebook工作的许多朋友们交流过他们开发和发布软件的方式,下面是交流笔记。

似乎还有其他人对facebook有兴趣……比如这里以及其他公司的相关讨论。 然而,Facebook对自己的内部流程讳莫如深。他们的工程团队经常发布笔记介绍各种新的功能和内部系统,但都是一些“是什么”类型的文章,对如何开发却不怎么讲。因此对于外部人员而言,了解Facebook是怎样远比其他公司高效地创新和优化其服务,并非易事。为了更多地了解Facebook的运作,我花费数月时间收集了下面这些笔记。为了尊重来源的隐私,我删去了所有人名和具体功能与产品的名字。另外又等过了6个多月才对外公开,所以它们肯定会有些已经过时。我希望发表这些笔记有助于大家了解Facebook是怎样致力于将决策下放而同时又不至于陷入混乱的。Facebook这样做的结果以及其产品是否成体系很难评判,我认为并希望许多面向消费者的互联网公司能从中有所裨益。

非常感谢那些帮助我整理这篇文章的facebook的朋友们。同时也感谢提出指正的reddit网友epriest 和 fryfrog 。

笔记

截止到2010年6月,Facebook有将近2000名员工,10个月前只有1100名,一年之间差不多翻了一番。

两个最大的部门是工程和运维,每个部门大概都是400~500人。这两个部门人数大约占了公司的一半。

产品经理与工程师的比例大约为1:7到1:10。

每个工程师入职时,都要接收4~6周的培训,通过修补bug和听高级开发工程师的课程来熟悉Facebook。约10%的受训者无法通过,并被请出公司。

培训结束后,每个工程师都可以接触线上的数据库(更大的权力意味着更大的责任,也有一份“勿做清单”,写明那些行为会导致被开除,比如分享用户的隐私数据)。

[根据网友fryfrog意见修改] 有非常牢靠的防范体系,以免内部人员做恶。如果应要求需要以其他人的身份做事,必须将原因记录,并接受严格审查,此外都是严厉禁止的。

每个工程师可以修改Facebook的任何代码,随时可以签入(check-in)。

浓厚的工程师驱动文化

“产品经理基本可以被忽略”,这是Facebook一名员工的原话。工程师可以修改流程的细节,重新安排工作任务,随时植入自己的想法。(作者原注:我就是产品经理,当然对这一点特别关注。其实从下文可以看出,Facebook的文化其实全面吸收了产品管理实践,他们不是忽视产品管理,而是创造了一种人人对产品负责的文化。)

在每月的跨部门会议上,由工程师来汇报工作进度,市场部和产品经理会出席会议,也可以做些简短的发言,但如果说得太多,很可能就会被打小报告。他们确实想让工程师来主导产品的开发,对自己的产品负责。

项目需要的资源都是绝对自愿的

产品经理游说工程师,让他们对自己的想法产生兴趣。

工程师们决定开发那些让他们感兴趣的特性。

工程师跟他们的经理说:“我下周想开发这5个新特性”。

经理通常会尊重工程师的选择,可能有时会让他优先完成一些特性。

工程师负责所有的特性——前端JavaScript/后端数据库代码以及之间所有部分。如果需要得到设计人员(公司内部设计团队很小)的帮助,需要先让设计人员对你的想法产生兴趣。架构师之类的也是一样。总体来说,工程师要完成所有的任务。

对于某个特性是否值得开发的争论,通常是这么解决的:花一个星期的时间完成,并在小部分人群中(如1%的内华达用户)进行测试。(刘江注:蒋长浩介绍,实际操作时通常会选择某些服务器上的用户进行测试。)

工程师总是希望解决基础设施、可扩展性以及其他难题,这能获得声望和尊敬。他们很难对前端项目或UI设计产生太大的兴趣。这与其他公司工程师喜欢做前端并向用户吹嘘“看,这是我做的”的情况,可能正好相反。在Facebook,后端任务,比如新的feed算法,广告投放算法,memcache优化等等,是工程师真正感兴趣的。

所有的代码修改必须经过审查(通过一个或多个工程师),但news Feed是个例外,因为太重要了,Zuckerberg会亲自审查所有改动。[根据网友epriest意见更正]

所有的修改至少要被一个人审核,而且系统可以让任何人很方便地审查其他人的代码,即使没有得到邀请。签入未经审查的代码将被视为恶意行为。[根据fryfrog]

工程师负责测试、代码修复和维护自己的项目。有一些单元测试和集成测试框架,但只是偶尔使用。

还是有QA环节的,只不过没有正式的QA部门。每个办公室或通过VPN连接的员工会使用下一版的Facebook,这个版本的Facebook会经常更新,通常比公开的早1~12小时。所有的员工被强烈建议提交bugs,而且通常会很快被修复。[根据fryfrog更改]

对于很奇怪只有很少的qa或自动测试的说法,facebook员工这样回复:“大部分工程师都能写出基本没有bug的代码,只是在其他公司他们不需要这么做。如果有qa部门,他们只要把代码写完,扔给他们就行了。” [作者原注:这当然是主观之见,我加上这一条是为了与其他公司的标准实践做比较。]

[epriest对上一条的意见] 我们有自动测试,包括代码发布前必须要通过push-blocking测试。我们不相信“所有的工程师都能写出没有bug的代码”,更不可能将公司基于这样不靠谱的理念。

对于很奇怪缺少产品经理的影响和控制的回复:产品经理是很独立的和自由的。具有影响力的关键是与工程经理们搞好关系。需要大致了解技术,不要提一些愚蠢的想法。此外,确立路线

Facebook有大约60000台服务器

有9个代码发布级别([epriest]这些级别并不都是全局的,只有三个全局:p1=内部发布,p2=小规模外部发布,p3=完全外部发布。其他6个是辅助性的,包括内部工具、视频上传等)

最小的级别只有6台服务器

比如,星期二的代码发布会先发布到6台服务器上(级别1),运维组会观察这6台服务器,保证代码正常工作,然后再提交到下一级

如果发布出现了一些问题(如报错等等),那么就停止下一级的部署,提交出错代码的工程师负责修复问题,然后从头继续发布。

所以一次发布可能会经历几次重复:1-2-3-fix,回到1,1-2-3-4-5-fix,回到1,1-2-3-4-5-6-7-8-9

运维团队是受过严格训练,倍受尊敬,而且很懂业务的。他们的工作包括分析错误日志,负载和内存使用状态等等。还包括用户行为。比如,如果一个新的发布改变了用户使用某些Facebook特性的百分比,运维团队会从数据中看到,可能因此停止发布,进行调查。

代码发布期间,运维组使用基于IRC的呼叫系统,如果需要,可以通过Facebook/email/irc/im/sms找到每一个工程师。对运维组不做回应会被公开批评。

代码一旦发布到第9级,并且稳定运行,就算发布成功了。

每周发布时如果一个特性没有按时开发完成,也没什么大不了的(除非有严重的外部依赖),特性通常都是完成后再发布。

如果被svn指责、公开批评或项目经常延期,工程师就很可能被开除。“这是一个高绩效的文化”。不够高效或者不够聪明的员工会被剔除。经理们会在6个月的时间里观察你表现,如果不合格,只能说再见。每一级都是这个待遇,即使是C级别和VP级别,如果不是特别高效,也会被开除。

[epriest]代码中有bug不会开除。只在发布时要求加入自己的修改代码,却在出错时没有提供支持(而且也没有让别人替你),才会被开除。

[epriest]被责骂不会导致解雇。我们在这方面特别宽容。大部分高级工程师都或多或少犯过一些严重的错误,包括我。就我所知,没有人因此被解雇。

[fryfrog]我也没有遇到过因为上面提到过的犯错而被解雇。有些人犯了错,他们会非常努力地去修复,也让其他人得到了学习。在我看来,公开批评比用解雇来吓人更有效。

我非常感兴趣的是,Facebook的开发文化接下来会怎样演变,当公司发展到几千员工的时候,这种文化还能继续扩展吗?

你怎么看?开发人员驱动的文化在你们公司能推行吗?

(csdn注:hacker News、Slashdot和Reddit上的讨论也很有价值。)

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年5月3日 14:49:49
下一篇 2024年5月3日

相关推荐

  • dft计算方式用c语言表达,dft运算

    DFT的计算步骤是什么? 1、DFT标准算法——通过相关性计算 相关性算法成立的条件是基本函数正交。 2、DFT的运算为:式中 由这种方法计算DFT对于 的每个K值,需要进行4N次实数相乘和(4N-2)次相加,对于N个k值,共需4N*4N次实数相乘和(4N-2)(4N-2)次实数相加。 3、将输入序列分成偶数和奇数下标两个子序列。对这两个子序列分别进行递归调…

    2024年5月19日
    4300
  • 8255输入输出实验c语言程序,8255方式1输出实验

    求用汇编语言编写一段程序实现让步进电机正转90度后,暂停5秒后再反转90… 1、首先,需要设置步进电机的驱动模式为双向旋转模式。在PLC的程序编辑器中,创建一个新的程序,定义步进电机的控制参数,如脉冲频率、加减速度等。编写正转控制程序。 2、按你程序的环形分配,步距角是8度,这样的话, 你走50步后停止电机,等待5秒,延时或定时器控制都可以。时间…

    2024年5月19日
    4100
  • linux密码加密方式,linux数据加密

    linux下文件加密有哪些方式,能通过系统调用函数把加密的文件内容读出… 应用程序调用linux内核加密函数采取以下步骤:内核模块加载:应用程序需要加载相应的内核模块,以使用内核提供的加密函数。通常,这需要在编译应用程序时链接内核模块,并在运行时使用insmod或modprobe命令加载模块。 linux文件加密需要分五步进行,下面是具体介绍: …

    2024年5月19日
    3900
  • linux分屏方式显示2015,linux终端分屏

    如何让电脑桌面分为几个区域显示? 1、电脑上如何实现分屏 电脑分屏 每天一个小知识 使用电脑的时候,我们经常会打开多个窗口,通常情况下,这多个窗口会层叠显示;像之前一直用鼠标拖拽分屏,不停地切换窗口,实在有点麻烦。 2、可以通过以下两种方法将电脑的屏幕分成两个工作区:方法一: 打开Windows任务视图,选择要在其中显示另工作区的应用程序窗口。 单击应用程序…

    2024年5月19日
    3600
  • java多态的实现机制,java多态的实现方式以及各自的特点

    java实现多态有几种方式?分别是什么? 1、多态实现的三种形式是虚方法、抽象类、接口。虚方法可以给父类中的方法一个实现,虚方法必须有实现部分,哪怕是空实现。 2、多态可分为:编译多态:主要是体现在重载,系统在编译时就能确定调用重载函数的哪个版本。 3、你好,很高兴回答你的问题。java的多态是通过继承、重写、重载来实现的。同一个父类的多个子类,通过各自重写…

    2024年5月18日
    5600
  • 如何将excel加入到打开方式中,excel怎么添加到开始菜单

    怎么用excel方式打开(如何在打开方式里添加EXCEL程序) 具体方法如下:文本文档-右键-打开方式-选择默认程序;然后点浏览找到Excel的应用程序,双击打开。ProgramFiles-MicrosoftOffice-Office15-EXCEL.EXE如果打开方式中的其他程序中有Excel(2013)。 演示所用的操作系统为windows10 64位,…

    2024年5月18日
    4800
  • java如何让线程运行,java线程实现几种方式

    java中一个线程启动后如何使CPU立即分配给它使它运行 1、线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask);dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2 ,以此类推。 2、每个…

    2024年5月18日
    3300
  • linux系统的安装方式有哪些,linux系统的安装和常用命令

    怎样安装Linux系统? 第一步:选择Linux发行版Linux系统由众多发行版组成,不过最常用的就是Ubuntu、Fedora和Debian等。它们各自拥有自己的特点和用途,因此在进行Linux安装之前,先应该选择一款适合自己需求的发行版。 网络安装:通过网络下载Linux系统镜像文件,然后通过网络引导计算机进行安装。虚拟机安装:在已安装虚拟机软件的计算机…

    2024年5月18日
    3900
  • c语言读写方式,c语言读写方式有哪些

    c语言怎么对程序内存进行读写 正常情况下,都是分配内存空间 然后读取 char *buf = malloc(123);再访问buf 在嵌入式或者单片机中,有时会访问绝对地址 unsigned char * p = (unsigned char *)0xB1234456;//内存地址值 然后通过*p访问该地址。 要读取内存数据的话,只能通过指针,你只能通过自己…

    2024年5月17日
    2800
  • java读取当前jar文件中文件,java读取文件的几种方式

    jar包里面的代码如何读取jar包中的配置文件? A.jar,这个A在lib目录里面 在A里面放置了一个配置文件test.properties,就放在jar的根目录下。A.jar |___test.properties 在M中有一段代码回去读取这个A.jar里的配置文件,简单一点就用下面这句话来调用。 在目前的微服务和容器部署的SpringBoot坏境下,我…

    2024年5月17日
    3900

发表回复

登录后才能评论



关注微信