思考,思考自己、思考别人! #ps -ef | grep oracle 修身、齐家、治国、平天下!

Facebook怎样开发软件:工程师驱动的文化

上一篇 / 下一篇  2011-01-19 12:09:20

我对Facebook的运作方式一直着迷。这是一个很独特的环境,不容易被复制(他们的体系并不适合所有的公司,虽然他们努力尝试过)。下面是我和Facebook的许多朋友们关于他们如何开发和发布软件所做交流的记录。
M~vNj0
K'y9u!?B!sN.ci0然而,Facebook对自己的内部流程说得很少。他们的工程团队经常发布笔记介绍各种新的功能和内部系统,但对如何开发却不怎么讲。因此对于外部人员而言,了解Facebook是怎样远比其他公司高效地对服务进行创新和优化并不容易。为了更多地了解Facebook的运作,我花费数月时间收集了下面这些文字。为了尊重隐私,删去了所有人名和具体功能与产品的名字。另外又等过了6个多月才对外公开,所以它们可能会有点过时。我希望发表这些记录有助于大家了解Facebook是怎样致力于将决策下放而同时又不至于陷入混乱的。无论 Facebook的结果怎样,产品是否成体系,我认为并希望许多面向消费者的互联网公司能从中有所裨益。
6K c];[,w0
I;?6w!f;LIMG5u};p0非常感谢那些帮助我整理这篇文章的Facebook的朋友们。同时也感谢提出指正的Reddit网友。
J(XK#]l-t`051Testing软件测试网gsJwnjJ4e$d
记录:
d%G`E\ k0
/|%H%R P~?b0    * 截止到2010年6月,Facebook有将近2000名员工,10个月前只有1100名,一年之间差不多翻了一番。
Ay9e`4RBd0    * 两个最大的部门是工程和运维,每个部门大概都是400~500人。这两个部门人数大约占了公司的一半。
[;tv7qW L*O0    * 产品经理与工程师的比例大约为1:7到1:10。51Testing软件测试网~rY/g/W1}dz S z#Z
    * 每个工程师入职时,都要接收4-6周的培训,通过修补bug和听高级开发工程师的课程来熟悉Facebook。约10%的受训者无法通过,并被请出公司。51Testing软件测试网3mMN Zw*c K%@$U
    * 培训结束后,每个工程师都可以接触线上的数据库(更大的权力意味着更大的责任,也有一份"勿做清单",写明那些行为会导致被开除,比如共享用户的隐私数据)。51Testing软件测试网 JmWO*I(j)u rR
    * 有非常牢靠的防范体系,以免内部人员做恶。如果要应要求替人行事,必须将原因记录,并接受严格审查,此外都绝对禁止。
3_g`9@^:_J1w0    * 每个工程师可以修改Facebook的任何代码,随时可以签入(check-in)。
{9qT1\/[B:h0    * 浓厚的工程师驱动文化。"产品经理基本可以被忽略",这是Facebook一名员工的原话。工程师可以修改流程的细节,重新安排工作任务,随时植入自己的想法。(作者原注:我就是产品经理,当然对这一点特别关注。其实从下文可以看出,Facebook的文化其实全面吸收了产品管理实践,他们不是忽视产品管理,而是创造了一种人人对产品负责的文化。)
Q{pw^w2i3h|O)~:S E0    * 在每月的跨部门会议上,由工程师来汇报工作进度,市场部和产品经理会出席会议,也可以做些简短的发言,但如果说得太多,很可能就会被打小报告。他们确实想让工程师来主导产品的开发,对自己的产品负责。
P mkwIQMg~0    * 项目需要的资源都是绝对自愿的
` k/Y;A8d0          o 产品经理游说工程师,让他们对自己的想法产生兴趣。51Testing软件测试网#Z^.Zf NZ
          o 工程师们决定开发那些让他们感兴趣的特性。
lOz(PC,z;Q&r0          o 工程师跟他们的经理说:"我下周想开发这5个新特性"。
{j.B$u/zAp0          o 经理通常会尊重工程师的选择,可能有时会让他优先完成一些特性。
J1LCjO!Y6k]t0          o 工程师负责所有的特性——前端JavaScript/后端数据库代码以及之间所有部分。如果需要得到设计人员(公司内部设计团队很小)的帮助,需要先让设计人员对你的想法产生兴趣。架构师之类的也是一样。总体来说,工程师要完成所有的任务。
L*r/D8P:gCK [,b0    * 对于某个特性是否值得开发的争论,通常是这么解决的:花一个星期的时间完成,并在小部分人群中(如1%的内华达用户)进行测试。(刘江注:蒋长浩介绍,实际操作时通常会选择某些服务器上的用户进行测试。)51Testing软件测试网Ka+?vW8u
    * 工程师总是希望解决基础设施、可扩展性以及其他难题,这能获得声望和尊敬。他们很难对前端项目或UI设计产生太大的兴趣。这与其他公司工程师喜欢做前端并向用户吹嘘“看,这是我做的”的情况,可能正好相反。在Facebook,后端任务,比如新的feed算法,广告投放算法,memcache优化等等,是工程师真正感兴趣的。51Testing软件测试网-tci_L+X6FW?
    * 所有的代码修改必须经过审查(通过一个或多个工程师),但News Feed是个例外,因为太重要了,Zuckerberg会亲自审查所有改动。51Testing软件测试网J*S)L2kD"M
    * 所有的修改至少要被一个人审核,而且这个系统可以让任何人很方便地审查其他人的代码,即使没有得到邀请。签入未经审查的代码将被视为恶意行为。
K k7j+ie2`UI8K:zP0    * 工程师负责测试,代码修复,和维护自己的项目。51Testing软件测试网:I/Q#UBb.j
    * 每个办公室或通过VPN连接的员工会使用下一版的Facebook,这个版本的Facebook会经常更新,通常比公开的早1-12小时。所有的员工被强烈建议提交bugs,而且通常会很快被修复。
!awB5xZL(x0    * 很奇怪只有很少的QA或自动测试——"大部分工程师都能写出基本没有bug的代码,只是在其他公司他们不需要这么做。如果有QA部门,他们只要把代码写完,扔给他们就行了"51Testing软件测试网,U ` _#jpe#cY'F
    * [针对上一条]我们有自动测试,代码发布前必须要通过测试。我们不相信"所有的工程师都能写出没有bug的代码",毕竟这是一个商业公司。51Testing软件测试网2Rr_ i"D'K5v0u$E5D
    * 很奇怪,缺少产品经理的影响和控制——产品经理是很独立的和自由的。产生影响力的关键是与工程师和工程师的领导们们搞好关系。需要大致了解技术,不要提一些愚蠢的想法。
C(^f%~'c cMa7x,l;F0    * 所有提交的代码每周二打包一次。
|k X Q G4]Y![0    * 只要多一分努力,终于一天会发生改变。
fE.k#jwtn0    * 星期二的代码发布,需要所有的提交过代码的工程师在场。51Testing软件测试网'}c0[ @u2[,t#v
    * 代码打包前,工程师必须在一个特殊的IRC channel上。
%? UxJKtJ&S&Ld0    * 运维执行打包过程51Testing软件测试网{N R.Z,\1A+U|wbP}
          o Facebook有大约60000台服务器
+R v5f7jcSn5z T0          o 有9个代码发布级别
%Y al%^T0          o 最小的级别只有6台服务器
,P[-F7c }}a_,W0          o 星期二的代码发布会先发布到6台服务器上,运维组会检测这6台服务器的反应,保证代码正常工作,然后再提交到下一级
_6a&w5q-Az C7w0          o 如果发布出现了一些问题(如报错等等),那么就停止下一级的部署,提交出错代码的工程师负责修复问题,然后从头继续发布。51Testing软件测试网 m"L%NF S.b!_$lC
          o 所以一次发布可能会经历几次重复:1-2-3-fix. 回到1. 1-2-3-4-5-fix. 回到1. 1-2-3-4-5-6-7-8-9
B)FoD9kkhd0    * 运维组是受过严格训练,倍受尊敬,而且有商业意识的。他们的工作包括分析错误日志,负载和内存状态等等。还包括用户行为。
5X4C/O&xhYcC$gT0    * 代码发布期间,运维组使用IRC-based页面系统,可以通过Facebook/email/irc/im/sms ping每一个工程师,如果需要他们注意的话。对运维组不做回应是一件很羞愧的事。51Testing软件测试网K%Ek,Vlwz8s
    * 代码一旦发布到第9级,并且稳定运行,就算发布成功了。51Testing软件测试网D qe8u&G4JG
    * 如果一个特性没有按时完成,也没什么大不了的,下次完成时一并发布即可。51Testing软件测试网VL[3RF ~Li
    * 如果被svn-blamed,public shamed或工作经常疏忽就很可能被开除。"这是一个高效的文化"。不够高效或者不够聪明的员工会被剔除。管理层会在6个月的时间里观察你表现,如果不合格,只能说再见。每一级都是这个待遇,即使是C级别和VP级别,如果不够高效,也会被开除。
)si0^r/A0    * 被责骂不会导致解雇。我们特别尊重别人,原谅别人。大部分高级工程师都或多或少犯过一些严重的错误,包括我。但没有人因此被解雇。51Testing软件测试网(~l-K$H#pr
    * 我也没有遇到过因为上面提到过的犯错误而被解雇。有些人犯了错,他们会非常努力地去修复,也让其他人得到了学习。
n R!`]_m0
5}7XF)tD(v0转自:http://sd.csdn.net/a/20110119/290401.html51Testing软件测试网$Dv6JAFak

/N6rvK-{3?8_ D(o0

TAG:

lyfi2003的个人空间 引用 删除 lyfi2003   /   2011-01-22 09:35:24
有新意. 工程师驱动很少见.
 

评分:0

我来说两句

Open Toolbar