MEGAEASE的远程工作文化
MegaEase 是我创业的公司,主要是想把云计算(PaaS/SaaS层)的那些高可用高并发的分布式技术普及到那需要对技术自主可控的公司,这样就不需要去使用不能自主可控的闭源系统或是大公司的云平台。我于2016年开始成立MegaEase,从早期8个人,直到今天有20来个人,我们从一开始到今天都是在远程工作的公司文化。因为我很喜欢《Rework》这本书,写这本书的公司叫37signal(现名basecamp),这家公司在发《Rework》这本书的时候,整个公司只有16个人,分布在全世界8个城市,这种Geek的公司的文化很吸引我,所以,在我决定创业的时候,我就止不住地想成立这样能够远程工作的公司,于是,远程工作的团队文化就这样成为了MegaEase的基因。下面我会分享一下,我们公司的远程工作文化和其中的一些问题,最后还有一个工作协议。
我们在早期的时候,8个员工来自5个城市,现在的20来个员工来自8个城市2个国家。虽然我们现在使用“共享办公室”,但是本质上,我们的整个文化是远程工作的文化。在2017-2018年度,我们公司产品商业化以来,公司早期的8个工程师在远程工作的状态下成功支持了得到的老罗的跨年演讲活动,以及其它几个客户,一方面验证了用户愿意付费购买我们的产品和服务之后,另一方面也有一些不错的收入,客单价都在百万左右。还记得当时,有几个投资人并不相信我们连个办公室都没有,而且8个人分布在5个城市,觉得我们是个骗子公司(哈哈)。在过去的一年,我们通过我们的产品和服务帮助银行电信互联网等公司进行了他们的系统架构的改造和升级,让复杂和高门槛的分布式技术和架构可以被更多的企业所掌握所应用。这说明,远程工作是没有什么问题的。实际上远程团队远程工作真的不新鲜,Github上有个Repo维护着一个支持远程工作的公司列表,还有一个跟远程工作相关的Awesome索引。
当然,自从我创业以来,我身边就一直有好些不同的声音质疑远程工作。听过他们的理由后,我能够理解他们的疑虑和困惑,因为管理的确是一个很复杂的事,因为要面对的是极为复杂的人,所以,有这些疑虑也是正常的。下面是我的一些经验和分享。先说宏观管理,再说微观实践。
目录
宏观管理 一、努力找到好的人 二、设定共同的目标和使命 三、倾向使用小团队 微观实践 远程工作协议 小结 宏观管理 我发现很多人比较质疑远程工作的原因,更多的是表现在对宏观的管理上有问题。所以,我还是想先说一下宏观管理,这其实并不分远程办公还是集中式办公,如果能够解决好些这管理上的根本问题,其实,远程不远程都无所谓了。只不过,这些问题在“远程办室”的场景更更突显罢了。
一、努力找到好的人 团队管理的头等大事是找人,没有之一。 很多人都会跟我说,你的这种远程团队需要很好的人。是的,没错,人很关键。远程团队需要的人的一般需要有这些特质:
能独挡一面的人。这样交给他的事能独立完成,没有路能自己找路,这样可以省很多管理成本。 沟通能力很强的人。一方面,他们把模糊的事能变清楚,另一方面,他能有效地说服他人。不然就会非常扯皮和消耗时间。 能自管理和自驱动。不能自管理和自驱的人,会增加大量的管理和教育成本。能自驱动的人,都是对负责的事情有认同的人。 如果你仔细思考一下,你会发现,这样的人是任何一家公司所渴望的人,和远不远程无关。只不过,如果是远程团队的话,你会被逼着要招到这样的人。
招到这样的人,你团队的执行力会非常的强悍。招不到这样的人,你只能为他们不能自管理和自驱而招“经理”,不能写出好的代码而招“测试”,不能很好的沟通而招个“项目经理”,不能独档一面,而要把好的人安排给他们当“教练”,而好的人则会被累死……
这个时候,你就需要计算一下了,是花时间精力在教育不好的人,还是花时间精力找好的人?无论远不远程,聪明的管理者都会选择后者。这也就是为什么Amazon的Bezos会说,“我宁愿面50个人一个人都招不到,我也不愿意降低我的面试标准”。
二、设定共同的目标和使命 对于远程团队来说因为见不到面,所以,缺乏交流和沟通。所以,需要团队里所有人能在同一篇上,能够对要做的事有一个统一标准的认识。也就是共同的目标和使命的认知。知道要要什么,不要什么。知道取舍,知道trade-off。这些东西都是需要团队一起达成的共识。如果没有这样的“Same Picture”的目标和使命,就会出现很多不必要的误解和冲突。另外,因为团队和业务也在迅速发展中,所以,也需要不断地调整和沟通。这都需要领导者花费时间统一目标和使命。
老实说,无论远程不远程,一个团队也是需要有共同的目标和使命的。没有共同的目标,就算是集中在一起办公,也一样没有效率的。
三、倾向使用小团队 因为沟通成本的问题,远程团队更为倾向使用小团队,但并不是说小团队会限制整个公司的规模。《人月神话》说过,只有小团队才能驾驭复杂的系统。Amazon 的 Two Pizza Team的文化(团队的大小只能到两张披萨就能喂饱的大小),就是把整个系统拆成“微服务”架构,这样可以导致整体效率的巨大提升。表现在,可以并行开发,专注于一个功能更利于解决复杂问题,简单可以更容易的运维,可以更容易的规模化……
我工作的这20多年来经历过很多公司,尤其是创业的这几年来,看过的公司更多了(50+以上了),我发现,人数越多的团队,基本上来说,就更偏劳动密集型。劳动密集型的一个特征就是,大家整天在想,得整点什么事给这么多人,好让他们忙起来。而人数少的团队,因为人不够,所以每天都在想,什么样的事更重要,什么样的事可以自动化,怎么做更有效率…… 小团队和大团队的关注点就这么不一样了,所以做出来的事也就不一样了……
当然,并不是说劳动密集型有什么问题,就像《软件团队的两种管理方式》一文所说的一样,远程团队工作更倾向于“电影工作组”式的每个人都是leader的知识密集型的团队。
微观实践 在远程工作中,我们需要有很多的微观操作来让大家能够更好的进行远程工作。因为远程工作也有一些问题(但是方法总比问题多,不是吗?)
文档驱动。首先,远程的问题就是沟通不方便了,集中化的办公一群人可以在白板上进行讨论,然后远程工作这个事就变成很复杂了。所以,当要讨论什么事的时候,需要发起人先写一个文档,然后大家在这个文档上进行讨论(我们通常使用Github的issue,Pull Request或Google Doc)。另外,写文档的好处太多了,除了给后人有一个可以追溯的东西,更重要的是,写作是一种深度思考,当你把你脑子里想的东西写下来的时候,你就会发现你的思考更多了。所以,文档驱动我们团队能力非常重要的事。
自动化和简化。自动化和简化是我平时追得最多的东西了,从软件的Unit Test, Functional Test, Performance Test 一直到用Kubernetes进行自动化部署,我要求的就是从一提交完代码后就自动化的上线。我们玩的是Amazon的“单分支”代码管理的玩法,一旦代码merge上master,就会直接上线(当然需要通过灰度)。因为远程团队如果没有自动化的工具,那么,就会导致整体效率的下降。
Owner文化。这个太重要的了,但是,这并不是在说,如果一个事没有owner,就会像“三个和尚”那样,事情就进了没人管的地步。这是因为很多人在工作中都是比较 nice 的,比较 nice 的人通常来说都不好意思跳出来对别人发号施令。所以,Owner 文化就是要求每件事都要定义一个Owner,而这个Owner是有权对其它人发号施令的,其他人也有义务要配合他。当然,Owner 的权利越大,责任也会越大!
Review文化。Review文档是一种把知识或是想法传递出去的方式。我们在实践过程中,需要大家把好的想法写下来,这需要包括问题背景、目标、可选的方案(这些方案需要有引用和数据,不能是拍脑袋)、还需要有Pros/Cons的比较。然后再发起讨论。这样,事情在一开始就做好,那么就可以让大家的讨论更加地有效率。很多人以为开会讨论有个议题就行了,其实不够,有效率的开会讨论需要的是议案,而且还是高质量的议案!
目标承诺。我们需要每个人承诺自己的工作目标,这个完全由每个个体来发起、完成。一般来说,每个人自己给自己制定的计划最好是在1-2周内。
自我管理。我们的实践是没有审批制度,无论是,休假、报销、出差,完全是自己自由安排,但需要告诉团队(除非在一些关键时期没法休长假,需要整个团队全力以赴),但千万不要撒谎和作弊,一旦发现,直接开除就好了。这个是基于好人更多的原则制定的(没有必要为了少数的坏人一刀切后让所有人痛苦)
闲聊和自行见面。见面和不能见面是一件非常不一样的事,在一起工作时,人和人是会有感情的,因为会有闲聊。远程的时候,则只有工作了。所以,我们鼓励团队人员间的私聊,闲聊,互相对方讲讲自己的经历和过往,同时,也鼓励员工自行出差到对方的城市见见跟你一起工作的人,公司报销差旅费。
知识分享会。我们每周都有知识分享会,一次只讲半个小时,不贪多,就讲一个小的知识点。然后,团队中的一些人还主动使用Google Form来收集分享的反馈信息。
就地奖励文化。我们默认上是没有年终奖,只有就地奖励文化。也就是说,你做的事挣钱了,利润中有70%公司拿走,剩下的30%团队的人就地分掉。这样会让团队里的每个人都会想怎么挣钱,除了可以把精力放到那些能够让用户付费的地方上,更重要的是让团队成员了解一下业务和用户为什么要付费,这个是非常关键的。当然,如果公司没有挣钱,但是员工工作的不错,我们还是会给年终奖的。不挣钱的主要责任是我的,而挣钱的主要功劳是团队的。
外包支持性的工作。一些支持性的工作尽可能地使用外包,比如:HR、行政、发工资财务、员工持股、测试人员、定制化开发……这样可以让你的团队更小,更高内聚。更利于远程。
异步编程。如果一个项目是从零开始的,对于一个团队来说可能会是无从下手的,这需要有个人(owner)把代码的框架和结构给组织好。然后其他的人进入把坑填了,这样的效率会高很多。另外,不见面的结对编程,完全可以使用异步的方式进行,这其实就是多人干同一个pull request的方式。有Github这样的协议工作,远程编码变得很方便。
关于我们的远程工具,我们主要是使用:
开发环境
AWS,我们主要使用AWS,因为我希望团队在使用AWS的时候能够被潜移默化。 协作工具