写点什么

高效软件开发团队的 4 个习惯

  • 2020-07-04
  • 本文字数:4473 字

    阅读完需:约 15 分钟

高效软件开发团队的4个习惯

我经常需要费力地跟人解释,作为高效软件团队的一员到底意味着什么。当然,关于这一点已经有大量的资料,比如 LinkedIn 就有整套思想领导力理论介绍了各种帮助团队有效运作的指导方针和启发性思考,但根据我的经验,如果你从来都不知道什么样才算好,就很难内化这些想法并遵循别人的模式。


我非常幸运,到目前为止,我在职业生涯中已经直接与几十个(甚至是几百个)开发人员合作过。我曾在一些不健康的团队工作过:在那些团队里,人们会感到害怕,出于对职位的担忧,他们会把自己的底牌捂得很紧,不让其他人知道自己的计划或意图;我也在功能失调的团队工作过,那些团队由于工作优先级不明确而摇摆不定,或者协调成本太高而没有人愿意干活,许多天甚至数周的开发时间被浪费掉,团队成了一个个体的集合,而不再是一个工作单元。但幸运的是,我也曾在一些非常优秀的团队工作过。当我身处这些优秀团队的时候,我每天去上班时都很兴奋,对于那些比我年长的人,我也不怕公开提出反对意见,因为我认为自己的声音和工作很有影响力。


在这篇文章中,我将试着记录下,我所共事过的表现最好的团队所具有的特质和习惯。


本文最初发布于 Denise Yu 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。


高度的心理安全感

心理安全这个概念被提出来已经有一段时间了,所以我不打算花太多时间来解释它。如果你以前没有看过这个概念,请先阅读这篇文章


软件团队由真实的人组成,他们在无形的社会和政治结构中生活和工作,他们从出生起就被社会化,变得更加自信,更加谦恭,更加直言不讳,更加礼貌,更加好争论,更善于安抚,等等。显然,这都是陈词滥调了,我说这些是为了证明,心理安全不仅指的是招聘一些顾问来开展员工培训、告诉大家这个概念意味着什么:建立真正的心理安全感需要领导者和管理者评估人与人之间交往的所有无形的社会规则,并理解这些规则如何影响一个人参与团队讨论、贡献团队动力的能力。简而言之:社交特权很重要。否则,当一些微不足道的小事情开始侵蚀团队凝聚力的时候,不要感到惊讶:攻击性的言语或小动作刻板印象威胁、将幸存者偏差变成成就高效团队成员的信条。


根据我的观察,具有高度心理安全感的软件团队会有以下某些行为:


  • 定期回顾,在“什么进展不顺利?”这一栏里列出适当数量的事项。那里不应该总是阳光和彩虹。那会让我怀疑回顾中是不是没有提出并讨论什么难题。健康的团队应该能够公开地反省并自我批评,因为每个人都明白,建设性的反馈是为了不断改进。

  • 个人不会在一个问题上花很多时间。他们会有一个或明或暗的“奋斗时间窗”,在这个时间之后,他们会向同伴寻求帮助,他们知道,自己不会因此而得到负面评价。

  • 个人从看得见的输出中分离出他们对团队的价值。我见过这样的情况,人们对自己的代码后来被删除或重构感到沮丧。但在健康的团队中,大家接受这样一个事实:改进是增量的、渐进的,贡献是对团队整体结果的贡献,而不是对特定输出(如代码行数)的贡献,表现出来就是“这是我们交付的”,而不是“这是我交付的”。此外,具有高度心理安全感的团队可以讨论价值的含义,以及价值为什么不仅仅是几行代码

  • 带薪休假时间和病假时间往往会更长,这很有趣。我认为,这是他们的信念的一种体现,即团队的其他成员可以在他们不在的情况下继续做出正确的决策,因为他们之间已经进行了足够多的对话,这使得整个团队都认为,他们在产品和技术决策上非常一致。但我不太确定这其中的因果关系。因为人们如果发高烧,也会申请更多的带薪休假。


当一个团队有高度的心理安全感时,你可以尝试一些很酷的试验。我相信,这些试验会产生一种自我强化的积极反馈循环,创造出更高层次的信任和安全感。在我的第一个高绩效团队里,在一次回顾中,每个人都觉得一年两次的绩效评估周期不够频繁,也不够细致,无法促进职业发展,尤其是在我们团队的优先事项发展得如此之快的情况下。所以,我提出了一项试验:反馈周。


