<audio id="audio" title="09 | 信息流通：让团队高效协同，让产品准确击中目标" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/e0/82/e05fce5bf705d0e17615b177227f5a82.mp3"></audio>

你好，我是葛俊。今天，我来和你聊聊团队的信息流通问题。

研发过程中的信息流通，指的是各种跟研发相关的信息在工具、团队成员之间的流动。这些信息大到公司战略，小到Bug ID，是一个团队达成共识、高效工作的重要因素。比如，你是否也曾遇到下面这些研发过程中的不顺畅问题呢？

- **最终产品背离用户需求**。我曾提到，一个常见的低效能问题是，研发团队生产出来的产品与最初的产品设计差别很大，甚至需要完全返工。
- **前后端沟通不顺畅**。后端修改API 阻塞了前端的工作，或者后端实现了新的API前端不知道，继续使用旧的API造成浪费。
- **信息孤岛**。在公司内部找信息反而比在互联网上找信息还要难，需要到处找人问，还不一定能问到。
- **信息难以溯源**。团队成员不知道怎么寻找问题的源头，也不知道软件包发布了哪些功能。
- **工作干扰大**。开发工作常被实时聊天工具、电话等打断，刚整理好的思路又得重新梳理。

实际上，这些问题都是信息流通不顺畅造成的。那么今天，我们就来看看如何做到信息流通，从而让开发人员更顺畅地生产出高价值的产品。总结来说，就是要从以下三个方面入手：

- 首先，从“人”入手，建设共享文化，鼓励共享行为，使信息共享与团队成员利益一致，从而让大家愿意共享。
- 然后，在流程和工具方面，针对与研发相关的信息，设计并实现对应代码、文档的共享，以及信息在流水线上的自动化流动。
- 最后，在沟通技巧上下功夫，掌握高效沟通的原则，根据场景选择合适的沟通方式和工具。

接下来，我们分别看看如何实施吧。

## 团队成员愿意共享是有效沟通的前提

人是首要的，不解决人的意愿问题，流程、工具再好，也用不好甚至用不起来。所以，让团队成员愿意共享，是有效沟通的前提。那，怎么才能调动起团队成员共享消息的意愿呢？

**首先，要让团队成员了解信息的重要性**。软件开发本来就需要多人协作，沟通的重要性不言而喻。但，有相当一部分开发者，尤其是初级开发者，因为工作经验欠缺等原因不愿意去和别人沟通，甚至意识不到信息流通的重要性。

所以，作为开发人员，我们要主动去克服不愿意沟通的倾向，比如在对需求有疑问时提醒自己，如果现在花一小时的时间去沟通，很可能会节省自己后面三天的时间；而作为团队管理者，我们更要在团队内强调沟通的重要性。

但，了解信息流通的重要性，只是实现顺畅沟通的基础。更重要的是，我们要**在团队内部建设机制，来鼓励共享的行为，从而形成共享的文化。**

简单来说，就是让信息共享和每个成员的利益紧密联系起来。这样做，可以帮助我们解决最终产品背离用户需求，以及前后端沟通不畅导致返工等低效能问题。这一类问题的共同点在于，负责整个产品或者API的成员没有紧密合作。在按职能划分的团队，尤其容易出现。因为职能部门的成员，在职能线上向上汇报，最关注的往往是职能部分的完成情况，而不是整个产品的进展。

一个比较有效的解决办法是，**按照产品或者功能划分团队，让团队成员直接对产品或者功能负责**，Facebook和Spotify等很多高效能公司使用的就是这种方法。

一个团队负责一个产品或者功能，构成上一般不超过15个人，包括产品经理、UI设计、数据科学家、前后端开发者。团队的工作重心就是把产品和功能做好，这也就意味着只有把产品和功能做好了，每个人的绩效才会好。

在这种情况下，沟通就和自己的利益紧密相关，所以大家会通过主动沟通去推动产品和功能的开发。比如，产品设计得慢了，开发人员就会去催促询问，看有没有自己能够帮得上忙的地方。

但是，改变公司的组织架构往往阻力大、推进缓慢，我们还是先立足现状，去**解决按照职能划分团队的沟通问题**。一个比较有效的办法是，使用虚拟团队。我以前在微软的Office团队第一次见到这种方式，后来又把它用在了其他公司，效果非常好。

具体的办法是，**给每个功能设计一个虚拟团队**，包括产品、设计，以及相关的开发人员。之所以说是虚拟团队，是因为它并不存在于公司的正式组织架构里。我们明确这个团队的职责，就是要做好某个功能。当时我采用的办法也很简单，就是给每个虚拟团队建立一个专门的聊天群，来沟通这个功能的相关问题。而我每周会收集每个虚拟团队的工作进展情况，以此来推动产品维度的进展。

