Martin Fowler:数字化时代,远程与本地协同工作孰优孰劣?| IDCF

13deea66faff014341516b546cd19264.gif

作者:Martin Fowler

译者:冬哥

原文:https://martinfowler.com/articles/remote-or-co-located.html

远程工作与同地工作之间不是简单的二分法,相反,团队有多种分布模式,每种模式都有不同的权衡和适合的有效技术。虽然没有确凿的证据,但我的感觉是,大多数团队以同地办公的方式工作效率更高。但是您可以通过使用分布式工作模型来建立一个更有效率的团队,因为它可以让您接触到更广泛的人才库。

信息时代最深远的影响之一是能够在无视地理位置的情况下做很多事情。我不再需要去大多数商店、图书馆或旅行社(我期待着不用去看牙医的那一天)。世界上大多数人都看到了这一点,但对软件开发人员来说尤其明显,他们通常处于数字化转型的前沿。

然而,在开发软件时,许多开发人员并没有充分利用连接计算机进行通信的无限可能性。雅虎最近将所有非现场工作人员带回到单一站点办公,这引起了很多媒体的关注。Netflix 和谷歌等领先科技公司非常喜欢将员工集中在一个站点。

这样的举动让我们这个行业的其他人对其指指点点,嘲笑起来。一些名气很响亮的互联网公司,例如 Etsy、Basecamp 和 Github,其中许多员工从未一起在办公室工作过。对于这样的团队,远程工作是未来,那些反对它的人被称为是历史的失败者。

虽然我在行业的这些年里多次参与过关于远程工作的讨论,但我觉得没有太多决定性的因素可以谈论。远程工作对软件开发的影响无法以任何单一有意义的方式整合在一起。

然而,我确实与很多团队交谈过,这些谈话让我得出了一些我将在这里分享的初步意见。

一、远程的许多形态

2d17aa6520446b9ee9197faa907983dc.png

首先要明确的是,在同一地点和远程团队之间没有简单的二分法。有许多不同的变体,每一个变体都有自己的长处和短处。为方便起见,这里有一些范例。

一个单中心的团队,是一个团队,每个人都共处于同一物理位置。理想情况下,这意味着你们彼此相距仅几步之遥,无需安排任何事情即可快速协作,并且可以轻松查看其他人的动态。许多团队喜欢一个单独的团队房间来做到这一点,因为它最大限度地简化了沟通。甚至隔间的存在也会成为障碍——许多敏捷教练都有关于螺丝刀的故事(意指拆掉格子间)。

8e9d5609d3017980b98f282f62d609a0.png

一个多站点的队伍由两个或多个不同位置的团队组成一个更大的团队,或许定义了一些子团队的界限和责任。一个很好的例子是墨尔本和西安之间的开发团队(译者注:TW的真实情况)。

f13a46f5c54296f2626a04185293901c.png

当大部分团队成员在同一地点办公,但有少数成员在家中或其他办公室远程工作时,就会出现卫星工作者。

5d0fbc6908ccf3267bcf421f4f3efa0f.png

在远程优先的团队中,每个人都在一个单独的位置工作,通常是在家中,因此所有的交流都是在线进行的。大多数开源项目都是远程优先的,这种经验鼓励了许多初创公司使用它。

25a50f097157a1acfd2da6cf2846e275.png

远程状态因程度而异。人们经常观察到,仅仅将一个团队分散在同一栋建筑的两层楼就足以打破同地办公的感觉。增加更多的距离和时区会加大这种远程性,但许多人认为,最大的差异发生在你与合作者之间不再是短短几步路的距离。关键是你发现发送电子邮件比走过去说话更容易。

二、大多数人在同地办公时工作效率更高

5979b1f01416150f04dcdd60264f49a3.png

与软件开发中的许多主题一样,我不能拿 100 个软件开发团队来分析远程是否以任何定量的方式影响生产力。人们会发表例证,例如“我觉得在同一个地点的团队中更有效率”,但这不一定是最好的证据。

另一个原因是,还有很多其他因素影响团队的运作。如果有人说他们在单站点团队中更有效,那可能是因为与不同的团队相比,还有其他因素在起作用。减少这个问题的一种方法是特别关注改变了分布模式的团队,例如从单站点拆分到多站点。但其他因素仍然存在,特别是因为团队分布的变化通常意味着人们会离开或加入一个团队,但我认为这至少比比较完全不同的团队会产生更有力的证据。

