我6年的远程工作
前言
想记录一下这6年的远程工作,所以趁这个闲暇的星期天下午,写下了这篇文章。不吹不黑,以客观事实的态度,给大家呈现一个真实的远程工作者的状态。
可能和大部分的远程工作者都不一样,我几乎是大学毕业,第一份工作就是远程的形式,也就是第一份工作就到了日事清,怎么也没想到,这一远程就坚持了6年,虽然中途也有些插曲,但总的来说,我的工作基本都是远程状态,所以对远程工作这个话题,还是有些话可以说的。
为什么会远程
以下内容有点流水账,一句话:
毕业找工作遇阻,机缘巧合,来到了日事清,入职没多久就开始远程工作
我是2014年本科毕业,专业是电子信息工程,虽然专业和计算机沾边,但更多是偏向硬件,底层电路,嵌入式。在大学的4年时间,和室友还有隔壁寝室的同学一起组队,参加了很多电子设计竞赛,他们主要是负责电路的设计,我主要负责计算单元的编程,比如51单片机,stm32,FPGA等,不过那时候基本都是写C和C++以及FPGA专用的Verilog。
在快大四的时候,和同学给一老师开发一套管理系统,需要软硬件结合。这位同学做硬件部分,我来负责服务器和客户端的开发。当时还比较流行B/S的说法,浏览器 + 服务器的模式。因为这个机会,我开始接触前端,发现前端真的是一个宝藏行业,比嵌入式开发有趣太多,而且不用接触底层硬件(有点讨厌焊锡的味道)。这么看来,我算是从这个项目开始入门前端的吧,也从此决定转前端开发。
毕业找工作的时候,开始恶补前端知识,但因为自己能力实在太菜,错过了很多大厂的招聘。后来在毕业前几个月,经一学长介绍,去了一家做轮船发动机控制系统的公司实习,做嵌入式开发,和我的专业高度相关。但心里一直没有放下做前端开发的念想。后来实习期还没结束,在缘创派上结识了我们的CEO——石叁,经过CTO简单的面试,在2014年7月份入职了日事清。
当时日事清在成都还有个简单的办事处,不过那时候公司的业务还不仅仅是日事清,还有外包业务,所以我最开始是没有远程的想法的。入职2个月左右,公司在成都这边的业务结束了,所有的小伙伴会搬回北京,CEO也问我想不想去北京,我当时是一百个不愿意,后来经过商议,决定让我在成都远程办公。我的远程工作,就这么毫无期待的,在2014年9月份开始了,记得那年夏天特别热。
远程体验
开始很新鲜
刚开始远程的时候特别新鲜,想着自己不用每天早起搭地铁,睡到早上8点半,起床洗漱吃个早饭就可以开始工作,真是完美。
不用打卡,只要完成每天的任务就可以,工作时间特别自由。刚开始一段时间经常是早上起得特别晚,为了完成任务经常会工作到晚上2、3点,然后继续早上起不来,如此恶性循环。
工作地点也可以特别自由,成都冬天和春天的太阳特别难得,在天气特别好的时候,可以去公园里找个阳光充足的地方,窝在吊床里办公
父母在昆明,有时候会在周末搭个动车去昆明,然后在昆明工作一段时间再回成都,还可以顺道去洱海边敲几行代码
在家里待烦了,可以去咖啡厅写代码,装逼也好,但偶尔去一次咖啡厅工作效率会非常高,在有点声音的环境下,会更容易专注
逐渐适应
大概远程3个月之后,最初的新鲜劲开始慢慢消失,逐渐意识到如果还这样没有时间规律的工作下去,身体和心理,迟早都会出问题,遂开始制定一些规范:
1. 必须早起,不能想着工作可以堆到晚上来做
2. 在规定的时间办公,和去公司上班的同事保持一致
3. 每周必须去3次健身房,必须运动,流汗,分泌多巴胺
4. 每周可以有2到3次外出工作,不能总待在家里工作
我博客首页上的那句slogan就是这段时间的感悟:自律,才能更自由。自律,不仅仅是表示一个人能按时完成团队分配的任务,更应该克制个人的行为和习惯,看似自律和自由有所违背,但自律,意味着更高效的时间利用,从长远来说,可以让人更自由。
压抑期
人毕竟还是群居动物,长时间一个人办公,工作上积累的情绪无法排解,真的会把人压得喘不过气。
我应该算是一个比较能独处的人了,容易静得下心来,但长期的远程,真的快把我都整抑郁了。
长时间和同事的沟通只能靠文字,语音,视频,无法面对面沟通,体会不到对方的情绪,每天就自己一个人在家里上班。而且最开始由于条件所限,办公桌就在卧室里,起床就能看到电脑,工作和生活极难分开,非常难受,有一段时间,是真的想放弃远程工作,感觉远程并没有想象的那么好。
回到正轨
从2016年开始,每年会有大概2个月时间去北京和同事们集中办。北京的人是真的多,每次上班挤完地铁,还得接着挤办公楼的电梯,有时候电梯实在等不到,还得爬楼梯上去,老难受了。但还是很开心,和同事们在一起工作,面对面交流的感觉是视频永远替代不了的。
2018年初,搬了家,终于有一个独立办公室了,虽然小,但好歹不用和卧室放在一起,从物理上把办公区和生活区隔离开。买了一个电动升降桌,方便站立办公,预防职业病,再置办了一些办公用品,好好改造了一下办公区。如果正在远程办公的你,也强烈建议好好打造一下办公环境,这点投入是非常值得的。
2018年底,我们在南京也组建了团队,前端团队变得更大,责任也就更大了,出差的频率也开始增加。我现在在成都,北京,南京三个城市之间,远程和集中办公交替着。
聊聊远程工作
随着互联网各种办公软件的崛起,如今想要开展远程工作的基础条件已经完全具备。而能否高效进行远程工作,主要是各种软实力在决定,一个是远程工作者的个人能力,一个是团队的远程协作能力。
远程工作者的个人能力不多,核心就要求两点:自律 + 工作胜任力。
自律,也可以叫做自我管理的能力,肯定是远程工作者需要的第一能力,也是最重要的,没有这一项,其他一切免谈。一个人在家办公和一群人在公司上班,对上班的个体来说,有非常大的不同。一群人在公司上班,由于群体在一起形成的监督效应,你是不好意思一会儿看看手机,一会儿刷刷视频的,虽然办公环境会有人为干扰,但总体来说对个人影响不是很大,尤其是程序员,戴上耳机,基本就与世隔绝了。但是在家里,如果没有自制力,你一会儿刷刷抖音,一会儿刷刷知乎,谁也看不到,时间就这样过去了。如果是一个有责任心的程序员,可能会晚上加班把白天没有做完的任务给补上,但是这样会搞得自己特别累,没法长久。
工作的胜任力,这自不必多说,不管是在远程还是在公司办公,都必须有胜任工作的能力。
对于一个支持远程办公的公司来说,团队的远程协作能力才是真正的核心。协作流程决定着一个团队能否在远程时也保持高效,另外对于开发团队来说,开发团队所用的工具链,能否高效的支持远程开发,也决定着一个开发团队的投入产出比。
日事清的大本营一直都在北京,从最初只有我一个人在远程,到现在我们在南京也成立了团队,还有部分同事在辽宁朝阳,长沙,广州远程工作,所以对于我们团队来说,一套高效的远程协作流程是非常重要的。
开发团队的远程协作
沟通,消除信息的不对称,估计是大部分远程团队遇到的首要问题。对于我们来说也一样,但日事清就是用来解决这个问题的。
我们研发组有一个自己的开发计划:「迭代开发」,所有待开发的任务全部放到「规划池」这个卡片,并打上对应的标签,标明任务的优先级,然后分配对应的开发人员,并沟通开发周期,开发人员在开始做的时候,会把任务拖到「开发中」,任务完成之后,开发人员会打钩,然后拖动到「测试中」,并在任务里@对应的测试人员,测试完成之后,会拖动到「待发布」里,等到发布时间,负责发布的同事会新建一个卡片,命名规则为:发布-xxxx-xx-xx,以发布当天的日期作为标记,并把所有发布了的任务拖到这个卡片里,同时再新建一个发布公告任务,在任务里简要写完本次的发布内容,并@全公司的人。
对于复杂的功能,开发周期一般都比较长,除了在「迭代开发」里建一个任务,还会单独建立一个子计划,用来对需求做拆分和排期,方便进度追踪
除了「迭代开发」之外,我们还有其他几个和产品以及测试相关的子计划:
需求会之前,产品会从「产品需求」里把任务移动到「迭代开发」的「规划池」里,每次需求会,我们所有人只用聚焦在「迭代开发」这个子计划里即可,回顾我们之前的开发任务,以及目前正在开发的任务的情况,以及即将开发的功能。
远程站会
为了加强团队成员的沟通,我们会在每天下班之前开30分钟左右的站会,沟通一下大家当天的开发情况,有没有遇到什么问题,以及有什么需要分享的。所有的沟通记录都会保存在日事清的笔记里:
日事清的笔记支持多人实时在线编辑,每次开站会的时候,主持人会新建一篇笔记,并共享屏幕,参与站会的同事可以挨个说自己做了些啥,有什么问题需要讨论,主持人随时记录,如果有需要分享图片或者文件的同事,每个人都可以直接往这篇笔记里上传,主持人那边可以实时显示其他同事上传和编辑的任何内容,提高会议效率。
远程开发工具
gitlab
我们2018年以及之前都一直在用github的企业版,就是不想浪费时间去维护gitlab的私有部署。但是2018年底,我们开发团队扩大了,同时私有项目也变得更多,考虑到用github的成本,以及国内使用github的网络问题,最终还是决定自己部署gitlab。
gitlab真的是小型开发团队的福音。我们都知道github的pr做代码审查非常的便捷,在用了gitlab一段时间之后,发现gitlab并不比github弱多少。代码审查一样非常便捷,也可以基于代码进行讨论。
还有gitlab-ci,自动化做持续集成持续部署,尤其是把gitlab-ci部署到k8s,利用docker的生态,可以非常方便的做各种自动化处理,并不逊色于travis和circle-ci
gitlab也可以和实时通信工具打通,我们团队的实时沟通工具用的钉钉,钉钉里也有gitlab机器人,但是这个机器人比较弱,能处理的通知类型太少了。基于gitlab的开放接口和钉钉提供的开放接口,我们做了一些自定义通知工具。这样代码仓库里有任何动向,都可以实时发消息到钉钉的群里,提高效率。
ngrok
之所以要把ngrok单独拎出来说一下,就是因为这个工具在远程办公的时候关键时刻会起到非常大的作用。
我们有自己的线上开发环境,在大多数情况下,后台和前端需要联调的时候,后端会把代码推到线上开发环境,前端直接连线上开发环境进行调试即可。但有的时候会遇到问题,后台又不好排查,需要让前端直接访问后台的本地环境。大家在一个局域网还好说,但是远程,就必须想其他办法了。
ngrok就是这么一个工具,它可以方便把本地的开发环境映射到公网去,可通过公网访问本地的服务器。ngrok最早期版本还是开源的,但是ngrok2出来之后就没有开源了。我们在线上用ngrok旧版搭建了一个ngrok服务器,一样好用,感谢开源社区。
结语
远程工作并不适合每个人,也并不适合每个团队。对于个人来说,你需要有更强大的自我管理能力,自律,要耐得住寂寞。对于团队来说,没有一套比较好的协作流程,远程的效率必然得不到保障。但远程也有他的魅力,可以节省通勤时间,在工作地点的选择上更加自由,工作环境也更加可控,支持远程的团队,可以在全国,甚至全球范围内笼络人才,让组织的生命力更加顽强。尤其是今年初爆发的疫情,对于支持远程办公的团队来说,应对起来肯定会更得心应手。