3.5

3.5 沟通与协作指标

概述与动机

沟通与协作,SPACE(主题 3.1)中的C,衡量的是信息实际上如何在人与团队之间流动:文档有多容易被发现,知识在团队中传播得有多均匀,跨团队依赖被协调得有多好,以及新团队成员如何融入共享理解的流动之中。这个维度往往是五个维度中埋点最少的一个,恰恰因为它比交付数据更难观察,也比满意度数据更不带个人色彩,而这个缺口是一个错误,因为这里的故障,常常是那些在其他每个维度中显现出来、却被错误归因的问题的真正根源。

一项看起来像测试问题的变更失败率(主题 2.10)上升,有时其实是一个沟通问题:一个团队直到在生产环境中出问题之前,都不知道某项依赖发生了变更。一种看起来像工作量问题的满意度下降趋势(主题 3.2),有时其实是一个孤立问题:一名工程师被悄悄排除在决策产生的对话之外。本主题的核心论点是,沟通与协作值得被直接测量,恰恰是因为它们的故障会伪装成其他问题,一个追逐错误根源的团队,会浪费真正的精力去修复错误的东西。

对大团队而言,这个维度在变得越来越重要的同时,也在结构上变得越来越难以维持。一个五人团队的协调通过每日的近距离接触自然发生,几乎不需要刻意的测量;一个分布在多个时区、多个业务单元、有五百人的组织,则依赖于文档、可发现性,以及跨团队协调机制,这些都必须被刻意设计并主动监控,因为在小规模下奏效的非正式渠道,根本无法覆盖那么远的距离。

核心原则

  • 沟通故障常常伪装成其他问题。 一个质量或满意度问题,可能有一个协作方面的根源。
  • 这个维度是最难自动埋点的,因此存在完全跳过它的诱惑;要刻意抵制这种诱惑。
  • 知识集中是一种可测量的风险,而不只是一种模糊的担忧。 跟踪关键知识被掌握得有多狭窄。
  • 跨团队依赖摩擦对涉及其中的团队而言常常是不可见的,除非有人直接去测量它。
  • 入职速度是共享理解在一个组织中实际流动得有多好的一个直接、可测量的代理指标。

建议

直接测量知识集中度

跟踪有多少人能够胜任地评审、修改或运维每个关键系统组件:一个只有一名合格人员的组件,其巴士因子为一,这是一种严重且常常不可见的风险(姊妹书籍software-engineering-guide中关于维持长寿命系统的主题对此有更深入的探讨)。版本控制的责任归属数据,结合待命轮值记录,可以自动揭示这种集中度:留意那些在一段有意义的时期内,单一作者或单一待命响应人员占了不成比例份额的变更或事件响应的组件。

用一个直接信号测量跨团队依赖摩擦

跟踪一项跨团队请求,一次所需的API变更、一次共享库更新、一次协调发布,从被提出到被解决所花的时间,这在精神上类似于主题 2.6 的周期时间分解,但专门应用于团队之间的协调,而不是团队内部的协调。一个持续等待另一个团队所拥有的依赖项数周之久的团队,存在一个协作问题,而这个问题不会干净利落地显现在任何一方自己的内部交付指标中。

用文档的可发现性,而不只是文档的存在,作为信号

一个满是过时或无法找到的页面的维基百科,并不能仅仅因为内容在技术上存在于某处,就算作良好沟通的证据。在可能的情况下,跟踪文档实际被访问的频率,一名新团队成员报告自己找不到所需答案的频率,或者同一个问题在一个聊天频道中被反复问起的频率,因为答案虽然已被记录,却无法被发现。这直接把文档质量(主题 4.6)与这个维度的协作关切联系了起来。

把到达有生产力贡献的入职时间作为直接代理指标来跟踪

从一名新团队成员加入,到他们第一次做出有意义的、独立的贡献之间的时间,是共享理解在一个组织中实际流动得有多好的一个强有力、实用的代理指标:一个知识完全存在于人们脑子里的团队,入职速度缓慢且难以预测;一个拥有真正良好文档、清晰所有权和可获得指导的团队,入职速度更快、也更一致。明确地跟踪这项指标,把漫长或高度不稳定的入职时间当作一个协作信号,而不仅仅是一个人力资源方面的关切。

定期绘制真实的沟通网络,而不只是组织架构图

一张组织架构图描述的是谁应该向谁汇报;它很少描述的是谁实际上在与谁交流以完成工作。定期、轻量级地分析沟通模式,代码评审网络(谁评审谁的工作),或会议出席重叠情况,可以揭示出一种与正式组织架构图有实质性差异的真实协作结构,常常暴露出一个非正式的瓶颈(人人都要经过的某一个人),或一个孤立的角落(一个已经脱离了更广泛信息流动的子团队),否则这些都会保持不可见。

