当前位置: 首页 > 科技赋能

PingCAP 5年远程办公实践

时间:2024-05-20 01:32:07 科技赋能

2020年春节注定是一个不平凡的春节,全国上下都在抗击新型冠状病毒肺炎。

除了不出门、勤洗手、戴口罩等日常行为外,我们在想,在这种情况下,我们还能做什么呢?考虑到春节假期即将结束,返程途中感染的概率可能会增加。

延长隔离时间、在家远程办公,或许是普通人在这场战役中能为国家做出的最大贡献。

然而在我们国家,不管其他行业,至少我们所在的高科技行业还没有普及远程办公的文化,所以我们在这里给大家介绍一下PingCAP近五年来工程师远程办公的经验年。

本文将尽可能少地描述概念,更多地从实践方面讲述我们的实施经验,以帮助更多的朋友和企业在这样的特殊时刻尽快采取行动,为国家和社会贡献我们的微薄之力。

社会。

我们通过实践证明,在这个时代,至少对于像软件工程这样主要依靠脑力和创造力的工作来说,有足够的方法论和基础设施可以让远程工作像传统模式一样高效,有时甚至会有更好的输出(相信有些同学已经记住了早上拥挤的交通对心情和思维的副作用)。

下面谈谈一些具体的实施经验。

01 远程办公的管理理念 远程办公在国外并不是什么新鲜事。

在硅谷,尤其是新一代科技公司,几乎都有远程工作的基因。

这背后的原因有很多,我不会在本文中详细讨论。

如果有兴趣,可以看看《37 Signals《Remote》中的David Heinemeier Hansson一本书。

对我们来说,PingCAP从公司成立以来就一直在践行这种文化,主要有以下几个原因:一方面,包括我自己在内的几位联合创始人都来自工程师,他们本身追求效率。

自由的工作形式可以提高我们的工作效率,我们讨厌低效的形式主义;另一方面,对于一家初创公司来说,我们也不希望人才因为地域限制而无法加入我们。

一个很好的例子是我们的首席架构师 Siddontang,他也是我们招募的第一位员工。

由于家庭原因,他不想来北京。

他这几年一直在珠海的家中远程工作(这篇博客详细介绍了他) 个人经历:PingCAP,我们在企业文化方面一直提倡后者。

要做到这一点,我们需要建立一个强大的愿景驱动并落实到我们的各个细节中,同时尽可能为我们的同事创造一个开放、共享的工作氛围,幸运的是,这也与我们在开源领域的工作方向完美契合。

例如,在 PingCAP,我们从不进行任何形式的签到。

每周五我们都会有例行的员工TGIF分享,话题不限。

任何同事都有机会站上讲台分享自己的工作成果和经验。

,就连我们发给大家的周边产品,在设计和选材上都是经过精心挑选,并且限量供应,务求让每一位朋友感受到温暖和尊重。

这一切的工作看似与我们的远程工作没有直接关系,但事实上,它已经逐渐将我们转变为一个脱离形式、超越形式而存在的强大远程组织。

02 目标与计划管理 如果问的话,工程师团队什么时候最需要沟通?我想是时候制定计划和目标了。

软件工程远程工作首先需要解决的是,我们需要建立更清晰、更高效、可远程操作的目标和计划管理。

从宏观层面来看,在PingCAP我们依靠OKR工具来进行公司和团队的目标管理。

OKR是硅谷和中国众多互联网公司日益流行的目标管理工具。

经过探索,我们认为OKR是一个更适合远程工作团队的目标管理工具,因为相比KPI,OKR首先更强调团队成员共同设定团队目标。

这样做的好处是整个团队更容易就目的和目标达成一致。

就关键成果达成共识,始终保持团队目标导向一致。

其次,可以让团队成员更好地理解做好手头的事情对于团队和公司的意义。

这对于远程团队尤其重要。

非常有利于促进部门之间、人员之间的协作,使团队更加融为一体。

最后,OKR还有一个非常重要的特点:透明度。

在我们的实践中,每个团队都可以看到其他团队的 OKR。

大家制定好各自团队的OKR后,需要在公司层面公布。

确保每个人都理解。

在微观层面,比如具体项目计划的制定和执行跟踪,也需要同样程度的透明度。

我们的做法是,项目负责人为每个大项目建立一个全局的项目“地图”,力求确保即使是半路加入的同学在看到这张地图后也能清楚地了解目前的情况是什么、需要什么。

