编者按:Mike Kreiger是Instagram的联合创始人兼CTO,在仅仅创办一年半的时候,Instagram就被Facebook以10亿美元的价格收购,堪称硅谷神话。被收购后,Instagram用户数实现了指数级增长,月活跃用户数从2012年被收购时的3000万猛增至今天的7亿,Mike打造的工程师团队在这个过程中发挥了不可替代的作用。在这篇文章中,Mike分享了自己在过去几年中积累的工程技术团队管理经验。如何从一个早期的创业公司工程师团队顺利发展为一支庞大成熟的工程师团队?如何顺利地为工程师团队引入新的管理层级?如何为工程师团队打造一个能够持续改进和创新的引擎。Mike的经验对于那些想复制这种工程师团队成功扩张的创业公司具有很大的借鉴意义。 因文章较长,为提升阅读体验,特分为上、下两篇。 不管用什么标准来衡量,Instagram所取得的里程碑式的成就都是非常惊人的。在仅仅创办一年半的时候,Instagram就被Facebook以10亿美元的价格收购,受到外界广泛关注。对Instagram而言,被收购不仅仅是一个结束,更是一个开始。被Facebook收购后,Instagram用户数实现了指数级增长,产品的月活跃用户数从2012年被收购时的3000万猛增至2012年的2亿,如今,Instagram的月活用户数已经突破7亿大关。 作为一家公司,Instagram取得了一系列里程碑式的成绩,公司联合创始人兼CTO Mike Krieger本人也达到了自己的一个又一个里程碑,Mike的里程碑与他所带领的工程技术团队的快速扩张和发展紧密相关。在2012年被收购的时候,Mike负责的工程技术团队一共只有6个工程师,且都是全栈工程师。如今,他掌管的工程技术团队的人员规模已经超过300人,正是这些人在为数亿用户快速推出众多新的产品和功能。在过去7年时间里,Mike自己也从一个管理新手迅速成长为一个能够熟练带领一个多层组织架构的专业工程师团队的掌门人,他管理的很多工程师都是各自所在领域内最牛逼的工程师。 近日,Mike Krieger接受了First Round Review的专访,他在专访中分享了自己在过去几年中积累的工程技术团队管理经验。如果时间可以重来,他希望自己在2010年Instagram刚创办时就知道这些经验。他分享的经验包括:如何从一个早期的创业公司工程师团队顺利发展为一支庞大成熟的工程师团队?如何顺利地为工程师团队引入新的管理层级?如何为工程师团队打造一个能够持续改进和创新的引擎。Mike的经验对于那些想复制这种工程师团队成功扩张的创业公司具有很大的借鉴意义。 一. 打造一支能够满足你早期需求的早期工程师团队 一家创业公司要想顺利起步,通常需要具备下面这些资源和能力:足够勤奋、充沛的精力和很强的解决问题的能力等。在创业最初阶段,是否需要专业化的工程师呢?通常不需要。这个阶段最需要的是全栈工程师。根据Mike的经验,为了将你的创业公司顺利推向下一个发展阶段,这个阶段的全栈工程师需要具备下面这几项特质和能力: 1. 知道何时该给牦牛剃毛 你听过“给牦牛剃毛”这个行业术语吗?大概意思是,有些时候在编程过程中需要解决一些超级复杂的技术问题。但很多时候你需要完成一长串必要的任务之后才能最终解决你想解决的问题。比如,我需要让这款iPhone APP在我的设备上运行,这意味着我首先需要生成这个配置文件,还需要对这个账号进行设置,等等。最后,你要将牦牛上的毛全部剃完之后才能完成你最开始想要实现的事情。 在你组建全栈工程师团队的时候,你需要的是那些已经准备好并愿意在这条路上一直走下去的人。你需要的是那些为了完成一项任务而愿意学习自己不知道的新知识的人,尽管需要学习的东西可能是他们的工作职责范围之外的知识。 为了找到并鉴别出这样的人,你可以面试的过程中提问下面这些问题: (1)让他们说说最近做过的业余项目或工作项目,在做这个项目的过程中,为了解决项目中最重要最复杂的问题,他们必须首先剃掉牦牛的哪些毛? (2)问他们之前是否参与过的一个跨学科的项目,或者是否有过在完全不熟悉的情况下就开始一个项目的经验。 2. 知道什么情况下是不值得花时间去剃牦牛的毛的。 对于一家早期创业公司而言,没有什么比工程师的时间更宝贵了,因此你肯定想确保自己是在明智地利用工程师的宝贵时间的。“人们很容易会陷入给牦牛剃毛这样的事情中无法自拔。一位高效的全栈工程师知道何时该从给牦牛剃毛这件事中国抽身出来继续前进。”Mike说道。 Mike想起了自己在Instagram发展早期的时候得到的一条建议:监控一切东西。他直到今天依然认为这是一条非常好的建议。 所以在最开始的时候,我们花了四五个小时的时间来尝试搭建一套免费开源的IT基础设施监控系统Nagios。最后我想,我想要回去自己重新开发这款产品,我是可以接受一个不那么灵活的报警解决方案的,这项工作我今天就能完成,完成之后再做其他事。 对于你需要使用的产品,有时你自己就能开发出来。但是如果市面上已经有了一个比较好的解决方案,这时你还应该花时间去重新开发吗?一开始的时候,我们会想:我们知道如何开发一个推送通知产品功能,但是市面上已经有Urban Airship这个现成的推送通知产品可以使用,这时还需要重新开发吗?这时,将你的骄傲放在一边,你需要将你的主要精力放在你真正需要实现的目标上。你的真正目标不是搭建Nagios,也不是开发一个推送通知功能,而是早点将你的软件产品推向市场,这样用户才能用上它。 Mike通过下面这个方法能很容易地鉴别出一个工程师是否已经陷入了给牦牛剃毛中无法自拔: Mike和他的团队会让候选工程师花几个小时时间开发一款产品,比如一个非常简单的移动APP或后台系统,遇到问题时可得到Instagram团队的全力支持。这能够让你将那些务实的工程师与那些会将一半时间都用来设置编辑器环境的工程师区分开来。你要考察的不仅仅是结果,还要看候选人对时间的利用是不是非常合理。。 3. 注重行动导向 你是无法同时做所有事情的,那么问题来了:你的团队需要解决的首要问题、次要问题分别都是哪些。你对这些问题的分类记录方式不需要太精细,但是你需要一个问题的记录分类系统。在Instagram早期,Mike和他的团队是用一个按主题分类的滚动的Google Doc来记录他们做的所有事情和要解决的所有问题的。 其中的一个分类主题就是:成为世界上最快的图片分享应用。在这个主题下,我们都要做哪些工作?另外一个主题是:我们想要让自己平台上的图片看起来让人觉得不可思议,远超人们对在手机上看图片时的期待。我们在这个主题下又有哪些工作要做?所有与这些主题不相干的工作都靠边站。 Google Doc是用来跟踪一个团队所有任务的最合适的最小可行化产品,它能确保每一个团队成员都在为公司最重要的目标服务的。文档被分解成很多天,每天的任务都分为不同的主题。每个主题下未完成的任务都会被迁移到接下来一天的任务中。那些优先级最高的任务会被标记出来。这样一来,就不会出现遗漏丢和失任务的问题,每个人都可以很方便地对任务进行评论和提问问题,大家的注意力也都能投入到那些接下来需要完成的任务上。 Mike在非常早期的时候就为团队引入这样的工作方式起到了很大的作用,这能让大家都专注在那些与公司成功息息相关的未完成的任务上面。这也可以让你杜绝让那些只知道做自己的事情、对全公司的执行计划完全不闻不问的人进入公司,或者远离那些仅仅为了完成任务而将时间浪费在只做那些不那么紧迫的任务的人。 你可以通过问下面这个问题来鉴别候选人是不是注重行动导向的人: 能告诉我们一个你在产品功能完整性、功能优化和时间把控三者之间平衡得比较好的项目经验吗?对于这个问题,你希望听到的是一个微妙的答案,而不是一个绝对的答案。例如,“只有当一切都准备好之后我们才发布产品”或者“我们的每一个任务都能在截止日期前完成。” 这两种答案我都听到过。 二. 招聘那些有激情、灵活性高的全栈工程师 虽然大公司有机械招聘团队带来的益处,但创业公司在招聘方面也有自己的优势:他们可以在招聘的时候跳出传统的思维局限:有些候选人表面上并不满足公司的招聘要求,如果按照传统招聘标准,这些候选人可能一点机会都没了,但实际上他们却是非常合适的人选。Mike和他的合伙人Kevin Systrom招聘的第一个工程师Shayne Sweeney就是一个非常典型的例子。Shayne连大学都没有读完,完全是一个自学成才的程序员。我们之所以认识他是因为我们在同一个孵化器办公,而且他的办公桌刚好在我们的对面。你能从他身上感受到那种强烈的创业精神:“我有一个想法,为了让这个想法变成现实,我愿意学习一切必要的知识。” 当然,大多数时候你是没法像我们一样在桌子对面就能直接观察你的候选人的,这时你怎么才能判断候选人是否是这种有激情、有创业精神的灵活全栈工程师呢?根据Mike的经验,强烈的好奇心是候选人应该具有的基本人格特质。因此在与候选人交流的时候,看看是否能自然而然地就感受到对方强烈的求知欲和好奇心。我们感兴趣的候选人一般都会说类似这样的话:“这周我对Go这款游戏非常感兴趣,于是我自己开发了一个Go的原型,从而更好地学习里面的东西。” 我们不希望听到候选人说类似这样的话:“我工作的公司使用的是React,所以我用的也是React。” 你也可以通过在面试的时候问一些问题来判断候人是否具有好奇心和求知欲。在创业早期阶段,我喜欢问候选人下面这些问题:“你做过的哪些业余项目让你感到最为兴奋?你最近一次因为做某一个项目而掉进了另外一个奇特世界里是什么时候?你从中都学到了哪些东西?” 当回答这些问题的时候,如果候选人双眼发光,明显有什么让他感到兴奋的东西,你就知道他做事情是出于激情,而不是仅仅将其视为一个工作。在创业早期,你需要的就是这样有激情的人。 在创业早期,工程师是否具有足够的灵活性也至关重要。这可能意味着不要招聘一些技术非常精湛的候选人。 我们当时面试的一个我之前认识的候选人, 他是我见过的最优秀的iOS工程师之一。但是在我们与他的交流中,他大概说了这样的话:“你是知道的,我是专门做iOS开发的,我拒绝做任何服务器端的工作,我认为那是浪费我的时间。” 虽然他说这样的话有他的道理。但问题是,他的这种思维方式是一种太过专业化的思维方式,可能适合大公司,但并不适合当时的Instagram。 招聘那些能够在不同的技术之间灵活切换的全栈工程师能够让早期的工程师团队保持足够的灵活性和敏捷度,也能帮你避免陷入很多陷阱。我之前曾和Digg的创始人Kevin Rose交流过有关他在运营Digg时踩过的坑,Kevin坦承,他在创业早期犯过的最严重的错误之一就是只招聘那些与公司当时所使用的技术非常匹配的工程师。这是非常有问题的做法,原因有二:一是,你最终是需要进一步升级和发展你的技术的;二是,如果工程师将自己的工作范围仅仅局限在某一种单一的技术上,比如PHP,这会导致你最终做出错误的技术选择。 Mike在这方面的最后一条建议是,要尽早地进行多元化招聘。组建一个多元化的团队能够让你在很多方面受益良多。很多技术文章也已经对多元化团队的重要性做了很多探讨。但是在疯狂甚至混乱的创业早期阶段,很多创业公司可能认为这条经验并不适合他们,或是将打造多元化团队排在工作优先级的末尾。 在公司发展早期阶段,我们也没有在打造多元化团队方面给予太多重视。随着公司慢慢发展壮大,公司招聘女性员工或少数民族员工的难度开始变得越来越大。如果你的团队中没有女性工程师,这时当你面试一位女性工程师的时候,她内心肯定会想:“这个大一个团队,都是男的,一个女工程师都没有。” 这难免会让她心生警惕,觉得你的团队对女工程师肯定不是特别重视,加入团队的意愿自然会大大降低。 如果你能尽早打造一支多元化的团队,这就能让你进入一个良性循环。如果团队中已经有了一些女工程师,那么你就能更容易地吸引更多女工程师加入。如何才能更好地吸引女工程师呢?不管是参加活动、接受采访还是写博客文章,你都可以找机会强调你对组建多元化团队的重视,让更多人知道你是重视这一点的。要在尽可能多的场合表达对这方面的重视。如果你仅仅想通过在面试的时候强调你是非常重视打造多元化团队的,这不足以吸引那些你欣赏的女性候选人加入。如果女工程师候选人之前曾在多个场合都听到或看到过你对打造多元化团队的重视,那么候选人就更有可能相信你们确实是非常重视多元化团队的打造的,加入你团队的意愿也就会更高。 三. 不要抗拒公司对专业化的需求 Instagram接下来的故事堪称硅谷传奇:2012年,当时只有13名员工的Instagram被Facebook以10亿美元价格收购。被收购后,Mike和Systrom既可以继续独立招聘,也可以利用Facebook强大的招聘团队为自己招聘。随着他们手里开始有了真正的品牌,他们突然之间吸引来了众多各怀鬼胎的求职者。当然,并不是所有创业公司都有Instagram所拥有的条件,但是无论你公司的处境和Instagram是如何的不同,Instagram在打造多样化和专业化工程师团队方面积累的经验都值得大家借鉴。 随着产品功能需求的增加,同时为了更好地应对用户增长,Mike发现光靠全栈工程师已经无法满足公司发展的需求,需要为团队引入一些专注于某种特定技术领域的专业化工程师,如iOS工程师和Android工程师,这些专业化工程师可以将产品分解成很多模块,通过各个优化的方式将产品打造得比之前更好。每一家创业公司都会经历这个发展阶段。如果出现了下面这些明显的迹象,就说明你需要朝专业化方向努力了: (1)你发明的东西已经超越了你工作的平台所能提供的能力 (2)你开始进入对代码要求更高的新市场。以Instagram为例,就是让视频能够在一些新兴市场正常流畅播放。 (3)你的代码库已经扩展了,因此需要有技术领导者来引领公司未来的增长。 随着越来越多特定领域的专业工程师加入Instagram,如iOS何Android工程师,公司现有的全栈工程师的工作方式和内容将必然与这些专业化工程师的工作方式和内容发生一次激励碰撞。 我们都知道存在一套规范的做事方法。有时这个规范是一个教条,有时这个规范的存在是有充分理由的。Mike举了一个非常简单甚至有些可笑的例子:Instagram是Mike和他的合伙人Systrom做的第一个大型Python项目,所以在一开始的时候他们俩就制定了代码规范。后来加入的Python工程师都会不解地问:“你们为什么要在等号的两边都留有空格呢?” 我们当时制定这个编码规范只是觉得这样做会更好看一些。但后来加入的Python工程师心里就会想:“但其他人都不是这样做的啊。” 最终,你需要让自己的做法能够符合行业规范,因为这样做才能让新员工能更快地融入到团队重。(是的,Mike最终回头重改了自己最初写的那些Python代码,让它看起来和其他人写的代码差不多)。你可能会在某种程度上想抵制这种专业化,想坚持按照你早期那种自由、不拘一格的方法做事。建议你不要这样做,你招聘那些专业化工程师是有原因的,你的目的就让他们带着他们的专业知识和技能为你公司的发展服务。 将团队中现有的那些全栈工程师插入到一个日益专业化的组织团队中,这其实并不是难事。全栈工程师也都有自己相对更为喜欢的一个专业细分领域。你要做的主要工作就是向每一个工程师解释这个日益成熟的团队需要的是什么,再观察他们都对哪块细分的专业化工作更感兴趣。有些全栈工程师显然对iOS开发更感兴趣,而有些则想朝架构师方向深入发展。在你观察到了这些信息后,就和他们坐下来聊,告诉他们如果他们愿意的话,他们是可以将自己的全部精力都投入到自己感兴趣的专业化工作上的。同时要明确地告诉他们,他们所掌握的全栈技术组合是非常难得和稀缺的财富,他们今后在各自更加专业化的工作上依然能利用自己掌握的技能组合继续为公司做出更大的贡献。 专业化并不是说就要抛弃最初那些让公司成功起飞时的灵活性,或是将专业化和灵活性对立起来。公司早期的那些全栈工程师的认知和思考方式相对更为全面,这能够让他们在今后成为更优秀的专业化工程师。 以Mike招聘的第一位全栈工程师Shayne为例。我们曾经试图让我们的测试周期变得更快。开发和部署花的时间都太长。后来发现出现这个问题的根源是基础架构方面的问题,需要重写一堆Python脚本。当时我们没有从基础架构团队专门抽调人来专门解决这个问题,而是直接和Shayne说:“Shayne,你了解其中所有的知识和原理,就由你自己来负责想办法看怎么搭建一个MacBuildServer吧”。 那些拥有深厚的全栈知识的工程师是一种非常宝贵的资产,这是那些专业化工程师无法比拟的。他们能够让团队的其他成员更有效率地开展工作。 编译组出品。编辑:郝鹏程。