研发过程中的信息流通,指的是各种跟研发相关的信息在工具、团队成员之间的流动。这些信息大到公司战略,小到 Bug ID,是一个团队达成共识、高效工作的重要因素。
比如,你是否也曾遇到下面这些研发过程中的不顺畅问题呢?
-
最终产品背离用户需求。
一个常见的低效能问题是,研发团队生产出来的产品与最初的产品设计差别很大,甚至需要完全返工。 -
前后端沟通不顺畅。
后端修改 API 阻塞了前端的工作,或者后端实现了新的 API 前端不知道,继续使用旧的 API 造成浪费。 -
信息孤岛。
在公司内部找信息反而比在互联网上找信息还要难,需要到处找人问,还不一定能问到。 -
信息难以溯源。
团队成员不知道怎么寻找问题的源头,也不知道软件包发布了哪些功能。 -
工作干扰大。
开发工作常被实时聊天工具、电话等打断,刚整理好的思路又得重新梳理。
实际上,这些问题都是信息流通不顺畅造成的。
那么,我们就来看看如何做到信息流通,从而让开发人员更顺畅地生产出高价值的产品。
总结来说,就是要从以下三个方面入手:
- 首先,从“人”入手,建设共享文化,鼓励共享行为,使信息共享与团队成员利益一致,从而让大家愿意共享。
- 然后,在流程和工具方面,针对与研发相关的信息,设计并实现对应代码、文档的共享,以及信息在流水线上的自动化流动。
- 最后,在沟通技巧上下功夫,掌握高效沟通的原则,根据场景选择合适的沟通方式和工具。
分别看看如何实施
一.团队成员愿意共享是有效沟通的前提
人是首要的,不解决人的意愿问题,流程、工具再好,也用不好甚至用不起来。
所以,让团队成员愿意共享,是有效沟通的前提。
那,怎么才能调动起团队成员共享消息的意愿呢?
首先,团队成员了解信息的重要性。
软件开发本来就需要多人协作,沟通的重要性不言而喻。但,有相当一部分开发者,尤其是初级开发者,因为工作经验欠缺等原因不愿意去和别人沟通,甚至意识不到信息流通的重要性。
所以,作为开发人员,我们要主动去克服不愿意沟通的倾向,比如在对需求有疑问时提醒自己,如果现在花一小时的时间去沟通,很可能会节省自己后面三天的时间;而作为团队管理者,我们更要在团队内强调沟通的重要性。
在团队内部建设机制,来鼓励共享的行为,从而形成共享的文化。
简单来说,就是让信息共享和每个成员的利益紧密联系起来。这样做,可以帮助我们解决最终产品背离用户需求,以及前后端沟通不畅导致返工等低效能问题。这一类问题的共同点在于,负责整个产品或者 API 的成员没有紧密合作。在按职能划分的团队,尤其容易出现。因为职能部门的成员,在职能线上向上汇报,最关注的往往是职能部分的完成情况,而不是整个产品的进展。
一个比较有效的解决办法是,
按照产品或者功能划分团队,让团队成员直接对产品或者功能负责,
我之前公司就是采用这种方式,很多高效能公司使用的就是这种方法,。
但是,改变公司的组织架构往往阻力大、推进缓慢,我们还是先立足现状,去解决按照职能划分团队的沟通问题。
解决按照职能划分团队的沟通问题,给每个功能设计一个虚拟团队
一个比较有效的办法是,给每个功能设计一个虚拟团队,包括产品、设计,以及相关的开发人员。之所以说是虚拟团队,是因为它并不存在于公司的正式组织架构里。我们明确这个团队的职责,就是要做好某个功能。之前公司,就是给每个虚拟团队建立一个专门的聊天群,来沟通这个功能的相关问题。而项目经理或相关负责人会收集每个虚拟团队的工作进展情况,以此来推动产品维度的进展。
对于非开发部门。事实上,这个虚拟团队只负责管理前后端开发人员,对产品等团队没有管理权。但因为这个虚拟团队,和其他团队不存在利益冲突,而且流程很轻,所以并没有任何反对声音。而在虚拟团队中,前后端开发人员会主动发力,促进整个虚拟团队的顺畅沟通,效果非常好。
二.设计流程和使用工具,推动研发信息高效沟通
这一步的关键在于确认研发流程中的重要信息,然后针对性地设计合适的流程,并选用恰当的工具。
在我看来,对提高研发效能起到关键作用的信息,主要分为 4 种。
第 1 种信息是,战略目标相关的信息这一类信息的处理原则是尽量公开。
只有当团队成员清楚公司以及团队目标时,才能更容易把自己的目标与之对齐。或许,这就是 OKR 最近几年特别流行的原因吧。
Facebook 每年都会召开一个员工大会,详细列举公司的战略目标;每周还会有一个 Q&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 管理系统、测试验证服务、发布上线服务等。这些工具具有信息高度互通以及自动化的特点,使得开发人员和运维人员能够以最快的速度拿到各种信息,避免繁琐而且容易出错的手工操作,从而尽快部署热修复。
这也就解决了信息溯源难的问题。
通过对研发流程中重要信息的管理,以及对应的高效沟通方式,我们就实现了研发信息流通的顺畅性,从而实现了团队的高效协作。
三.沟通方式技巧
高效沟通是个很大的话题,涉及方式、技巧等内容。落到研发团队沟通的具体场景中,我认为高效沟通的首要原则就是,根据沟通需要达成的任务的实时性、方便追溯性,以及对别人的干扰程度,选择合适的沟通工具。
面对面、电话、实时聊天工具、邮件、具体任务工具中讨论等不同的沟通方式,在实时性、方便追溯性、对他人干扰程度等方面各不相同。
图 1 各种沟通方式的特点很多公司完全使用即时聊天工具,比如微信、钉钉等,基本上放弃了邮件等其他方式。使用这种方法,最主要的好处实时性好,因为每个人都希望自己的问题能够马上得到反馈。但,短暂的好处却带来了长远的利益损失,主要表现在以下两个方面。
- 问题难以追踪。在聊天群里讨论问题时,问题只要一多马上就乱了,很难找到之前的相关内容。
- 对他人干扰巨大。这种情况下的开发效率自然很低。
解决这个问题的办法很简单,就是针对不同的情况,要求大家使用合适的工具去沟通,并逐渐形成习惯。
具体来说,
首先,对某个任务进行讨论时,最好是直接使用任务工具中的讨论功能,同时通过 @的方式来告知相关人员。而一般的工具都可以配置出现 @时,自动发邮件通知对方。所以,如果不是紧急任务,都可以采用这种方式。
其次,在询问问题的时候,可以分以下 3 种情况,选择沟通方式和工具:
- 如果问题不紧急,尽量使用邮件,避免使用即时聊天工具和电话。为了确保大家能够及时回复邮件,可以在团队内制定一个规定,要求检查邮件的频率,比如说每天至少检查一次或者两次。
- 如果问题紧急,则直接使用即时聊天工具、电话。
- 如果要讨论的问题比较复杂,或者是非常紧急,则直接选择电话,或者面对面沟通。
在我看来,选择合适的沟通方式及工具,不仅可以大大减少员工间的互相干扰,还可以提高问题的可追溯性,对团队以及个人的研发效能提升帮助非常大。
总结
从人、流程、沟通方式和工具这 3 大方面,推荐了沟通顺畅,进而提高效能的方法。
核心知识:
实现高效沟通首先要解决的,就是团队成员的意愿问题,让他们愿意沟通。我们可以将沟通与团队成员的利益挂钩,在团队内部建设机制,来鼓励共享的行为,从而形成共享的文化。
然后,针对研发流程中流动的各种信息,我们要做好分类,针对性地设计合适的流程,并选用恰当的工具,最大程度地共享给团队成员。比如,公司的代码、战略目标、文档、流程等信息,尽量公开;
再比如,使用统一的工具,方便团队成员添加、查询有效信息。
最后,在平时的沟通中,要权衡实时性、可追溯性以及对其他成员的干扰程度。根据场景,选择合适的沟通方式和工具,提升团队和个人的研发效能。
开发者大多在沟通上有所欠缺,有时甚至认识不到沟通的重要性。事实上,信息的缺失,对研发效能影响非常大。试想一下,如果没有搜索引擎的帮助,你写代码的效率会下降多少呢。所以,在信息沟通上多花些时间、精力,对团队和个人效能的提升都大有裨益。
另外,在硅谷的互联网公司,大家都很在意被打断的情况。如果你在没必要的情况下,使用聊天工具或者电话跟同事沟通的话,他会非常生气。
在 Facebook 时,有些同事会直接告诉其他人,如果我戴上耳机,就表示不希望被干扰,除非紧急情况,否则不要找我当面沟通问题。虽说这种做法有些极端,可以尝试类似的工作方式,因为它能让大家安心开发,在高效产出的同时,更多地享受心流的快乐。
思考
在工作中,你遇到信息沟通的最大问题是什么?
有什么建议的解决方法?
网友评论