远程软件工程师的10个最佳实践
【引子】最近又要关注研发效率,《如何提高团队的研发效率呢?》是一些总结与思考,当然,阅读与学习也必不可少,这一篇编译自 “The 10 Best Practices for Remote Software Engineering”,作者Vanessa Sochat,发表在“Communications of the ACM, May 2021, Vol. 64 No. 5, Pages 32-36 10.1145/3459613”,很有参考价值,融入了老码农的一些视角和观点。
从表面上看,当考虑软件工程师研发效率的时候,我们可能会想到时间管理、沟通和任务完成的有效性。问题是完成任务或者有一个预期的时间表并不一定等同于生产力。对于远程工作的软件工程师而言,正面临着常规思考、责任和目标设定的新挑战。
最佳实践之一:做自己关心的事情
不言而喻,快乐和兴趣是核心要素之一,然后才是生产力,重要的就是致力于我们所关心的项目或软件。事实上,快乐的工作者更有效率,糟糕的心情对生产力是一种损害。
因此,后退一步说,在讨论任何最佳实践之前,应该享受软件工程的实践,让它成为我们日常生活的一部分。如果不确定自己是否处于正确的状态,就根据工作中的那些小任务来评估一下。把一天的工作分解成小的事情或者任务,然后记下自己是否每一件都喜欢。
例如,一个软件工程师可能会意识到他们喜欢在 GitHub 上公开开源代码和编写文档,但是不喜欢在用户论坛上回答同样的问题。弄清楚这一点将有助于软件工程师推动那些更符合他们志趣的项目和职责。如果不能识别,或者所有被识别的项目都被认为是负面,那么是时候批判地看待自己的角色了。如果工作不是从正确的方向开始,就不会有一个最佳实践的清单可以让我们快乐。如果工作中没有让我们快乐的事情,那么将很难有规律地保持高效率。
最佳实践之二:为自己定义目标
作为软件工程师,有时并没有我们的职业阶梯或者上升通道。在很多人所在的团队里,可能也没有那个意识到并支持我们个人与职业发展的管理者。这可能会有问题,因为目标设定通常会对绩效产生正向影响。
在这种情况下,尤其是当与团队远程协作的时候,我们必须把个人发展掌握在自己手中。这意味着需要考虑自己想做的工作,或者更广泛一点,我们想在短/中/长期内完成的目标是什么。例如,短期的目标可能是学习一门有用的新语言。如果感到孤立无援,目标可能是与一个新社区的互动,或者在日程安排中创建一个新任务,以便与同事讨论项目或工作。如果喜欢研究,目标可能是提交一篇论文。
短期目标可能是一周或一个月的目标,可以是解决一个特殊的问题,给软件系统增加一个特性,或者写下自己的思考。这些目标对我们的生产力很重要,可以更好地理解我们的工作是如何融入到自己的长期发展中的。如果和同事或上司分享自己的目标,他们可能会发现这些目标重要性,并且有兴趣支持或关注我们的进展。
最佳实践之三:定义自己的生产力
如果能够明确地得到某种产出,那么,可能很容易根据产出的单元来衡量和定义生产力。然而,现实是,我们不仅需要写代码,还需要与人进行交互,澄清需求并给出设计方案等等。虽然可以根据代码量或文档输出等研发活动来定义生产力,但这样定义并没有考虑到个体差异。软件工程中的研发工作存在着巨大的差异,量化或定义研发生产力将是一项艰巨的任务。但是,即使缺乏定义,我们仍然可以认识到高效的一天是一种什么样的感觉。
或许,我们不需要有一个全面的定义,但需要知道在一天结束时是否感觉良好。富有成效的一天是我们完成了工作并且感到满足,这样的工作才是有意义的。因此,可以通过评估日常工作并决定它们是否有助于产生满足感来定义自己的生产力。一般地,我们会创建一个清单,并在某件事情已经完成时向清单中添加新的项目。这些项目可以是重要的工作项目,也可以是比较温和的目标,比如促进合作或增加社区活跃度。这个清单对于更好地了解自己,以及什么能使人快乐,或者什么让人更有效率是非常有用的。尽管快乐和生产力并不完全一样,但密切相关。
最佳实践之四:建立工作习惯和工作环境
工作环境和工作习惯中的一些小细节都会极大地影响我们的工作效率。一般地,我们会注意工作空间的照明、噪音水平和舒适度。如果发现自己会被某些事情分心,可以考虑改变当前的工作环境。另外,明确的选择习惯性的重复可以建立良好的工作习惯。
越是能够在特定的环境中重复一个行为,就越有可能变得轻松自如。例如,如果享受网上冲浪,可以让自己在午餐后干这件事,并选择在不同地点用不同的设备浏览,以避免与工作联系在一起。如果喜欢在咖啡店工作的感觉,可以尝试在家里模仿这种体验,营造几个不同的工作场所,并通过午间散步来模仿在不同场所间切换。如果想摆脱一个不适应的习惯,可以考虑改变自己的的工作环境。例如,远程通常会是单独工作,但如果不喜欢这样,可以考虑尝试一个与他人有更多规律互动的环境。如果感觉效率不高,可以考虑换个工作场所,或者锻炼十分钟。
环境的切换是在工作时间和非工作的时间之间建立一个明确的分隔。这对于在家工作来说尤其重要,因为原来上下班的行为方式都不复存在,家变成了唯一的空间。最后,要包括工作以外的日常安排,也就是为了个人快乐的一些活动,例如,与家人在一起的时间等,这些也是必须考虑的。
最佳实践之五:对工作负责
如果自己的一种角色是为用户提供支持,或者团队中已经有一个设置好的任务列表,那么,就有了被动工作的倾向。虽然每天都会从待办清单上划掉一些项目,但这并不一定意味着已经对自己的工作拥有了所有权或承担了责任。拥有这种所有权可以让我们更关心自己的工作,从而提高生产力水平。
这是一个如何独立识别和处理团队或社区问题的挑战。越有能力决定去做一些重要的事情,制定计划并且执行这个计划,我们就越能拥有独立性,学习新的技能,并且感觉到对自己的工作拥有所有权。如果与老板或团队分享自己的想法或项目经验,他们也会看到这些积极的品质,这有助于建立信任,这在远程工作的环境中非常重要。事实上,参与组织决策可以给人一种心理上的主人翁责任感,这也会进一步自己的满足感。在这两个层面上都拥有所有权,通过它建立信任,可以巩固团队对自己的看法,他们会对我们更有信心。
最佳实践之六:承担人际沟通的责任
在刚刚开始远程工作的时候,沟通负担的沉重在团队中是很常见的,更不可能有既定的协议和最佳实践。很多人都是在偏离正轨的时候才艰难地认识到这一点。如果我们与团队乃至社区脱节,就会感到孤独,并对快乐程度产生负面影响。
在这种情况下,问题在于缺乏人际沟通。寻求人际沟通意味着要参加虚拟研讨会,电话会议,或者参加例行会议。如果要寻找更多一对一的人际互动,可能需要建立一个虚拟的“快乐时光”让其他人参与进来。虽然在工作中与同事沟通是常见的,但是我们缺少的可能是与朋友或家人的联系,因此与家人共进晚餐或者好友的云聚会都是非常有意义的。在工作环境中,分享工作的技巧和心得可以作为建立人际沟通的工具。不管具体策略是什么,改变一些工作方式,就会感觉不那么孤独。
最佳实践之七:保持同理心
软件工程需要大量的技术交流。无论在聊天的窗口、视频通话,还是代码评审中,肯定会遇到很多不同类型的人,他们都有不同的期望和激励方式。同理心是必不可少的。沟通可以带来良好的生产力,良好的工作效率可以让我们成为一个更好的沟通者。
例如,如果遇到一个代码仓库的维护人员看起来很刻薄,可能要考虑到他们肩上的责任,他们需要评审的提交数量,以及他们是否空闲,他们可能处于一个紧张的工作状态中。另外,还可能会考虑交流中的文化差异,在他们的团队中,简洁的回应可能更为常见。当把这些因素考虑在内时,我们的反应可能会调整为友善的沟通,并且可以更进一步,尝试我们如何可以给他们提供有成效的帮助。可以说,组织层面的沟通质量依赖于个人沟通的质量,更好的沟通会带来积极的结果。保持同理心意味着自己的积极参与,便于清晰地描述问题,并使对方容易理解。
最佳实践之八:自我同情
我们可以尽最大的努力去定义个人目标,建立日常习惯,做有意义的工作,让自己感觉富有成效,但这并不总是意味着自己完成了一天的工作后,就会感觉自己很成功。这就是自我同情的意义所在,自我同情可以广义地定义为宽恕自己,它对心理健康和快乐指数有积极的影响。
拥有自我同情,意味着回顾一天经历的时候,不会因为不完美而苛责自己。可以尝试一些对自己不起作用的新日常活动,也可以考虑建立新的工作方式,因为没有真正的失败状态。试着把自己想象成另一个人是有帮助的,如果别人带着同样的经历和消极的想法来找我,我该如何安慰他们?我很可能会以同情心做出反应,这也是必须为自己找到的同情心。如果批评来自外部,尽管我们不能左右别人,但可以选择用善意的方式回应,并试着在这种情况下找到幽默。然而,如果有人违反了某些行为准则,则不该默默承受。因此,自我同情也意味着知道什么时候该为自己挺身而出。
作为一个远程工作者,可能生活在与世隔绝的环境中,但我们不是在与世隔绝中工作。
最佳实践之九:学会说是
作为一个软件工程师,参与的每一个项目都有一系列的问题需要解决,需要与他人合作,以及需要学习新的编程语言或新技术。我们都可能是一个很容易说“是”的人,为一个项目做贡献,或者提供帮助。
虽然这是一个获得成长的好方法,但是也要知道什么时候说“不”: 当我们可用时间受限的时候。当然,说“是”也是可以的,但是要把自己的贡献限制在一个可控的时间范围之内。为了最大化我们的生产力,保持对自己任务清单中的项目有着清醒的意识,以及什么时候提高或者减少参与度,专注于那些对团队或者社区来说最有价值和重要的项目是必不可少的。
最佳实践之十:选择正确的沟通渠道
当远程工作时,有许多方式可以与他人交流。人们有着不同的工作环境和时间表,理想的情况下,通信是异步的。但是,应该根据交流的需要谨慎地选择方法,而不只是依赖于IM工具。文档的讨论首先可以使用协作文档工具,但是经过一些增强之后,可能要将其转移到版本控制中。有时候,一个快速的电话比试图写出一封冗长的电子邮件更有效率。
重要的细节是,无论选择视频电话、电子邮件还是IM消息,都需要考虑是否适合所讨论问题,考虑交流的透明度和开放程度,以及自己的舒适程度。如果对视频或者语音聊天感到不舒服,可以划出特定的时间段,让它成为日常工作中可以预测的一部分。
结束语
这里推荐了10个最佳实践来激发远程软件工程师的快乐,从而提高远程开发人员的生产力:
在关心的事情上工作
为自己定义目标
为自己定义生产力
建立日常习惯和工作环境
对自己的工作负责
承担人际沟通的责任
练习同理心
自我同情
学会说是
选择正确的沟通渠道
这里的大多数要点都可以归结为确定控制点。软件工程师应该感觉可以控制自己的工作,并且有处理不确定性和压力的心理技巧,这样就能更好地应对不确定性,随着时间的推移,会变得更有效率,而且更快乐。成功和生产力不是出现在我们面前,而是我们选择去创造的东西。
【关联阅读】
关于软件开发,都应该知道的10个常识