反馈周

这是一个为期一周的过程,每个人(包括团队负责人和项目经理)都被随机分配去收集对另一个人的反馈。这个过程进行得如此顺利,以至于在我的队友加入新的团队后,也带去了这个试验。最终,办公室里的其他团队开始模仿我们!我在这篇博文中更详细地介绍了这个试验。我还在 2019 年的多伦多 DevOpsDays 大会上就此做了一场演讲


能够开展类似这样的反馈周,就说明你的团队处于高度的心理安全状态。如果你足够幸运参与其中,我的建议是:不要只站着不动。这是一个大胆试验你的过程和实践的机会,尝试像反馈周这样的事情,可以帮助你挖掘隐藏的积极反馈循环。如果你确实想出了一些很酷的东西,请告诉我!


良好的开发规范

随着系统复杂性的增加,系统中任何单个行为主体的自有模型的准确性都会迅速降低。

Woods Theorem


我就直说了吧,我永远不会有一个完整的 GitHub 心智模型。它太庞大了,有太多的逻辑路径,坦率地说,花费过多的时间学习代码的所有部分,并不能使我的工作做得更好。而且,它可能明天就又变了。


因此,当我必须收集足够的上下文信息以实现下一个特性或 Bug 修复时,我会依赖于代码中已有构件的准确性,这些构件是在我之前从事这些工作的人留下的。


我花了很多时间来研究代码:运行git blame,查看过去的提交、 有关问题,以及任何有助于我理解为什么某行代码这样写的信息。如果我看到一个难以理解的改动,提交信息是“WIP”,这就会变成效率杀手。


良好的软件开发规范意味着需要额外花一些时间来记录当前的上下文信息,这可能表现在:


  • 描述性的提交信息

  • 至少,做到每个提交信息都包含一个动词。有些团队甚至更进一步,要求每次提交都可以跟踪到问题编号。务必选择适合你的团队认知投资水平的方法;

  • 遵循语言和框架约定、可以表明意图的类名和方法名;

  • 单元测试带有有用的描述信息,使用符合实际的变量名和数据,而不是“foo”和“bar”这样的变量;

  • 在问题跟踪系统中就相关特性反复沟通,而不是在 Slack DM 和其他地方。今后,入职不满 6 个月的团队新成员将无法访问这些地方。


最后,良好的开发规范事关同理心。工件越整洁,团队成员就可以越快地了解上下文,花在上下文切换和探查上的认知精力也就越少。此外,这其实对未来的你自己也是有好处的。道德哲学的一个分支认为,未来的你是一个有道德权利主张的不同实体,我想说:推广这些开发规范后续一定会得到回报,特别是在凌晨 3 点有人因为你写的一行代码给你打电话时!


主动重新分配“经验点”

我喜欢角色扮演游戏,尤其是《火焰徽章》和《口袋妖怪》系列,我最近还慢慢地喜欢上了《最终幻想》。


提这个是因为我认为,在《火焰徽章》中组建军队的方式和组建均衡的软件开发团队之间有很多相似之处。在 RPG 游戏中,我拥有自己的核心团队,我非常喜欢将所有角色都均衡升级。如果我获得了一个等级较低的新角色,但他有一套技能或亲和力可以给队伍做补充,我就会对他进行投资,给他升一点级,这样他就可以在地图上到处移动而不用担心敌人的攻击。如果我的角色一开始就有一个很高的等级,我就会避免让他们与较弱的敌人战斗,因为这只会占用经验点,而这些经验点会让我的低等级角色受益更多。


我倾向于认为,软件团队中也存在类似的原则,但这些经验点不是为了增加力量、防御、魔法和抗性,每一项新工作都是一个“敌人”,一旦交付,就会扩大团队的领域上下文和信心。通常,团队中是没有核心“谋士”这样一个角色的,至此,这个类比就开始变得不恰当了(主管和项目经理不算,他们通常没有足够的视野或最新的上下文信息,无论如何,把如此复杂而又动态变化的事情都集中在一个人那里是个坏主意)。如果你的团队里已经有很多优秀的骑士和圣骑士——呃,我的意思是,高级开发人员——那么作为一个团队,你应该注意,不要总是只安排他们去处理困难的工作。在健康的团队中,上下文再分配也是他们工作的一部分,这样一来,一个缺乏经验的战士——我的意思是,工程师——也可以获得一些有价值的经验点。如果每个人都觉得自己至少在某种程度上具备了应对任何挑战的能力,那么这将提高整个团队的生产力和士气。如果没有,他们知道自己可以增加一个猎鹰骑士作为副官——换句话说,向更有经验的人寻求帮助。


