说到世界上最伟大的互联网公司,Facebook应该是不得不提的其中一个。
我相信每个从事互联网行业的人,都会对这个全球最大的社交网络公司的运作方法很感兴趣。最近我读了一本由Facebook早期员工所撰写的书,里面提到很多Facebook颇有成效的内部机制。
身为互联网业态观察者的我,这此通过这篇文章给大家分享一下。(微信:kevinwork)
facebook香港办公室Facebook工程师面试聊什么?
面试的典型过程:
1分钟:面试官大致描述下本次面试。
4分钟:面试官先花1分钟介绍自己,什么时候加入Facebook,做过哪些东西,目前在Facebook哪个部门,负责什么。然后给应聘者3分钟进行自我介绍。
3~5分钟:让应聘者回答“为什么对Facebook感兴趣”的问题。面试官最不想听到的就是强调潜在的财务回报,虽然大家都知道这肯定是一个因素。但在如此宝贵的时间里去强调这一点,而不是其他更有意思的方面,会让面试人员产生反感。如果Facebook的财务表现在短期内不符合他们的想象,这些人会很快走掉。
10~15分钟:让应聘者谈谈之前最让他感觉骄傲的一个项目。然后面试官会深入追问很多跟这个项目相关的问题。比如“这个项目最大的挑战是什么”“几个人完成的,你在里面的角色和贡献”“有没有出现你的想法和其他人不同的情况,你是如何应对的”“这个项目让你学习了什么东西,或者锻炼了哪些地方”,还会挑一些相关的技术细节提问,等等。
20分钟:文化相关问题只占一半时间。所以这里会集中在一个具体的技术问题上。
5分钟:留给应聘者来提问,针对Facebook或者针对面试官在Facebook所做的事情。希望应聘者较为关心的是公司文化、产品或技术,而非财务上的。
Facebook的招聘标准:只和最好的人合作
一流人才只愿意和与自己水平相当的人共事,他们聚在一起会变得更好。一流人才无法容忍二流人才。
全部由一流人才组成的团队有很多好处。
1. 这让你更加愿意被委以重任。一流人才不会轻易信任不熟悉的人,如果你还没有证明自己和他们一样出色甚至更出色,他们宁愿独立辛苦工作也不愿意接受你的帮助,因为他们担心你会搞砸。但当你证明自己之后,他们会信任你,放心把事情交给你一起合作。一个互帮互助的一流团队才能真正做到1+1远大于2。
2. 通过完成艰巨任务,一流人才互设榜样。这中同伴做出了成绩所带来的压力进行合理利用,可以大幅度提高工作表现,并在团队中形成良性循环。Facebook鼓励不同项目间公开分享他们的苦与乐、成果与教训。
3. 一流人才喜欢互相挑战。有一位工程师总监曾立下赌约——如果在规定时限之前完成网站翻译平台所需的代码修改,他将把头发染成蓝色。这样的挑战把“枯燥”的工作变成了具有挑战性的游戏。一流人才天生容易对挑战上瘾,不管是挑战别人还是接受新的挑战。
4. 一流人才可以相互学到很多。每个一流人才都有自己“牛”的地方,彼此有很多可以互补之处。他们希望通过不断学习来丰富自己的经验,完成不可能完成的任务,并在职业生涯中前进,证明“我行”。毫无疑问,和一流的人才在一起,才能更容易地实现这些目标。
Facebook的黑客文化
Facebook的企业文化核心是“黑客文化”。
扎克伯格曾宣称:“Facebook存在的意义,是让世界更加开放和紧密相连,并非仅仅是开办一家公司。我们期望,Facebook的每一个人,每时每刻都要致力于为世界创造真正的价值,并将这一理念融入自己所做的每一件事情之中。”对价值的追求,超过了华尔街对业绩的期望所带来的压力,这就是真正的黑客精神。
黑客文化是一种持续改进和演变创新的做事方法。黑客们认为,优化无止境,产品无完美。当有人说无法再改动一丝一毫,或是满足于现状时,黑客们却当着别人的面,情不自禁地动手修改。
黑客们迅速发布小规模更新,并从中汲取经验教训,而不是试图一蹴而就,一劳永逸,他们希望通过长久努力打造出最佳服务。为此他们建立了一个测试框架,无论何时均可测试数千个版本的Facebook。他们的办公室墙上写着“Done is better than perfect”,以提醒大家按时“交付产品”。
“黑客”也意味着一种亲身实践、积极进取的天然纪律。黑客们不会召开长达数天的马拉松会议,以讨论某个创意是否可行,或是试图寻找最佳方法。他们会制作原型产品,看看是否行得通。在Facebook的办公室里,黑客们的口头禅是:“Code Wins Arguments”。
“黑客”还意味着极度开放和精英为王。黑客们认为,最优秀的创意及其实现始终掌控一切——而不是由最善于鼓吹创意或是权力最大的人掌控一切。
产品开发的三个准则
其一,迅速发布,再进行监测(Move Fast and Monitor Closely)。Facebook一直崇尚的事尽可能满足一个最低标准,你可以在完成产品离所谓的完美程度还有一定距离时迅速推出去。接下来就监测这个产品最重要的几个指标,从整体的运营数据来看产品究竟算不算成功,找出哪些没有达到预期的地方,思考在推出下一个版本。Facebook很多尝试性产品发布的时候有一些已知问题,由于发布时灰度发布方式,如果这些问题只在极端少见的情况下才会被用户碰到的话,在新产品发布初期时可以接受的。
其二,坦然对待不确定性(Be Comfortable with Uncertainty)。要迅速发布产品,会涉及究竟优先开发产品的哪些功能来,在市场上去做试验。在互联网2.0时代,网站更新是瞬间的。因此产品是否适合市场的不确定性:这一次做对了,下一次继续增强;这一次做错了,下一次马上改正。这就考验工程师跟不确定性打交道的能力,你要根据自己的知识和经验,敢于做出选择,然后根据监测数据及时改进或做出调整。比如刚开始决定要用时间轴来替代个人主页,谁能确定这样做的效果就一定比原来好呢?但扎克伯格敢于将它推出来进行试验,并且工程师团队也愿意跟他一起去尝试。在大家互相无法说服的情况下,倔强一点的工程师会说“何不让我花两天时间做一个最简版本来试试看呢?如果有效,我们继续做:如果无效,那就停”,这就是著名的“Code Wins Arguments”的来源。当然,这些做法中最重要的是监测相关数据,以验证自己的预期,如果出现的错误越来越少,用户反馈数据越来越好,那就说明这种改变是积极有效的。
其三,不追求极致,应该不断地发布以达到目标(Done Is Better Than Perfect, Stay Focused and Keep Shipping)。在眼下所处的互联网时代,软件开发工程师不要试图追求一次就让你的产品达到极致。这一点不像硬件,因为硬件一旦销售出去,如果发现致命问题,除了召回没有其他办法,只能等下一次推出新产品时再改进。也不像传统的桌面软件产品,更新与否很大程度上取决于用户的兴趣、时间、使用习惯和集成程序,导致产品更新有很多负担。网站更新可以在比较短的时间内完成,用户也没有任何本地旧产品的负担。这就允许互联网公司可以不断尝试,不断地改进,在这个过程中逐渐达到极致。当然,由于用户的口味、需求都在不断变化,在这种商业环境中,没有最终的、稳定的极致状态。只有不断地进行符合用户需求的改变,才是能够在互联网时代生存下去的法宝。
如何招到想要的人手
一是,如果你只是为了扩张队伍去找人,别人是不会买帐的。你的出发点必须是有实在的业务需求,把你的招人需求和业务发展方向结合起来,最好有数据来支撑说明。
二是,“挖人”需要更多努力和沟通,尤其是在公司内部不同的组之间。关键的一点是,你要说服对方:他转组之后,为公司带来的价值要大于他离开原来组带来的损失,利大于弊。此外,在招关键的人手时,除了自己的努力,你要说服自己的老板,甚至老板的老板,来跟对方沟通,效果可能更好。
如何有效管理团队
领导者最重要的事情就是去帮助员工发掘自己的长处,并尽可能创造机会让他们去发挥自己的长处。通过不断的激励和帮助员工,让他们挑战自己,做出比自己想象的更好的成就。而对于其弱点,最重要的是帮助他们去认识到。然后通过培训,或者和别人合作形成互补的方式,来完成任务。
成为经理后,并不是去“管”那些工程师,主要是榜样(Lead by Example)的作用,你要向他们展现什么才是优秀的做事方法,怎样能将产品做到极致。对于每一个项目,都要指定一个具体的责任人,经理的职责就是随时与每个人沟通,掌握项目的进度,预测会遇到哪些困难,怎样帮助大家。
作为团队的领导者,需要设定足够高但合理的期望:足够高得使你的团队成员不会感到没有挑战性,但又合理到不至于使他们油尽灯枯。你要给他们创造出一段经历,使得在“旅程”结束,他们回头看时会说:“哇,我都没有想到自己居然做到了,这太牛了!”
另外,你要找到一个不容争辩的途径来衡量期望。与团队一起制定下季度里最重要的3~5个目标,并有数据化的衡量指标。根据工作量把目标分别委派给工程师。
作为经理,对于业绩的问题要特别敏感。在周五写团队报告时要回顾一下,组里每个成员这一周表现如何,每个人是不是都在高效状态。
如何开展一对一碰头会
一对一碰头会在硅谷非常常见。这是上下级沟通交心的好机会。从上级的角度来看,需要让下属明白他在这里,会竭尽所能帮他完成工作,实现成长。从下属的角度看,这是获得老板帮助的最好时机,让老板理解并支持他的职业计划,然后让老板清楚知道他需要做什么来帮助提高。
一对一碰头会需要引导到这几个方面上:
1. 工作开不开心?是不是喜欢当前的项目。如果做得不开心的话弄清楚为什么,是个人的原因、项目的原因,还是团队或者公司的原因,看看有什么可以改进的地方。
2. 效率高不高?如果效率不高的话是什么原因导致的?有没有老板可以帮助移除的障碍。是不是缺乏某方面的知识或工具?有谁可以帮的到?
3. 工作的影响大不大?现在做的事情是不是对于我们的短期或者长期目标最相关的、影响最大的?如果不是的话,那是否应该改变当前正在关注的问题?
4. 当前的工作有没有提供学习成长的机会?当前的项目有没有挑战性,是否给了他们学习新东西的机会?如果当前工作没有悬念,没有提供进一步的成长空间的话,那是不是应该寻找一个更有挑战性跟有不确定性的问题?
在做一对一会面,有几个要注意的地方:
1. 下属才是主角,而非经理。
2. 一对一不一定要在会议室,可以是午餐形式,也可以是散步形式。
3. 注意语调和肢体语言。在面对面谈话中,言语内容传达的信息对于个体态度的影响只有可怜的7%,语调传达达到55%,形体和表情语言达到38%。
4. 关注于行动。在谈话之后,一定要有相关的行动项目。
5. 一定要事先做准备。
6. 对于建设性的意见,一定要有实际例子的支撑。
7. 对于比较困难的建设性的讨论,一种常见的方法是提出建议、给出具体的实例、根据实例来谈论着么做的利与弊,然后在谈论中逐渐形成共识,得出需要改进或者改变的地方,变成行动方案。
导师文化
如何去在公司里寻找导师,并与之相处?
1. 双方是朋友。如果不是真正的朋友,导师这种光出力而没有任何利益的事情,不会有人愿意做。他可以开始是你的老板、你的老师、你的前辈、你的校友、你的合作伙伴,但他认可你的为人,赏识你的潜力,和你成为了生活中的朋友。这种朋友关系是导师关系的基础。
2. 导师在某一领域能够帮你提高自己的价值。他的最终目的是帮你修炼某一方面的内功,而不是给你提供解决方案、帮你介绍人等这些具体的事情。
3. 要积极主动去寻找。要想找到一位好的导师,需要你积极争取,主动开口。你在主动争取的同事,别人可以看到你是一个真心上进的人。
4. 对导师的帮助要心怀感激。你需要非常尊重导师的时间,在交流之前做好准备,呆着话题、带着案例前去,使得你们的讨论有很好的基础,而不是天马行空、胡侃啥聊。
5. 对每次和导师的交流进行总结、记录。如果你把每次的交流都当作提高的机会,那么对交流进行总结则可以达到更好的结果。
Facebook产品的开发流程
Facebook的产品开发流程总结出来共九大步骤:
第一步:描绘远景,设置目标。
做每件事情之前都要有明确的目标,在聚焦于细节之前要有大的远景,这可以给我们在以后的实施过程中指引方向。对于远景的思考,主要围绕三点。
1. 我们为什么设这个目标,而不是另外一个目标?
2. 在你做一个事情之前,脑子里应该有这件事完成之后是什么样子这样一个画面,接下来很多事情都是围绕着这个最终画面来进行的。你要做的事情就是让脑子里的画面越来越清晰,自己离这个画面越来越近。例如一个礼物平台,想象这个平台可能长成什么样子,大家可以在上面买什么,什么样的东西最适合在这平台上卖,整个流程应该是怎样的,几个步骤最合适……
3. 我们计划做些什么来实现这个远景?这就需要你将你的最终目标具体化,变成一个可以想象的图片,甚至量化,然后才能使得你的最终目标很容易被别人理解。
Facebook设定目标遵循“SMART”规则:即S(Specific)非常详细具体的。M(Measurable)能够衡量的。A(Aggressive)有难度有挑战性。R(Realistic)现实且可实现的。T(Time-bound)有实现期限。
第二步:收集想法并排出优先次序。
有了目标以后,会产生很多相关的想法,把精力押在某几个核心的想法上。
那么这些想法从何而来?最自然的方式就是之前延续下来的、大家明确知道要做的项目。
收集好想法后,就要开始头脑风暴了。一个做法是:先列出设定的目标,再在这个目标的指引下去思考哪些想法可以为之服务。做头脑风暴的原则就是要把“提出想法”这个过程和“分析想法”严格区分开来。在提出想法这个过程中,针对某个特定目标,让大家绞尽脑汁地集思广益,但对提出的想法要克制住讨论其优缺点的冲动。让提想法的人没有任何压力。
等有了足够多的想法,接下来最关键的就是分析想法——如何挑选出最可能产生效果的想法。我们必须把有限的资源放到可能产生最大价值的想法上。有一个规律——80%的影响是从20%的工作上得来的。因此只需要做前X项。我们会对所有的想法进行讨论,根据每个想法对目标的影响和其所需要的资源(主要是人力与时间)进行讨论,然后排序(P0,P1,P2……)最后挑选排在最前面的几项。
关于时间分配,还有一个“6-2-2”原则,Facebook的很多组都尽可能遵循这个知道原则:60%左右的时间放在那些能够预期的工作上;20%的时间花在后天架构和产品质量上;20%的时间花在比较有风险、有争议的、可能会带来某种颠覆性的后果的那些想法上。
对于如何挑选那些接下来要去实现的想法,还有几点需要注意。
1. 季度性计划主要是指导性的,不会强求把它们变成必须要遵循的工作计划。
2. 围绕着每个想法的影响力进行辩论。
3. 120%规则。我们最终挑选出来要做的想法大概是团队可承担范围的120%左右,太多了可能无法实现,太少了则不够进取。
4. 还要保证一些底层架构和产品质量的工作是在这些想法之中的。
第三步:跨团队沟通。
决定了要做的项目之后,就需要讨论如何跟其他相关组的计划对接。这里要进行的沟通,就是让相关组之间做的事情是相辅相成的,而不是相互扯皮,造成不必要的内耗。
有两类人特别需要沟通。
一类是不同职能之间的沟通,包括工程师、产品经理、设计师,还有你的项目相关的上下游团队或部门。
另一类是相关的工程兄弟组之间的沟通。有技术或者框架上的共享,需要对方的配合,看怎样列入它们的计划。
第四步:告知所有可能关心的人。
最终将计划定下来后,让所有可能关心的人都清楚这个计划。可以发邮件,虽然并不是所有人都会真去看邮件,但给他们一个参与的机会去了解“这个组究竟在做些什么工作”。
第五步:设计产品。
对于任何一个项目,具体执行都会设计四个维度:有哪些功能,预期完成时间,预算(主要是人员,还有服务器、带宽资源、金钱等),完成质量(包括可扩展性、性能等)。
对于产品设计,有一些基本理念可以借鉴:
1. 不要过度设计。不要试图在一开始就把你能想到的很多、功能很复杂的功能呢都设计进去,先尽快推出第一版本,这是你测试产品功能的好机会。
2. 产品越简单愈好,但并不意味着简陋。产品要方便用户使用,没必要搞得复杂。
3. 对于自己做出来的产品,你必须是它的用户。
4. 产品要确实有用,主要流程尽可能顺畅。用户能够迅速地、直觉地学会使用,中间不能有很多需要用户思考的点,尤其是那些核心流程。
5. 不追求完美。我们的最终目标是希望有一款成功的产品而非完美的产品。
6. 保留最基本的质量底线。
第六步:指定项目责任人。
这样做最大的好处是责任非常清楚,每一个项目都有非常清晰的拥有者,这让推脱责任变得很难。
第二个好处是锻炼员工的才能。
第三个好处是方便交流。
第七步:定期碰头会。
根据项目的紧急性和重要程度定期讨论,可以是每天进行的,也可以每周进行一次或两次。
召开碰头会是,所有跟这个项目相关的人都要过来,围绕项目把所有相关的任务及其进展迅速过一遍。
第八步:了解进度,汇总报告。
对于负责一个团队的经理而言,要对自己组里正在进行的每个项目都有深入和及时的了解。
可以通过编写简报的方式:
1. 你的简报应该能在一分钟之内被人阅读完毕。
2. 在简报的最开头一段,可以明确列出这周核心数据的变化。
3. 应改只涉及组里最重要的3~5个项目。
4. 每个项目只用最重要的一两句话去阐述清楚进展。
5. 项目进展的描述要着重在动词上面。是“做了”,还是“正在进行”,或是“准备进行”。
第九步:发布产品,监测数据。
产品完成开发后,要进行发布前评估,就是在发布之前,根据具体的产品或者该次发布的特点,做一些诸如发布策略、需监测的核心数据、产品演示、核心算法改变等方面的讨论。对于发布前评估:
1. 要短,不应超过半小时。
2. 样式可以多样,可以是会议、发布会、邮件、口头聊聊等。
3. 人员选择可以多样,一般是相关人员参与。
4. 内容可以多样,根据产品的特性或者代码改变的特点,讨论内容可以不同。
Facebook有灰度发布系统,可以控制发布的范围和速度,一般通过数据监测来判断发布状态,有两类监测数据:一类数据反映当前的系统状态,比如访问总量、访问成功量及其占总量的比例、致命范围错误的量和比例、访问速度、出现最多的错误类型统计,等等。另一类数据反映新功能的用户影响。
另一个很重要的功能,就是实时警报。比如点击率和上周相比突然下降30%,马上给指定的人员发邮件或即时消息、短信等。
上述第二类数据对于产品后续版本的开发有很强的指导作用,核心数据中反映的问题,可以成为后续版本专注的对象。
考核激励体系
Facebook的员工股份的基本种类分两种,一种是期权(Options),一种是受限股票单元(Restricted Stock Unit,简称“RSU”)。期权是需要员工行权后才能购买股票。所谓的期权行权就是以员工入职当天的市场合理价格来购买股票,即使你要行权时的股票价格已经是入职当天的几十倍,可以直接卖出,或者等到将来公司上市后在以市场价格卖出。而受限股票单元是直接发放到员工名下,但只能上市之后在公开市场才能兑现。受限股票单元一个很大的问题是其税率很高,基本没有什么优惠策略,在上市兑现的时候马上算作收入,45%左右的股票是要送给美国政府交税的。
看完后,欢迎加我微信多讨论。
网友评论