鉴于此,我(或任何人)所能做的就是听取更多人的意见并做出我所能做出的最佳判断。

我听说过很多关于团队和地点的经历,包括很多团队改变了他们的分布模式(尽管我没有听到很多关于远程优先的消息),使我得出结论,大多数团队在单站点模型中的工作效率更高,原因是沟通方便。

虽然(视频)聊天、屏幕共享等工具已经做了很多工作使得远程工作更容易,但仍然没什么能比转身看到你想与之交谈的人谈话更有效的了。这还引入了大量的带外信息,从而改善了个人关系。结果是改善关系和沟通的良性循环。由于通信是软件开发的核心部分,因此这对生产力有很大影响。

但请注意我说的是更多。人类千差万别,我相信有些人在远程工作时更有效。我的感觉是,这会是少数人。(这里也可能有代际因素,因为年轻人更习惯于远程互动。)

三、远程团队通常更有效率

b66126b98511cbd5275f09d6d51a502d.png

因此,如果我们不考虑面向远程的少数群体,单站点团队的更高生产力是否意味着我们应该支持单站点模型?事实证明,我们通常不应该这样做。

虽然我广泛听到一个特定的团队在同地办公时更有效,但单一站点对您在团队中可以拥有的人有很大的限制。这样的规则意味着您无法聘请最适合该工作的人,您只能聘请准备搬迁的最佳人选。通过使团队远程化,您可以扩大可以带入团队的人员范围。如果远程团队位于同一地点,则其工作效率可能低于同一个团队,但仍可能比您可以组建的最好的同一地点团队更有效率。

197b8918cc7d7f4ba231804819bf3a74.png

远程不仅避免了永久搬迁的问题,还为个人提供了更多选择,特别是在远程优先模式下在家工作时。人们看重的是接送孩子放学方便,避免了上下班时间和精力的浪费,以及宜人的环境。提供使就业方案更具吸引力的产品。鉴于女性经常承担看护工作,因此更难花时间在办公室,这也可能有助于提高多样性。

这种影响也是跨国家的一个重要因素。随着离岸外包变得流行,大多数人将其视为降低成本的一种方式。在 Thoughtworks,我们认为寻找最优秀人才更为重要。例如,我们的中国办事处在澳大利亚成为特别有价值的支持工作,因为人才库的规模要大得多。

四、注意沟通模式

ca9160c65426eeb31c93c817e228a66b.png

人们交流的方式是有效软件开发的核心。无论是基于什么原因引入远程工作,您都需要考虑通信模式的限制。特别是我们必须意识到,同地通信的信道比远程在线通信丰富得多——至少对大多数人来说。因此,与远程工作人员之间的情况相比,大多数共处一地的人会更好地沟通并拥有更好的个人关系。这会导致您需要注意的一系列后果。

多站点团队倾向于对其他站点形成“我们”和“他们”的态度。您可以通过定期联系访问和大使来减少这种情况。接触访问是短期的跨团队访问。虽然这些有利于偶尔进行一些更深入的合作,但它们的最佳目的通常是建立人际关系。组织往往会忘记后者的重要性。因此,在进行接触访问时,要更加重视社会性联系(这意味着为有助于建立关系的活动分配时间)。大使是在不同地点待上几个月的人。大使可以做很多事情来促进他们的临时远程团队和他们通常的主队之间的沟通,无论是在远程还是在他们回家时。

如果您要使用远程优先模型,则需要全身投入。所有的交流都应该在线进行,不要在同一个办公室里有共同定位的子组。我甚至听说有些团队强迫在同一个办公地点工作的人在单独的办公室工作,并强制要求与隔壁程序员的任何交流都在网上进行。尽管如此,远程优先并不意味着仅远程。远程优先的组织通常每隔几个月进行一次面对面的聚会,以帮助解决棘手问题并改善人际关系。(例如,Basecamp 每年举行两次聚会,为期一周。)

使用多站点团队,按完全自主的组件划分工作。每个团队都应该是全栈的,并负责将一个组件从创意到生产。不要按层(前端/后端/数据)或活动(分析/开发/测试)划分。层和活动边界之间都需要丰富的通信,请记住康威定律的重要性。

让卫星工作人员发挥作用是非常困难的。由于大多数人在同一地点,大多数沟通将发生在同一地点的团队内。我几乎从来没有听说过这个模型,除非卫星人越来越疏远。如果他们的工作非常自主,那将减少问题的可能性。确保卫星人员定期访问现场团队也是明智之举,至少每月几次。但在大多数情况下,它似乎最好作为一种临时措施。