权衡取舍:利与弊

方案优点缺点
不直接测量协作开销低根源会被错误归因到其他维度;风险保持不可见
知识集中度跟踪直接揭示一种真实、严重的风险(巴士因子)需要组合来自多个系统(版本控制、待命)的数据
跨团队依赖摩擦跟踪揭示出对任何一方团队而言都不可见的协调问题需要刻意埋点;无法从现有工具自动获得
沟通网络绘图揭示出组织架构图背后真实的非正式结构如果不像对待满意度数据那样谨慎处理,可能感觉带有侵入性

核心张力是埋点难度与诊断价值之间的张力。这个维度确实比交付数据或活动数据更难自动测量,这种困难恰恰是许多组织跳过它的原因,即便它的故障常常是被归因给其他维度的问题背后隐藏的真正根源。解决这种张力的办法,是在尝试更具野心的沟通网络分析之前,先从价值最高、最容易实现的信号入手,知识集中度和跨团队依赖摩擦,这两者在很大程度上都可以从现有的版本控制和议题跟踪数据中得出。

与团队讨论的问题

  1. 我们知道每个关键系统组件的巴士因子吗,还是只会在那个唯一理解它的人不可用时才艰难地发现? 为你最关键的系统拉取版本控制和待命数据,诚实地检查知识实际上有多集中。

  2. 一项典型的跨团队依赖请求需要多久才能解决,如果不刻意测量它,涉及其中的任何一方团队会注意到这种摩擦吗? 挑一个近期的跨团队依赖,追溯它实际的时间线;答案往往比任何一方团队所假定的更长,对涉及其中的人来说也更不可见。

  3. 我们最近遇到的质量或满意度问题,其真正的根源中会不会有一部分是沟通或协作故障? 回顾一次近期的事件或一次满意度下滑,专门问这个问题,而不是接受第一个、更显而易见的解释。

  4. 一名新团队成员做出第一次有意义、独立贡献需要多长时间,这个时间在不同人之间差异有多大? 漫长或高度不稳定的入职时间,是共享理解在你团队上实际流动得有多好的一个直接、可测量的症状。

  5. 我们的非正式沟通网络是否与我们正式的组织架构图相匹配,还是已经出现了一个没有人点明的隐藏瓶颈或孤立角落? 如果你从未直接审视过这一点,这种缺失本身就值得讨论。

  6. 我们的文档是否真正可以被发现,还是它只是存在于某个难以找到的地方? 问问一位近期的新团队成员,或者刻意尝试只用你已记录的资源来回答一个真实的问题,看看这个体验实际上如何。

行业视角

初创公司。 在一个小团队中,沟通通过近距离接触和日常对话自然发生,正式测量通常没有必要。需要留意的风险,是当团队成长超过非正式渗透仍能覆盖所有人的规模(通常在八到十二人左右)之后,巴士因子危险地集中起来。

小型企业。 一次简单、定期、诚实的对话,“谁是唯一理解这个系统的人”,往往能在不需要正式埋点的情况下,揭示出最关键的知识集中风险。优先记录两三个最脆弱、知识最集中的领域。

企业。 跨团队依赖摩擦和知识集中度在这个规模上都扩展得很糟糕,因为更多的团队意味着更大的协调面,以及更多可能最终由一群日益缩小的资深专家所拥有的关键系统。刻意投资于本主题所建议的埋点,因为非正式的认知在这个规模的组织中确实无法覆盖到位。

政府。 公共部门组织中常见的长寿命系统和长任期员工,可能在表面稳定的背后隐藏着严重的巴士因子风险,因为一个十年都没有换过手的系统,可能完全依赖一两位即将退休的人。把知识集中度测量当作一项业务连续性关切,而不只是工程上的锦上添花。

案例

企业。 一家物流公司的平台团队,直到一位关键工程师休假期间发生一次严重事件之后,才发现一个核心路由算法的有效巴士因子为一:版本控制历史显示,一个人撰写了该组件近期超过90%的变更,待命轮值记录显示,过去两年里,同一个人亲自解决了每一次相关事件。该团队建立了一项刻意的知识传播计划,结对会话,并轮换相关事件的所有权,八个月后的一次后续分析显示,巴士因子已经上升到四,原来的那名工程师也得以腾出手来承担新的、杠杆更高的工作,而不再是一个永久的单点故障。