资源链接在哪里,谁负责,风险在哪里。

这对于远程工程团队的管理者来说更为重要。

以下是一个示例:某个项目项目跟踪表。

当我们能够在整个公司清晰、高效、透明地制定、发布和管理我们的目标和计划时,远程工作就初步变得可操作了。

03工欲善其事,必先利其器。

既然我们在这里讨论更多的实际操作,那么我们就重点讨论一下我们在软件工程的远程办公环境中使用的工具。

我们需要一个比较长的时间来逐步建立企业文化和目标管理,工具的引入会比较快地看到效果。

俗话说,工欲善其事,必先利其器。

使用好的工具会事半功倍。

PingCAP 的主要产品 TiDB 是一个开源数据库。

我们开发的主要工作流程构建在Github上,并且完全向社区开放。

所以我们的工具链也是以Github为中心,串联其他工具。

以下是完整的工具列表(其中很多工具都有国内替代工具,如果公司没有像PingCAP那样员工分布在全球的,可以根据实际需要进行选择。

): * GitHub:代码托管、公共RFC、社区问题反馈、产品发布、代码审查等。

*Zoom:在线会议。

* Slack:即时通讯、机器人消息中心。

* 微信、商务微信:即时通讯(是的,我们两者都用,但主要是商务微信)。

* 在线文档:文档协作、幻灯片、表格。

* 邮件、日历。

* Confluence:内部文档,包括已完成的设计文档(如内部RFC文档)、Wiki等。

* Jira:Bug和Milestone跟踪。

* Trello:看板,记录重要客户和事件的备忘录。

* Jenkins:持续集成,每日构建。

下面通过一个小例子来介绍一下我们的研发工作流程: 1. 假设我们需要创建一个新的函数。

从构思开始,第一个可能使用的工具就是在线文档。

负责的同事将起草一份文件并概述其中描述的一般想法,然后通过共享功能与相关同事共享。

大多数时候,这些设计文档会分享给工程师所在的所有电子邮件群组,任何人都可以评论或编辑。

2.通过沟通讨论最终确定文档后(我会在下一节重点介绍沟通链接),将同步到Confluence和GitHub(如果可以公开,英文版将发布到GitHub) 。

3.然后将项目拆分为多个子项目,通过JIRA分配给特定人员,完成后直接提交到GitHub。

项目该模块的Reviewer(也包括Maintainer)会参与Code Review,收集两个LGTM(Looks good to me),通过各种持续集成工具的测试后,最终合并到主干中。

修复错误的过程类似。

值得一提的是,我们开发了一个机器人,可以将 GitHub 中社区的问题同步到内部 JIRA。

优秀的工程师的创造力是无穷无尽的,尤其是在远程工作的背景下。

我们强烈鼓励工程师通过自制工具提高工作效率。