慷慨大方地交流

关于最后一点,我想了很多。在对我的想法的所有描述中,我认为最好的是 Nat Friedman 在最近一次全体会议中所做的介绍。他说过类似这样的话:“我们彼此之间的交流应该遵循稳健性原则:发送时要保守,接收时要开放。”他还鼓励我们坚持宽容性原则,尤其是在非常困难的情况下与对方沟通的时候。但是我认为,高绩效团队会百分之百遵循这个原则。


我非常喜欢这种框架化,因为它让我想起了多年前我在codebar做志愿者时所经历的导师培训。“假设你接触到的每个学生都知识有限,但智慧无限。”这样一来,指导者就有责任确保他们的解释容易理解——考虑到老师和学生之间固有的权力不平衡,这是传达附加的情绪劳务的一种很好的方式。


同事之间慷慨大方地交流意味着,我们假设任何时候任何人问问题时:


  • 已经做了基本的研究,如已经用谷歌进行了搜索;

  • 他们是因为在任何地方都无法找到答案才找人问。因为这个地方很难找,或者根本不存在。


换句话说:假设你的同伴是一个有能力、聪明、通情达理的人,他们问问题是因为他们不了解上下文,虽然他们已经设法了解过。


当你开始寻求帮助时,你的上下文信息和工作经验被不断地“四舍五入”,我都不知道该怎么表达这是多么令人沮丧。是的,这里面有性别因素,但这超出了我们现在的讨论范围。以前,我曾发过多条推特,表达了当别人认为你实际上远没有那么经验丰富和知识渊博时的沮丧。当然,别人是不可能真正知道的,无所不知是不可能的!但是,这里有一个折中方案,也是一个合理的要求:慷慨。


像下面这样就不够慷慨


我:嗨,这里为什么有一个负载均衡器?

X:负载均衡器用于将请求分发到多个服务上,这样我们就不会遭受 DDoS 攻击了!这里有一些文章介绍负载均衡器的基础知识,以及从理论上讲我们为什么要使用它们!

我:好的,但我问的不是这个。我知道负载均衡器是什么。我只是想了解下,在架构决策时,为什么要把**HAproxy 放在这个特定的服务前面。

X:奥!好吧,你应该直接这样问!


相反,下面这样就是慷慨的:


我:嗨,这里为什么有一个负载均衡器?

X:我猜你是在问我们为什么选择 HAproxy,以及为什么选择这些服务。如果不是的话,现在就告诉我。

我:对,就是那样!谢谢你先确认我的问题。

X:不用客气。是这样的,18 个月前,当我们构建这个系统时……


上面两种互动方式的关键区别在于,在慷慨的互动中,在给出答案之前,回答者会确认他们对问题的假设,进而核实提问者的上下文层级和意图。采用慷慨的交流方式有非常积极的影响:首先,注意到交流时所使用的词汇减少了吗?他们实际上可以更快地得到答案。其次,没有产生不必要的摩擦。两个人团结一致消除了不确定性,而不是纠结于每个人知道多少,如果是后者,也许最终他们也可以得出答案,但同时也失去了一些信任和善意。


如果你有在高效软件开发团队工作的经验,或者花时间做过这方面的研究总结,请留言告诉我们你的感受和想法!


原文链接:Habits of High-Functioning Teams


2020-07-04 12:007965

评论 3 条评论