政府。 一家州福利机构的工程团队,在一项共享资格验证服务中反复出现被非正式注意到的延迟之后,第一次测量了跨团队依赖摩擦。数据显示,来自这个共享服务团队的一项依赖变更,中位等待时间为十一天,远长于双方团队被非正式询问时所假定的时间,而根源结果被证明是一个不清晰、未被记录的请求流程,而不是任何产能短缺。发布一个清晰、简单的请求流程,并为共享服务承诺一个响应时间目标,在一个季度内把中位等待时间降到了两天以内,且无需增加任何人手。

商业理由:动机、投资回报与总拥有成本

直接测量沟通与协作的回报,是捕捉到那些被其他维度错误归因的根源:一个看起来像测试缺口、实则是沟通故障的质量问题,如果一个团队试图靠增加更多测试来修复它,而不是修复底层的协调失败,就会浪费精力。上面的巴士因子案例展示了这种回报最鲜明的版本:一个主动发现并修复严重知识集中风险的组织,避免了在一场真正的危机中才发现它、彼时唯一理解某个关键系统的人真的无法出现时的灾难性代价。

总拥有成本主要是埋点工作,以并非开箱即用自动实现的方式组合版本控制、待命和议题跟踪数据,再加上定期明确审阅知识集中度和依赖摩擦的纪律。相比一场真正的巴士因子危机,或一场长期未被解决的跨团队协调故障的代价,这份成本是适度的。

反模式与陷阱

  • 因为难以自动埋点而跳过这个维度: 让根源被错误归因到其他更容易测量的维度。
  • 把组织架构图当作真实沟通模式的准确图景: 常常是错误的,而这个缺口恰恰是隐藏瓶颈所在之处。
  • 忽视巴士因子,直到一场危机迫使人们发现它: 本主题所警告的破坏性最大的一种失败模式。
  • 假定文档的存在等同于文档的有用性: 过时或无法找到的内容,提供不了多少真实的沟通价值。
  • 测量了跨团队摩擦,却在发现一个清晰、可修复的根源之后不采取行动: 浪费了诊断方面的投入。
  • 把缓慢、不稳定的入职过程纯粹当作人力资源问题,而不是工程协作信号: 错失了一个真正有用、可测量的代理指标。

成熟度模型

  • 第一级,启动: 沟通与协作完全不被测量;巴士因子和跨团队摩擦只通过危机才被发现。
  • 第二级,发展: 对知识集中度存在一些非正式的认知,但没有一致的测量或主动的调查。
  • 第三级,标准化: 巴士因子和跨团队依赖摩擦在全组织范围内针对关键系统和共享服务被一致地测量。
  • 第四级,管理: 沟通网络绘图定期揭示出隐藏的瓶颈和孤立角落,入职时间被作为共享理解健康状况的直接代理指标来跟踪。
  • 第五级,协奏: 组织在知识集中风险和跨团队摩擦引发事件之前,主动降低它们,并能够指出具体的干预措施,刻意的知识传播、明确化的依赖流程,这些措施可衡量地改善了这个维度。

讨论思路

  1. 老实说,我们最关键的单一系统的巴士因子是多少?
  2. 上个季度哪一项跨团队依赖造成了最多的摩擦,我们测量过它吗?
  3. 一名新团队成员会找到我们的文档,还是只会发现它在技术上存在于某处?
  4. 我们的非正式沟通网络是否与我们的组织架构图相匹配?
  5. 我们最近遇到的哪个质量或满意度问题,可能实际上有一个我们尚未调查过的协作方面的根源?

要点回顾

  • 沟通与协作故障常常伪装成其他问题;一个被错误归因到错误维度的根源,会浪费精力。
  • 直接用版本控制和待命数据跟踪知识集中度(巴士因子),而不是等一场危机来揭示它。
  • 明确测量跨团队依赖摩擦;在被测量之前,它对涉及其中的团队通常是不可见的。
  • 把到达有生产力贡献的入职时间用作共享理解流动得有多好的一个直接、实用的代理指标。
  • 定期绘制真实的沟通网络,因为它们常常与正式的组织架构图有实质性的差异。

参考文献与延伸阅读

  • Forsgren, Nicole, Margaret-Anne Storey, Chandra Maddila, Thomas Zimmermann, Brian Houck, and Jenna Butler, “The SPACE of Developer Productivity,” ACM Queue (2021)。
  • Team Topologies,Matthew Skelton、Manuel Pais著(团队互动模式与跨团队依赖设计)。
  • Peopleware: Productive Projects and Teams,Tom DeMarco、Timothy Lister著(非正式沟通结构及其对生产力的影响)。
  • Conway, Melvin E., “How Do Committees Invent?” (1968):康威定律的出处,探讨沟通结构与系统结构之间的关系。