爱范儿技术部门如何远程工作:一份给其他小微企业 CTO 和 CIO 的「作弊手册」
冠状病毒疫情严重,众多企业开启远程办公模式。
爱范儿除了是媒体公司,也可以说是一家技术公司。但不管是哪家公司,技术部门总是天然对远程工作友好地 — 毕竟,程序员的产出只是代码嘛。有一台计算机,有国际互联网,有良好的工具以及工作流程的武装,有强的自制力,坐在哪里似乎区别并不大。
但是事实上,想搞定远程办公的系统建设,仅凭几个支持实时协作的软件服务是远远不够的。下面我们以自身多年的远程办公经验,系统性地向大家介绍远程办公所需要的几大必要构成及其低成本的实施方案。
一、安全
技术工作的一个特殊性是经常需要接触生产环境。对于爱范儿来说,生产环境的一部分面板等已经完全不需要传统的 VPN 进行访问 — 因为传统的基于网络身份的安全模型已被证实为伪安全 — 相反,这些资源都已经通过符合 Beyond Corp 模型 的 Identity Aware Proxy 进行保护。只要访问者可以证明自己可以通过双因子认证的 SSO 认证,则可以访问受保护的资源。举个例子, 爱范儿生产环境的 Grafana 就可以直接在任何一位工程师的手机上直接访问,只需 SSO 便可。目前,爱范儿使用了开源的 Pomerium 软件,配合 Gsuites 的 OAuth 完成认证。对于没有 Gsuites 的公司,也可以使用 AAD/ADFS 进行集成。甚至也可以使用 GitHub 的 OAuth 作为目录。
在某些时候需要使用 VPN 时,我们选择的设备是有点过于「企业级」的思科 ASA 防火墙,使用 AnyConnect 客户端便可安全的连接到企业内网。选择使用 ASA 的主要原因是爱范儿企业内网以及生产网络中均使用了思科设备,可以大量参考 reference design 进行网络设计,并且 AnyConnect 客户端的体验也算不错。ASA 的唯一缺点可能是硬件以及授权都太贵。开源的选择可以自建 OpenVPN。如果预算受限,可以去闲鱼找一找二手 ASA 5505 防火墙(大约 200 人民币)以及 Cisco 819(Ebay 售价大约 40 美元)系列路由器。注意,ASA 5505 本身只能最多支持 25 个远程连接数,而 Cisco 819 虽然也支持 AnyConnect,但其并不支持高级的 VPN 特性。
由于 VPN 以及网络配置对一般的小微公司都较为复杂,爱范儿在此也贡献出了公司内部的核心路由器以及防火墙的部分配置文件供参考,并快速部署。这部分配置文件可以在爱范儿的 BitBucket 中找到 (参考配置使用 Cisco ASA 防火墙以及 Cisco ASR 路由器)。
二、沟通
和公司其他部门一样,技术部门的沟通也是集中在几个渠道上的:Slack、微信(或企业微信)、电子邮件、Google Docs 以及 Wiki。当然,绝大部分的交流都是通过 Slack 进行的。
由于协作的核心基本是 Slack,我们也围绕着 Slack 开发了诸多集成工具(最新的例子是自动化部署工具 laser)。在 Slack 中,除了按照团队功能(例如前端、后端、移动)建立的 channel 之外,也有按照业务线以及通用职能(例如 oncall 频道负责值班以及事故处理)建立的 channel。更有「大群」#dev 用于不限制主题的讨论。目前,爱范儿技术团队主要使用的几个 channel 有 大群、代码评审频道、生产环境通知及操作频道、值班/事故处理频道、后端团队频道、前端团队频道、知晓云频道、玩物志开发者频道。除此之外,有值得专门讨论的项目时,也会按需创建相关频道。
Slack 的线索相关讨论(sub channel)功能可以非常好的避免污染聊天时间线。除此之外, Slack 的 @channel 功能也非常实用,特别是需要冻结代码分支时。若不想使用 Slack,也可以使用 Microsoft Teams 或 Google Hangouts Chat。Mattermost 是开源的 Slack 替代品,也可以试一试。
与其他公司或与内部非技术团队的协作时,我们也不能免俗,主要使用微信以及企业微信。对于某些老顽固公司,甚至也需要使用 QQ。始终以来,我们的一个愿望是微信群与 Slack 的互通,但由于 Web 微信过于不稳定,因此无法稳定的做到双向通讯,只得作罢。
重要的、需要确认的事项,写电邮(并抄送相关邮件列表)是个很好的选择。邮件列表的一个特别好处是可以事后任何人查阅(即便此人当时尚未入职)。建立邮件列表,可以使用 Google groups 或自己架设 Mailman。与行政财务打交道时,相关流程都使用企业微信进行。
三、会议
如果需要约会(请不要故意曲解),则可以使用日历。在日历里不光可以邀请同事(或邮件列表中的所有人),还可以预定会议室。虽然 Google 日历与 Hangouts Meet 有很好的原生集成,但考虑到国内的实际情况,爱范儿使用了 Zoom 会议系统,既可以无感的接入会议室,也可以与 Google 日历集成,在会议平板上轻点即可与在外同事召开会议。视频会议配合屏幕投射(AirPlay)可以很好的提高工作效率。日历功能应该是所有企业邮箱的标配了,目前 Zoom 会议系统对国内也完全免费。除了 Zoom 之外,也可使用思科 WebEx 或企业微信会议。一般的视频软件例如微信/ QQ 视频由于无法投屏或使用白板功能,不建议工作场合使用。
视频会议,接通前请确认穿好衣服,并在背景中不要出现不宜物品(例如三天前的泡面盒子),确保你的小孩不会突然打断你的会议(这里有个反例),也保持会议中背景安静(例如你的狗不应在会议时狂吠)。
四、开发
为了防止技术团队讨论时口头讨论与实际情况不符,爱范儿的技术团队在做功能之前会在内部 Wiki 中通过撰写设计文档并在 Slack 中请求其他人审阅的方式确保工程师的设计的「形状」是正确的,并通过评论功能进行带有上下文的讨论。这可以使用 Confluence 实现,也可以通过 Google Docs 或类似产品(例如 Office Online 甚至是 Pages)实现。(上图为爱范儿旗下知晓云产品的云函数功能的设计文档)
说到任务分配,爱范儿的任务以及缺陷追踪都是通过 JIRA 来进行的。我们的开发方式是典型的敏捷方式,对于大部分开发团队来说都应不算陌生。对于轻量级的团队,也可以使用 Trello 或其他类似的产品帮助安排任务。具体的选择,可以参考附表中的简单评论。
由于爱范儿团队主要使用 Mercurial 进行版本管理,因此代码都在 BitBucket 中管理,但由于 BitBucket 对 Mercurial 的支持即将停止,目前团队也在考察使用 Phabricator 替代 BitBucket。对于惯用 Git 的团队,也可以使用 GitHub。若希望自建,GitLab 也是不错的选择。
代码写完了,需要协作进行代码审查时,可以使用 Crucible 进行。Atlassian 的开发者全家桶极为方便,可以与上面的大部分工具非常好的集成。爱范儿的要求是在提交好代码后,在 Slack 里「喊一嗓子」,获得两名同事的 LGTM(looks good to me)便可合并回主线。当然,代码审查并不是戳橡皮图章,而是需要认真的阅读代码,确保代码质量符合最低标准,并且「形状是对的」。
若有需求进行大型文件分享,技术团队的选择是 Google Drive 以及私有部署的 NextCloud。但技术岗位似乎大文件传递到本地处理的需求并不强,大部分时候都以留在服务器磁盘上或使用 S3 传递为主。小文件传递则一般使用 Slack 解决。
五、与产品设计团队的协作
在大部分的情况下技术团队需要和产品、设计团队协作完成项目,在与产品设计团队协作中的工具主要有三个阶段的场景,分别是:需求文档阶段、设计稿阶段、效果走查与缺陷反馈阶段,不同的阶段协作重点也会稍许不同。
需求文档协作
- 石墨文档
- 墨刀
- 蓝湖
这个阶段主要是产品经理的协作,设计于技术团队「看」多于「做」,大部分产品需求文档主要包含需求描述和原型两个部分,需求描述的部分可以通过「石墨文档」来完成,「石墨文档」支持在线评论,方便直接多人讨论,另外「石墨文档」还有思维导图和白板功能,能对文档的内容做进一步的补充。
原型的部分可以通过「墨刀」来解决,「墨刀」可以从零开始搭建你的产品原型,也可以从官方提供的大量模版、组建基础上创建你自己的原型,最终能直接生成可操作的交互原型,并支持一些简单的转场效果;在协作方面,支持多人修改与评论、历史版本等。如果你是用 Axure 的用户则可以使用「蓝湖」来上传原型文件,支持在线展示评审。
▲「墨刀」操作界面
▲「蓝湖」支持 Axure 的文档上传分享
设计稿协作
- 墨刀
- 蓝湖
设计稿的输出上,和技术有交集的主要是 UI 类的设计,常见设计工具的有 Sketch、Adobe XD 以及 Figma,目前使用 Sketch 的用户较多,这里主要以 Sketch 为例介绍相关的协作工具。
这个场景主要满足两个需求:设计稿讨论、切图参数标注。这两个功能「墨刀」与「蓝湖」都是支持的,其中「蓝湖」除了支持 Sketch 的标记导出,还支持 Adobe XD 和 PS 的导出 。
特别介绍下设计稿标记讨论功能:用户可以对设计稿的任意区域进行打点标记评论,这样可以更加直观的对设计稿内容进行讨论,极大地提高了设计稿线上评审的效率。
▲ 「墨刀」的打点评论功能
这两个阶段在产品功能上有一些重合,增加一个对比表格方便大家选择适合自己的工具。
效果走查与缺陷反馈
- Teambition
在开发完成初稿后,产品和设计人员对最终交付内容进行验收,这个阶段主要任务在于问题的记录与跟踪解决。除了可以使用 JIRA 管理整个生命周期之外,「Teambition」的任务管理也可以很好地解决该问题,并且单个任务的评论功能非常强大,可以直接粘贴截图、上传操作视频、at 相关同事等。并且在整个产品开发的流程上也有很好地支持,整个团队可以用来作为项目管理的工具。
▲ 「Teambition」对敏捷开发全流程的支持
六、秘诀
当然,使用工具只是开发团队进行远程工作的一部分。远程工作可以成功的另几个秘诀是 ——
确保有一个专门用于工作的空间,卧室并不算合适。生活与工作有明确的分界线才可以让工作效率更好,生活质量更高。
管理者的支持是必不可少的。作为公司的 CTO/CIO,要确保团队的注意力集中在 Slack 或其他选择的沟通工具上。有条件时,甚至应考虑全员全时保持语音在线,方便问题沟通。毕竟,人类沟通的最好方式仍然是口头的交流。除此之外,也需要让员工能确切的感受到「这只是上班的另一种形式」而已。毕竟,远程只是一种形式,工作才是本质。和员工保持一定的交流频率,方可确保大家都在状态中。
七、购物车
最后做一个总结和陈列,针对不同的场景,罗列了最优和可选方案,以供大家从自身需要进行选择参考。
附表中除了 Gsuites 之外,其他的产品即使是国外产品也都可在国内流畅使用。当然,对于技术团队而言,访问 Google 也算是基本功之一 —— 毕竟有诗曰「内事不决问百度,外事不决问谷歌,X 事不决问天涯」。