远程沟通困难的一个特定领域是指导初级员工。一些远程优先的倡导者认为,你应该只让有经验的员工加入远程优先团队。像大多数情况一样,远程指导人们并非不可能,但要困难得多。对于多站点团队,确保每个站点都有经验丰富的导师来指导新人。避免让初级员工成为卫星工作者。小心让初级人员加入远程优先团队,当然不要尝试,直到远程优先团队工作顺利,然后才慢慢加入初级人员。

五、远程和敏捷

856c2dfcff051b754d11a9bbfae340c1.png

我听过一些人争论敏捷软件开发与远程工作不兼容,那是片面的,或者至少根据我对敏捷思维的理解。

当然,敏捷方法鼓励了更大程度的协同。极限编程将“坐在一起”作为其主要实践之一:“面对面的时间越多,项目就越人性化和富有成效”。在敏捷宣言说:“一个开发团队中传递信息最有效的方法是面到面的沟通。”

但所有这一切只是表明一个特定的团队在同地办公时通常会更好地协作。通过支持远程工作模式来获得更好的团队并没有任何争论。敏捷宣言的第一个价值是“个体和交互胜过流程和工具”,我们应该将其理解为鼓励我们优先考虑在团队中招募最优秀的人并帮助他们更好地合作。(Kent 指出“坐在一起”不是 XP 的强制性要求。)虽然我们承认面对面的交流更有效,但这种认识不能忽视个人和互动的重要性。

 结  论

645aab8ee54a3612e28841dc7a6c5116.png

很明显如我希望,没有足够的证据可以对远程工作的功效形成任何有力的结论。以下是我的主要想法:

  • 永远不要忘记团队有不同的分布模式,而不仅仅是简单的远程与同地二分法。多站点团队的优点、缺点和有效技术通常与远程优先团队不同。

  • 由于他们拥有更丰富的沟通,大多数人在同地工作时会更有效,但是不要忘记有些人在远程优先模型中似乎更有效。

  • 尽管我认为大多数团队在同一地点工作会更有效率,但通过采用某种形式的分布式模型,你通常会得到一个更有效的团队,因为它会扩大你可以获得的人才库。

  • 使用远程工作模式时,请注意通信模式的形成方式。投资于改善沟通,包括旅行和技术。

在我从事软件行业期间,您可以通过支持远程工作模式获得更好的团队这一事实变得越来越重要,并且我预计它的重要性会继续增长。我感觉到最好的开发商越来越不愿意接受单站点工作的位置和通勤劣势。随着人们越来越有经验,因此更有价值,这一点越来越真实。您可以尝试忽略这一点并接受将为您搬迁的最佳人选,或者您可以探索如何使远程工作模式更有效。我认为能够使远程工作模式有效的组织将拥有显着且不断增长的竞争优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android:自己实现能播放网络视频url的播放器

2019独角兽企业重金招聘Python工程师标准>>> android原生自带的播放器一般只能播放本地视频,而没有播放url的功能。不过android系统中有一个VideoView的控件可以实现这一功能。 简单实现如下: public class MyVideoPlay extends Activity i…

iOS调用系统相册、相机 显示中文标题

2019独角兽企业重金招聘Python工程师标准>>> 最终在info.plist设置解决问题 发现在项目的info.plist里面添加Localized resources can be mixed 设置为: YES(表示是否允许应用程序获取框架库内语言)即可解决这个问题。 转载于:htt…

使用云原生应用和开源技术的创新攻略

Kubernetes 和云原生应用的增长以及普及是现象级的。根据 IDC 的数据,到2025年,90%以上的新应用程序将是云原生的。许多客户已受益于云原生设计模型,让新一代应用程序更加敏捷、可靠、可扩展,还兼顾了安全。说到服务的开发&#x…

SVM支持向量机原理及核函数

原文链接:SVM支持向量机原理及核函数 转载请注明出处 支持向量机原理 大距离分类算法 1、名词解释: 分割超平面:如下图所示,构造一个分割线把圆形的点和方形的点分开,这个线称为分割超平面。支持向量:…

SQL对Xml字段的操作

转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一、前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列;此外,…

URL 路径长度限制(错误:指定的文件或文件夹名称太长)