说到这儿，你可能会有一个疑问，**我对非开发部门没有掌控权怎么办？**事实上，我在推动这个虚拟团队的时候，只负责管理前后端开发人员，对产品等团队没有管理权。但因为这个虚拟团队，和其他团队不存在利益冲突，而且流程很轻，所以并没有任何反对声音。而在虚拟团队中，我负责管理的前后端开发人员会主动发力，促进整个虚拟团队的顺畅沟通，效果非常好。

有了主动沟通的意愿，我们就可以开展下一步工作了，即设计流程和使用工具，推动研发信息的高效沟通。

## 设计流程和使用工具，推动研发信息高效沟通

这一步的关键在于确认研发流程中的重要信息，然后针对性地设计合适的流程，并选用恰当的工具。

在我看来，对提高研发效能起到关键作用的信息，主要分为4种。

### 第1种信息是，战略目标相关的信息

这一类信息的处理原则是尽量公开。只有当团队成员清楚公司以及团队目标时，才能更容易把自己的目标与之对齐。或许，这就是OKR最近几年特别流行的原因吧。如果你想深入了解OKR，并在团队中落地，可以参考我的朋友黄勇开设的《黄勇的OKR实战笔记》课程。

Facebook每年都会召开一个员工大会，详细列举公司的战略目标；每周还会有一个Q&amp;A会议，每个员工都可以参加，马克 · 扎克伯格（Mark Zuckerburg）会亲自出席，并回答员工提出的各种问题。这些举措，都促进了员工对公司战略和目标的深入理解。

### 第2种信息是，代码相关的信息

这一类信息的处理原则也是尽量公开。代码是最直接的参考，是最实时的文档。Facebook基本所有的代码仓，都对全部开发人员公开。更进一步地，我们不但可以阅读其他团队的代码，还可以主动去修改、提高他们的代码，只要修改得当，发出的PR就会被接受。

在国内，由于IP保护不力等客观原因，绝大部分公司不愿意把代码对所有员工公开，这也可以理解。不过在这种情况下，我还是建议在不泄露核心机密、不影响核心业务的前提下，尽量扩大代码公开的范围以及受众人群。

**选择共享代码的工具和方式，基本原则是方便查找，并在进行开发工作的主要入口（比如IDE、命令行工具、Web浏览器）提供接口。**

以Facebook为例，他们使用Phabricator的Diffusion子功能，方便团队成员在网页上浏览和查找代码仓的历史；在代码搜索方面，他们自研了一个内部工具，对主要代码仓的代码进行几乎实时的索引，开发人员通过网页浏览器、命令行，以及IDE的插件使用代码搜索功能。

高效的代码浏览和搜索对研发顺畅很重要，推荐你加大在这方面的投入。

### 第3种信息是，研发过程中用到的各种文档

这些文档，包括产品设计文档、开发设计文档、测试文档、部署流程文档等。确保这一类信息的高效流通，比较有效的原则是，通过统一的工具，方便大家添加、修改、查询这些文档。

在Facebook，每个产品团队可以选择自己的文档管理方式。总的来说，绝大部分团队主要使用公司统一的Wiki来进行松散的文档管理，既方便添加、修改，也方便搜索。而对于那些比较正式的文档，有些团队会使用类似Quip的共享文档系统进行管理。

关于文档管理，有两点值得强调：

- 第一，文档的管理流程，由每个小的功能团队决定。就比如，我刚才提到的10个人左右的小团队，因为他们的共同目标是尽快开发好产品，所以会主动寻找一种适合自己团队的文档管理方式和工具。
- 第二，绝大部分Wiki和Quip管理的文档都是全公司公开的，所以团队之间也可以很方便地找到其他团队的相关文档，避免信息孤岛的问题。

### 第4种信息是，各种标识信息

整个研发流程中，在各种工具之间流动着多种标识信息，包括任务工单、代码提交号、版本号、代码审查ID、测试用例ID、Bug ID等。在我看来，**管理这一类信息的有效方法是，各种工具通过提供API，做到服务化，形成工具之间的网状连接**，以方便开发人员在工具上快速拿到需要的各种信息。

接下来，我们看一个热修复的具体案例。开发人员写好热修复的代码提交后，需要去发布工具网站填写这个提交的Commit ID，申请进行热修复。热修复发布工具根据Commit ID，找到对应的代码审查ID以及Bug ID，自动显示到这个网页上。同时，这个工具还会自动找到这个热修复提交所依赖的、还没有上生产的其他提交，并显示出它们的信息。

有了这些信息，开发人员就可以方便地检查、确认自己的这个热修复可以提交，然后点击确认，正式申请热修复。最后，热修复发布工具自动cherry-pick这些提交，把它们都部署到一个热修复环境上进行验证。

整个流程中涉及的服务和工具包括：代码仓服务、代码审查服务、Bug管理系统、测试验证服务、发布上线服务等。这些工具具有信息高度互通以及自动化的特点，使得开发人员和运维人员能够以最快的速度拿到各种信息，避免繁琐而且容易出错的手工操作，从而尽快部署热修复。