发布
用户头像
公司文化跟创始人有很大关系
2020-09-14 16:58
回复
用户头像
好文。
2020-07-08 08:37
回复
用户头像
虽然是习惯,但这是文化问题。建立这样的文化是非常挑战的事情。
2020-07-05 10:40
回复
没有更多了
  • 多样性的价值

    关于敏捷团队取得成功的因素,我在做一系列讨论,这是其中第二篇。性别、文化、观点、视角、技能以及背景的多样性被认为是建立高效团队并保持高效的重要因素。这篇新闻将考察不同评论者的观点。

  • 衡量信任及其对领导者和组织变革的影响

    近日,来自Atlassian的Dom Price和商业心理学顾问Prudy Gourguechon都在文章中谈及了团队与领导者之间互相信任的重要性,指出了确切衡量这种关系的困难性。他们提供了行为模式,探索团队协作、处理不确定性、承担个人责任、感受领导者包容性的方式。

  • 高效团队如何避免“团队自杀”

    在工作人口中,高效团队仅能覆盖2%。但是敏捷过程似乎可以鼓舞人们组成这样的团队。本文论述了Steve Denning的观点,谈到如何在工作中培育高效团队。文中同时提及Ominlab Media集团公司总经理Stefan Gillard,他谈到了如何为构建高效团队选择并雇佣合适的人。

  • 向下沟通(下):无权无势,他们不听你的怎么办?

    如何让自己在团队中拥有更大的影响力呢?六力框架为你提供了一个知行合一的框架。

    2021-08-23

  • 多少只鸡有点多?

    每日Scrum会议是敏捷团队内部一个很重要的会议。根据Scrum,只有猪才能在这个会议上发言,而鸡只能聆听。可这些参与每日Scrum会议的鸡的最大数目是不是有限制?

  • 在敏捷实施中寻求帮助

    培训和指导可以帮助组织实施敏捷。但只有在人们对帮助持开放态度时,它们才能发挥作用。是什么使得人们有时候不让教练帮助他们?组织可以做些什么来鼓励帮助行为呢?

  • 练出更好的团队

    你有没有遇到过那种令你怦然心动,渴望加入的团队?如果你曾经仔细审视过这种团队,可能会发现他们的状态在以人为本和结果导向之间达成了一种完美的平衡。如果你想看看自己的团队跟这种状态还有多大差距,请参照本文中提到的练习试一试。我相信在提出正确的问题并得到正确的答案之后,你就能够找到属于你们自己团队的完美状态。

  • 如何管理虚拟团队

    当与虚拟团队合作时,基本的管理任务与责任是完全相同的,但检查工作是否做完,以及质量是否足够好往往更加困难。成功的合作是虚拟团队和客户共同的责任。

  • 大型团队能使用站立会议实践么?

    每日立会能帮助团队成员向彼此做出承诺,承诺他们每天要完成的任务,同时识别前进道路上存在的任何障碍。然而很多敏捷专家相信:传统的站立会议将会随着团队人数的增多而马上失去作用。

  • 第 203 讲 | 陈嘉佳:奈飞文化宣言(下)

    我们不寻求保护我们的文化——我们寻求改善它。

    2019-04-11

  • 文章:敏捷回顾活动“最高指导原则”答疑解惑

    在回顾活动中,经常用“最高指导原则”来鼓励深入的学习,并避免互相指责。但如果你不能认同你“理解并坚信”每个人都已经全力以赴,那该怎么办?在本文中,一组资深的实践者讨论了使用该实践带来的好处和困难。

  • “请勿打扰”团队成员

    即便不是经常如此,许多开发人员也喜欢在一段时间内不受干扰地工作。XP推荐一种称之为“洞穴和公共区域(Caves and Commons)”的房间布局。公共区域用于最大限度地进行渗透性交流。洞穴用于协助隔离个人活动,比如撰写个人电子邮件、电话或快速探索式开发(Spike)等活动。但是,有些团队成员或某个特定的团队成员可能会想要过分地进行这种隔离。

  • 团队情绪与产品交付的关系

    AI公司Deep Affects研究了Jira项目,找出了情绪健康情况和团队效率之间的关系。他们的研究成果也得到了Gallup公司2017年的职场报告结果的支持,该调查显示了公司没有在情绪健康方面进行投入所需要付出的代价。

  • 05|事急则乱:上任第一个礼拜的教训

    “新官上任”总是干劲满满,但也要注意事急则乱。我用自己初做经理时的例子,带你看看急于求成的风险,以及该怎么弥补和复盘……

    2020-08-31

  • 大咖对话 | 如何打造自我驱动型的技术团队?

    管理者最重要的一个品质是要有确定性。何谓确定性?就是指,你作为管理者,不管你在还是不在,团队都会按照一个共识去做事情。

    2018-06-29

  • 如何激励和管理比你资深的工程师、设计师?

    和团队中的资深成员搞好关系,是一个产品经理的必修课。你可以帮他们打打杂来建立信任关系,通过摸清他们的需求得到他们的心,但把事情做成的本事才是你的“必杀技”。

    2018-06-21

  • 质疑服务型领导

    敏捷开发经理仅仅作为服务型领导的角色存在吗? 他们曾经用过传统的指挥和控制工具吗?敏捷经理们曾经行使权利对团队提出要求吗?他们曾经在成员之中进行过变化调整吗?

  • 文化建设:哪些价值观能够提升团队凝聚力?

    想要促成组织文化的形成,首先就要公开问题、暴露问题,形成一个坚定践行文化的核心团队,当然我们要强调知行合一,用实打实……

    2020-10-05

  • 敏捷团队空间注意事项

    很多刚刚接触敏捷的人会这样想:把敏捷团队放到一个房间里,工作就能得以完成。有些人则会思考如何让房间变成属于团队的房间,这可以提升工作效率,形成激励。很多敏捷团队已经开始分享构建理想团队房间的经验。下面是最近收集的材料。

  • 团队心理安全建设实践

    在本文中,你将会学到实用的想法、有趣的故事以及提高团队心理安全的有效方法。