除了上面提到的Issue机器人之外,我们的Chaos测试(最近已经开源了,同学用App Script自动生成了自己的周报(同学写了一个小工具github-cli(Github项目动态;我写了一个Python中的小工具)脚本,收集Trello上指定Board中的卡片的每日更新,并将摘要和电子邮件发送给我......这样的例子有时我真的很佩服每个人的想象力和动手能力,我们坚定不移。

我们的 IFTTT 机器人会收集我们机器人同步的提及 TiDB 和 PingCAP 的推文。

每天下班前自动生成的每日动态报告 每周会议前自动生成的每周报告。

按照模板提前生成的周报提醒大家准备每周企业微信机器人SRE机器人自动合并PR和Cherry-pick到Release分支。

它介绍了很多有趣的事情。

其实我想表达的是:远程工作,如果可以交给机器,尽量不要用人。

为此,自动化至关重要。

尤其是在线协作,多一个人的参与就意味着更多的沟通成本。

我对工程师团队选择开发相关效率工具有几点建议: 1. .选择具有开放 API 的工具,以方便编写机器人并产生协同作用。

2.避免过于复杂。

选择一些简单易用的工具并充分利用它们。

3.使用Slack等IM作为各种工具的支持。

Message Hub试图让人们能够在一处一目了然地了解事物的状态。

另外,如上所述,由于我们也有和一些海外同事、客户、海外社区的沟通需求,所以我们使用的主要工具基本上都是国际化的。

如果你公司的业务全部在中国,这些工具基本上都能找到国内或者私有部署的替代品,比如ONES、Tower、Gitlab等。

04 远程友好的沟通协作机制 如果上面讨论的工具只是基础,那么远程工作最大的挑战就是沟通。

对于一个成熟的团队来说,良好的沟通一定是必不可少的,甚至沟通的质量也决定了做事的质量。

并不是说因为远程工作的限制,沟通就会减少甚至没有。

相反,在这种环境下,我们的沟通可能会越来越细致,但形式并不局限于面对面的会议。

在谈我们的沟通实践之前,我想先谈谈沟通的意义。

首先,我认为沟通最重要的意义是:信息拉平。

对于远程团队来说,用通俗的语言来说:每个人都需要互相知道自己应该做什么、团队在做什么、自己应该做什么。

在很多公司,这是通过各种规模的会议,甚至是通过喊叫来完成的。

但在远程团队中,沟通需要更加透明。

即使是远程会议,大多数时候仍然是传达信息的最有效方式。

Zoom等视频会议工具提供了良好的平台,智能手机和移动互联网的普及也让会议参与变得更加便捷。

这里还要提一下的是,PingCAP 是 Zoom 的重度用户(也是企业客户)。

Zoom的用户体验确实很棒。

就连我们全公司的会议都是通过Zoom完成的(昨天刚刚得知一个惊人的消息)这个振奋人心的消息也是对Zoom的友好广告。

目前国内访问zoom.com.cn的用户可以无限次免费使用,直至疫情得到有效控制)。

从形式上来说,在PingCAP中,由于会议基本上都是远程学生参加,所以所有会议默认都是在线的。

从内容上看,会议大致有两种,一种是例行会议,一种是针对具体业务的沟通会议。

我相信这与其他公司没有什么不同。

我说一下我们认为比较好的一些做法:在PingCAP中,所有团队(包括虚拟团队)都会定期开会,一般是每周一次,还有一些比较重要和紧急的。

该项目将以天来衡量,会议的时间和时长都不会确定。

每周例会是团队成员相互了解以及每个人正在做什么的好机会。

管理者还可以知道方向是否倾斜,进度是否正常。

还有一点,我分享一下关于会议的一些做法: 1、对于像例会这样信息扁平化的会议,经理最好不要在这样的会议上直接做出决定。

因为很多信息可能是刚刚收到的,立即做出的决定不一定是经过深思熟虑后做出的。

另一方面,信息可能并不全面,需要进一步的跨团队沟通。

2.充分利用日历。

我建议研发团队内部的日历对其他人是可见的(这一点需要财务、业务、执行团队考虑)。

订阅与你相关的同事的日历是一个很好的信息分级渠道。

3. 会前发送议程,会后发送会议笔记给参会者,并记录在Wiki中。

4、尽量少召开股东大会。

亚马逊的“两块披萨原则”同样适用于会议(这说起来容易,但实际上做起来非常困难,尤其是在跨团队协作方面,我们也在努力)。

以下是我们亲身经历过的一些陷阱。

由于远程关系,在PingCAP我们一直要求尽可能使用文档进行沟通。

早期我们确实严格执行了,但当时我们非常依赖在线文档,所以我们遇到了一个问题:协作功能很棒。

但索引功能很弱。

很多时候,记录某些内容的文档可能找不到,或者可能有多个文档(许多甚至只是讨论论文)描述同一件事。

为了解决这个问题,我们后来引入了Confluence,它用作团队wiki,主要用于信息索引和搜索功能。

我们非常依赖Confluence,也玩过很多花样。

这里我只给出几个最佳实践示例: 1.为每个团队创建一个团队页面(类似于上面提到的“地图”概念),将与这个团队相关的所有内容都索引起来,以便新人一目了然。

例如,以下是 TiKV 团队的示例: 2. 团队周报和个人周报。

各团队的周报告将进行层层汇总总结,并在周常务会议前发布。

所有周报均在 Confluence 中编入索引。

3、日志,这个是我们比较感兴趣的,对于一些探索性的工作,比如一些小实验,性能测试,一些特殊场景的优化等等,我们也会详细的记录下来,形成实验日志。

Confluence 可以通过关键字检索这些日志。

首先,它们可以作为将来实施的材料或输出成文章,其次,它们可以防止将来的重复工作。

全面引入Confluence进行内部协作后,我们的文档信息碎片问题得到了很大的缓解。

唯一的不足就是Confluence的移动版实在是不尽如人意。

希望Atlassian团队能够在未来改进它。

另一个陷阱来自即时通讯工具的选择。

这也许不是一个陷阱,更多的是微信平台本身并不是针对办公场景而设计的问题。

由于我们国内的大部分客户都倾向于使用微信作为沟通渠道,作为一家toB公司,我们必须适应这个现实(比如我的手机上有几千个微信群)。

这个问题导致了我们IM通讯的碎片化。

而远程工作环境将进一步放大这个问题。

可能同一件事,有的同学看微信,有的同学看Slack,这就导致了消息不对称。

此外,微信是一个封闭的系统。

如果没有Open API,很难通过技术手段同步到平台。

还有一个问题是,微信的使用方式,很难将工作和生活分开,这有时是很苦恼的。

企业微信的推出在一定程度上缓解了这个问题。

但由于企业微信是一个新的IM,是一个封闭的系统,信息碎片化和海外同事使用习惯的问题仍然存在。

对此,我们还在探索中。

05 远程工作环境中的自我管理 远程工作的另一个非常重要的方面就是个人的心理建设和自我管理。

这因人而异。

事实上,很多人并不适合长时间在家工作。

例如,当我远程工作时,我必须离开家去咖啡馆或 WeWork 这样的地方才能进入工作模式。

但我们的首席建筑师可以将他的书房用作办公室五年。

人无疑是最重要的部分,但在这篇文章中,我不想展开太多。

有机会我会详细讲一下。

在这篇文章中,我希望关注更通用的方法。

在偏远的环境中,员工需要能够克服孤独感,而且因为周围没有同事,所以需要很强的自律能力来克服倦怠感。

此时,我推荐使用一些个人的时间管理工具,比如番茄钟、日历等。

但就像公司挑选工具一样,不要贪太多,选择最好用的彻底。

另外,在生活中保持规律的作息习惯也会有帮助。

这在上面引用的 siddontang 博客中提到过(Online and Offline(在线和离线)PingCAP 并不是一个适合所有人的完整远程工作。

作为一家公司,我们仍然在各个主要城市(北京、上海、广州、深圳)设有办事处,成都,杭州,硅谷)。

上一节提到,远程工作看起来很美好,但它可能并不适合每个人。

很多时候我们仍然需要从线上走到线下。

和同事一起吃饭聊天。

正因为如此,我们的解决方案是:PingCAP采用远程工作方式和文化,但仍然在各地维持办公室,所以我们有一个不成文的做法。

当每个城市有超过4名员工时,我们可以找到一个办公室。

各地办事处的运作也具有PingCAP的特点。

很多传统企业的当地子公司通常都是有特殊地点的办公室,比如销售、测试、研发等。

但是,由于我们的远程工作文化,我们在各地的办公室实际上更像是一个虚拟的组织,这意味着学生在同一个团队中可能属于不同的办公室,或者相反,每个分支机构可能有不同的办公室。

来自不同职能和团队的学生。

这样做有好处: 1、作为一家toB公司,我们国内的客户主要分布在几个大城市。

在客户当地设立分支机构可以更方便地开展客户支持和营销活动。

2. 不同部门的同事在同一个城市的办公室,有助于建立更加多元化和健康的文化,并使跨团队协作更加顺畅。

办公室经理更感兴趣的是当地办公室具体事务和活动的管理和组织。

此外,每个办公室均设有一名管理员,负责处理日常事务。

因此,我们的团队建设通常有以下几种类型: 1、当地办事处有TB的资金,可以组织自己的活动。

2.每当团队去同一个地方旅行时,整理一下团队的TB(当然我们大部分都是程序员,基本上就是吃饭吃饭)。

这里提到的是商务旅行。

顺便说一句,我们建议远程研发团队的管理者尽量每月与团队的大多数成员进行一次面对面的会面。

这些旅行通常可以与客户拜访一起安排。

线下沟通可以让线上沟通更加顺畅。

总的来说,远程工作并不完美。

像我们这样的科技公司有天然的文化和监管环境,但仍然有很多地方有改进的空间。

欢迎大家给我们更多的建议。

很高兴能够在国内远程办公文化尚未普及的情况下,在这么长的篇幅里与大家分享一些实施经验。

在这个特殊时期,我们足不出户就能工作、创造价值,也算是为社会做出了小小的贡献。