这也就解决了信息溯源难的问题。

通过对研发流程中重要信息的管理，以及对应的高效沟通方式，我们就实现了研发信息流通的顺畅性，从而实现了团队的高效协作。最后，我们再来看看在具体的工作中，团队成员之间有哪些沟通方式和技巧。

## 沟通方式技巧

高效沟通是个很大的话题，涉及方式、技巧等内容。落到研发团队沟通的具体场景中，我认为高效沟通的首要原则就是，**根据沟通需要达成的任务的实时性、方便追溯性，以及对别人的干扰程度，选择合适的沟通工具**。

面对面、电话、实时聊天工具、邮件、具体任务工具中讨论等不同的沟通方式，在实时性、方便追溯性、对他人干扰程度等方面各不相同。我将其总结为了一幅图，供你参考。

<img src="https://static001.geekbang.org/resource/image/d6/20/d6eb819cd8828bd0cf11360bc2586620.jpg" alt="">

可以看到，不同的沟通方式之间差别很大，我们应该根据具体场景去选择不同的沟通工具。但在现实工作中，有一个不太好的趋势，就是大家都倾向于追求沟通的实时性，大多使用即时聊天工具和电话。这个情况在国内尤其严重，很多公司完全使用即时聊天工具，比如微信、钉钉等，基本上放弃了邮件等其他方式。

使用这种方法，最主要的好处实时性好，因为每个人都希望自己的问题能够马上得到反馈。但，短暂的好处却带来了长远的利益损失，主要表现在以下两个方面。

- 问题难以追踪。在聊天群里讨论问题时，问题只要一多马上就乱了，很难找到之前的相关内容。
- 对他人干扰巨大。一个极端情况是，我见过一个公司，有数据显示开发人员平均每8分钟就会被打断一次。可想而知，这种情况下的开发效率自然很低。

**解决这个问题的办法很简单，就是针对不同的情况，要求大家使用合适的工具去沟通，并逐渐形成习惯。**

具体来说，首先，**对某个任务进行讨论时**，最好是直接使用任务工具中的讨论功能，同时通过@的方式来告知相关人员。而一般的工具都可以配置出现@时，自动发邮件通知对方。所以，如果不是紧急任务，都可以采用这种方式。

**其次，在询问问题的时候**，可以分以下3种情况，选择沟通方式和工具：

- 如果问题不紧急，尽量使用邮件，避免使用即时聊天工具和电话。为了确保大家能够及时回复邮件，可以在团队内制定一个规定，要求检查邮件的频率，比如说每天至少检查一次或者两次。
- 如果问题紧急，则直接使用即时聊天工具、电话。
- 如果要讨论的问题比较复杂，或者是非常紧急，则直接选择电话，或者面对面沟通。

在我看来，选择合适的沟通方式及工具，不仅可以大大减少员工间的互相干扰，还可以提高问题的可追溯性，对团队以及个人的研发效能提升帮助非常大。

## 小结

在今天这篇文章中，我从人、流程、沟通方式和工具这3大方面，和你推荐了沟通顺畅，进而提高效能的方法。我们再一起回忆下核心知识点吧。

实现高效沟通首先要解决的，就是团队成员的意愿问题，让他们愿意沟通。我们可以将沟通与团队成员的利益挂钩，在团队内部建设机制，来鼓励共享的行为，从而形成共享的文化。

然后，针对研发流程中流动的各种信息，我们要做好分类，针对性地设计合适的流程，并选用恰当的工具，最大程度地共享给团队成员。比如，公司的代码、战略目标、文档、流程等信息，尽量公开；再比如，使用统一的工具，方便团队成员添加、查询有效信息。

最后，在平时的沟通中，要权衡实时性、可追溯性以及对其他成员的干扰程度。根据场景，选择合适的沟通方式和工具，提升团队和个人的研发效能。

开发者大多在沟通上有所欠缺，有时甚至认识不到沟通的重要性。事实上，信息的缺失，对研发效能影响非常大。试想一下，如果没有搜索引擎的帮助，你写代码的效率会下降多少呢。所以，在信息沟通上多花些时间、精力，对团队和个人效能的提升都大有裨益。

另外，在硅谷的互联网公司，大家都很在意被打断的情况。如果你在没必要的情况下，使用聊天工具或者电话跟同事沟通的话，他会非常生气。

在Facebook时，有些同事会直接告诉其他人，如果我戴上耳机，就表示不希望被干扰，除非紧急情况，否则不要找我当面沟通问题。虽说这种做法有些极端，但我非常希望国内公司也能够尝试类似的工作方式，因为它能让大家安心开发，在高效产出的同时，更多地享受心流的快乐。

## 思考题

在工作中，你见到的信息沟通的最大问题是什么，在今天的文章中能找到合适的解决方法吗？如果没有找到，你还有什么建议的解决方法吗？

感谢你的收听，欢迎你在评论区给我留言分享你的观点，也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见！