发现更多内容

CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑

Jerry Wang

CRM abap WebClient UI

多元线性回归模型 - DAY14

Qien Z.

5月日更 多元线性回归

小走神

Nydia

学习

谈一谈Java的前生今世

孙叫兽

Java jdk 发展史

Rust从0到1-泛型-定义

rust 泛型 generic

微服务架构设计之解耦合

Xiao8

微服务 5月日更

云智慧发布《智能业务运维》2021年刊 邀您共览数字化运维全景象

云智慧AIOps社区

AIOPS 智能运维

阿里巴巴P8自爆:Java八大核心思维导图知识梳理

Java架构师迁哥

Flink 实时计算在微博的应用

Apache Flink

flink

Java 基础(一)——Java 入门

空城机

Java 5月日更

☕【JVM 技术之旅】深入挖掘Java对象的内存结构

洛神灬殇

JVM java对象分析 java对象 5月日更 内存对象结构

【数据标注的类型有哪些】看懂这篇文章就够了!

澳鹏Appen

人工智能 机器学习 大数据 数据标注

解密华为云FusionInsight MRS新特性:一架构三湖

华为云开发者联盟

数据湖 云原生 华为云 FusionInsight MRS TechWave

Hybris开发环境的license计算实现

Jerry Wang

Java SAP Hybris Commerce Cloud

PlatONE联盟链如何实现大规模生产级应用?

CECBC

Java基础(一)——Java入门和IntelliJ IDEA使用

空城机

Java IDEA 5月日更

防火墙

escray

学习 极客时间 安全 5月日更 安全攻防技能30讲

前端开发:node.js的node包管理器npm安装以及使用

三掌柜

5月日更

【Flutter 专题】121 图解简易 Slider 滑动条

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

Github Action 自动构建 Flutter Android Apk

Leetao

flutter Github Actions

一文带你认识MindSpore新一代分子模拟库SPONGE

华为云开发者联盟

神经网络 mindspore 新一代分子模拟库 SPONGE 分子结构

人生算法:掌控大脑的两种模式

石云升

读书笔记 思维模型 5月日更

CRM WebUI and Hybris的Product页面标题实现

Jerry Wang

CRM SAP WebClient UI Hybris

着力区块链技术等方向,上海这所高校成立研究院

CECBC

中国与世界共享数字经济机遇

CECBC

数字经济

ABAP Netweaver和Hybris里获得内存使用统计数据

Jerry Wang

Java CRM abap C4C Hybris

《觉醒年代》观后感

xiezhr

觉醒年代 五四运动 南陈北李

架构实战营模块4作业

阿体

为什么很多程序员,成为不了技术大牛?

实力程序员

k8s 上运行我们的 springboot 服务之——技术方案实现图

柠檬

k8s SpringBoot 2

教你用 3 行代码发邮件

小匚

Python 学习 自动化

高效软件开发团队的4个习惯_文化 & 方法_Denise Yu_InfoQ精选文章