本节讨论 URL 的构成、SharePoint 2010 构建 URL 的方式、URL 的编码和加长以及作为其他 URL 中的参数传递的方式。 SharePoint URL 的构成 SharePoint URL 的总长度等于文件夹或文件路径的长度,包括协议和服务器名称和文件夹或文件名称,以及作为 URL 的…

sklearn线性回归详解

图片若未能正常显示,点击下面链接: http://ihoge.cn/2018/Logistic-regression.html 在线性回归中,我们想要建立一个模型,来拟合一个因变量 y 与一个或多个独立自变量(预测变量) x 之间的关系。 给定: 数据集 {(x…

DateOnly和TimeOnly类型居然不能序列化!!! .Net 6下实现自定义JSON序列化

前言.Net 6引入了DateOnly和TimeOnly结构,可以存储日期和时间。但在实际使用时,发现一个很尴尬的问题,DateOnly和TimeOnly居然不能被序列化:var builder WebApplication.CreateBuilder(args);var app builder.Build();app.MapGe…

使用插件创建 .NET Core 应用程序

使用插件创建 .NET Core 应用程序本教程展示了如何创建自定义的 AssemblyLoadContext 来加载插件。AssemblyDependencyResolver 用于解析插件的依赖项。该教程正确地将插件依赖项与主机应用程序隔离开来。将了解如何执行以下操作:构建支持插件的项目。创建自定义…

支持向量机SVC

原文: http://ihoge.cn/2018/SVWSVC.html 支持向量机(support vector machine)是一种分类算法,但是也可以做回归,根据输入的数据不同可做不同的模型(若输入标签为连续值则做回归,若输入标签为分类值则用SVC()做分类&…

Beetlex官网迁移完成

由于beetlex.io域名无法指向国内,使用国内的服务器很多时候有抽风情况出现,所以把网站迁回国内;新的域名也申请完成并且申请备案通过,现在可以通过https://beetlex-io.com来访问Beetlex的官网.接下把涉及的费用和部署情况也说一下…

SVM支持向量机绘图

原文: http://ihoge.cn/2018/SVM绘图.html %matplotlib inline import matplotlib.pyplot as plt import numpy as np class1 np.array([[1, 1], [1, 3], [2, 1], [1, 2], [2, 2]]) class2 np.array([[4, 4], [5, 5], [5, 4], [5, 3], [4, 5], [6, 4]]) plt.f…

python列表生成多个号码_python遍历多个列表生成列表或字典

原博文 2017-03-10 18:30 − key[a,b,c,d] value[1,2,3,4] mydictdict(zip(key,value)) print mydict 输出结果: {a: 1, c: 3, b: 2, d: 4} 也可以用zip同时遍历多个列表,生成一个多维列表 key... 相关推荐 2019-12-18 21:27 − 一.zip函数描述和使用 zi…

NCC CAP 6.0 发布 —— 新增支持 OpenTelemetry

前言今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6。那么,接下来我们具体看一下吧。总览可能有些人还不知道 CAP 是什么,老规…

朴素贝叶斯--文档分类

原文:http://ihoge.cn/2018/MultinomialNB.html 把文档转换成向量 TF-IDF是一种统计方法,用以评估一个词语对于一份文档的重要程度。 TF表示词频, 即:词语在一片文档中出现的次数 词语总数IDF表示一个词的逆向文档频率指数&am…

Linux I/O 模型(待修改)

2019独角兽企业重金招聘Python工程师标准>>> 最近看到“服务器并发处理能力”章节,被里面的“I/O模型“搞得有点头晕,所以这里希望通过概念的辨析和对比,能更好的理解Linux的 I/O模型。 同步(synchronous)…

git代码提交流程

从master创建任务分支1.需要先将master分支代码更新到最新然后再切新分支;2.新需求和hotfix需要从master切分支,若是在QA测试阶段或者预发布阶段的bug,则需要再该功能分支上进行修改;提交代码到自己的任务分支commit之后一定要pus…

PCA主成分分析+SVM实现人脸识别

原文地址: http://ihoge.cn/2018/PCASVM人脸识别.html 加载数据 这里使用的测试数据共包含40位人员照片,每个人10张照片。也可登陆http://www.cl.cam.ac.uk/research/dtg/attarchive/facesataglance.html 查看400张照片的缩略图。 import time impo…

龙芯发布.NET 6.0.100开发者内测版

龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者内测版的新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构。目前支持LoongArch64架构和MIPS64架构,LoongArch64架构的.NET-SDK-3.1已完成,安装包下载地址LoongArch64-.NET …