你好,我是葛俊。今天,我来和你聊聊团队的信息流通问题。
研发过程中的信息流通,指的是各种跟研发相关的信息在工具、团队成员之间的流动。这些信息大到公司战略,小到Bug ID,是一个团队达成共识、高效工作的重要因素。比如,你是否也曾遇到下面这些研发过程中的不顺畅问题呢?
实际上,这些问题都是信息流通不顺畅造成的。那么今天,我们就来看看如何做到信息流通,从而让开发人员更顺畅地生产出高价值的产品。总结来说,就是要从以下三个方面入手:
接下来,我们分别看看如何实施吧。
人是首要的,不解决人的意愿问题,流程、工具再好,也用不好甚至用不起来。所以,让团队成员愿意共享,是有效沟通的前提。那,怎么才能调动起团队成员共享消息的意愿呢?
首先,要让团队成员了解信息的重要性。软件开发本来就需要多人协作,沟通的重要性不言而喻。但,有相当一部分开发者,尤其是初级开发者,因为工作经验欠缺等原因不愿意去和别人沟通,甚至意识不到信息流通的重要性。
所以,作为开发人员,我们要主动去克服不愿意沟通的倾向,比如在对需求有疑问时提醒自己,如果现在花一小时的时间去沟通,很可能会节省自己后面三天的时间;而作为团队管理者,我们更要在团队内强调沟通的重要性。
但,了解信息流通的重要性,只是实现顺畅沟通的基础。更重要的是,我们要在团队内部建设机制,来鼓励共享的行为,从而形成共享的文化。
简单来说,就是让信息共享和每个成员的利益紧密联系起来。这样做,可以帮助我们解决最终产品背离用户需求,以及前后端沟通不畅导致返工等低效能问题。这一类问题的共同点在于,负责整个产品或者API的成员没有紧密合作。在按职能划分的团队,尤其容易出现。因为职能部门的成员,在职能线上向上汇报,最关注的往往是职能部分的完成情况,而不是整个产品的进展。
一个比较有效的解决办法是,按照产品或者功能划分团队,让团队成员直接对产品或者功能负责,Facebook和Spotify等很多高效能公司使用的就是这种方法。
一个团队负责一个产品或者功能,构成上一般不超过15个人,包括产品经理、UI设计、数据科学家、前后端开发者。团队的工作重心就是把产品和功能做好,这也就意味着只有把产品和功能做好了,每个人的绩效才会好。
在这种情况下,沟通就和自己的利益紧密相关,所以大家会通过主动沟通去推动产品和功能的开发。比如,产品设计得慢了,开发人员就会去催促询问,看有没有自己能够帮得上忙的地方。
但是,改变公司的组织架构往往阻力大、推进缓慢,我们还是先立足现状,去解决按照职能划分团队的沟通问题。一个比较有效的办法是,使用虚拟团队。我以前在微软的Office团队第一次见到这种方式,后来又把它用在了其他公司,效果非常好。
具体的办法是,给每个功能设计一个虚拟团队,包括产品、设计,以及相关的开发人员。之所以说是虚拟团队,是因为它并不存在于公司的正式组织架构里。我们明确这个团队的职责,就是要做好某个功能。当时我采用的办法也很简单,就是给每个虚拟团队建立一个专门的聊天群,来沟通这个功能的相关问题。而我每周会收集每个虚拟团队的工作进展情况,以此来推动产品维度的进展。
说到这儿,你可能会有一个疑问,我对非开发部门没有掌控权怎么办?事实上,我在推动这个虚拟团队的时候,只负责管理前后端开发人员,对产品等团队没有管理权。但因为这个虚拟团队,和其他团队不存在利益冲突,而且流程很轻,所以并没有任何反对声音。而在虚拟团队中,我负责管理的前后端开发人员会主动发力,促进整个虚拟团队的顺畅沟通,效果非常好。
有了主动沟通的意愿,我们就可以开展下一步工作了,即设计流程和使用工具,推动研发信息的高效沟通。
这一步的关键在于确认研发流程中的重要信息,然后针对性地设计合适的流程,并选用恰当的工具。
在我看来,对提高研发效能起到关键作用的信息,主要分为4种。
这一类信息的处理原则是尽量公开。只有当团队成员清楚公司以及团队目标时,才能更容易把自己的目标与之对齐。或许,这就是OKR最近几年特别流行的原因吧。如果你想深入了解OKR,并在团队中落地,可以参考我的朋友黄勇开设的《黄勇的OKR实战笔记》课程。
Facebook每年都会召开一个员工大会,详细列举公司的战略目标;每周还会有一个Q&A会议,每个员工都可以参加,马克 · 扎克伯格(Mark Zuckerburg)会亲自出席,并回答员工提出的各种问题。这些举措,都促进了员工对公司战略和目标的深入理解。
这一类信息的处理原则也是尽量公开。代码是最直接的参考,是最实时的文档。Facebook基本所有的代码仓,都对全部开发人员公开。更进一步地,我们不但可以阅读其他团队的代码,还可以主动去修改、提高他们的代码,只要修改得当,发出的PR就会被接受。
在国内,由于IP保护不力等客观原因,绝大部分公司不愿意把代码对所有员工公开,这也可以理解。不过在这种情况下,我还是建议在不泄露核心机密、不影响核心业务的前提下,尽量扩大代码公开的范围以及受众人群。
选择共享代码的工具和方式,基本原则是方便查找,并在进行开发工作的主要入口(比如IDE、命令行工具、Web浏览器)提供接口。
以Facebook为例,他们使用Phabricator的Diffusion子功能,方便团队成员在网页上浏览和查找代码仓的历史;在代码搜索方面,他们自研了一个内部工具,对主要代码仓的代码进行几乎实时的索引,开发人员通过网页浏览器、命令行,以及IDE的插件使用代码搜索功能。
高效的代码浏览和搜索对研发顺畅很重要,推荐你加大在这方面的投入。
这些文档,包括产品设计文档、开发设计文档、测试文档、部署流程文档等。确保这一类信息的高效流通,比较有效的原则是,通过统一的工具,方便大家添加、修改、查询这些文档。
在Facebook,每个产品团队可以选择自己的文档管理方式。总的来说,绝大部分团队主要使用公司统一的Wiki来进行松散的文档管理,既方便添加、修改,也方便搜索。而对于那些比较正式的文档,有些团队会使用类似Quip的共享文档系统进行管理。
关于文档管理,有两点值得强调:
整个研发流程中,在各种工具之间流动着多种标识信息,包括任务工单、代码提交号、版本号、代码审查ID、测试用例ID、Bug ID等。在我看来,管理这一类信息的有效方法是,各种工具通过提供API,做到服务化,形成工具之间的网状连接,以方便开发人员在工具上快速拿到需要的各种信息。
接下来,我们看一个热修复的具体案例。开发人员写好热修复的代码提交后,需要去发布工具网站填写这个提交的Commit ID,申请进行热修复。热修复发布工具根据Commit ID,找到对应的代码审查ID以及Bug ID,自动显示到这个网页上。同时,这个工具还会自动找到这个热修复提交所依赖的、还没有上生产的其他提交,并显示出它们的信息。
有了这些信息,开发人员就可以方便地检查、确认自己的这个热修复可以提交,然后点击确认,正式申请热修复。最后,热修复发布工具自动cherry-pick这些提交,把它们都部署到一个热修复环境上进行验证。
整个流程中涉及的服务和工具包括:代码仓服务、代码审查服务、Bug管理系统、测试验证服务、发布上线服务等。这些工具具有信息高度互通以及自动化的特点,使得开发人员和运维人员能够以最快的速度拿到各种信息,避免繁琐而且容易出错的手工操作,从而尽快部署热修复。
这也就解决了信息溯源难的问题。
通过对研发流程中重要信息的管理,以及对应的高效沟通方式,我们就实现了研发信息流通的顺畅性,从而实现了团队的高效协作。最后,我们再来看看在具体的工作中,团队成员之间有哪些沟通方式和技巧。
高效沟通是个很大的话题,涉及方式、技巧等内容。落到研发团队沟通的具体场景中,我认为高效沟通的首要原则就是,根据沟通需要达成的任务的实时性、方便追溯性,以及对别人的干扰程度,选择合适的沟通工具。
面对面、电话、实时聊天工具、邮件、具体任务工具中讨论等不同的沟通方式,在实时性、方便追溯性、对他人干扰程度等方面各不相同。我将其总结为了一幅图,供你参考。
可以看到,不同的沟通方式之间差别很大,我们应该根据具体场景去选择不同的沟通工具。但在现实工作中,有一个不太好的趋势,就是大家都倾向于追求沟通的实时性,大多使用即时聊天工具和电话。这个情况在国内尤其严重,很多公司完全使用即时聊天工具,比如微信、钉钉等,基本上放弃了邮件等其他方式。
使用这种方法,最主要的好处实时性好,因为每个人都希望自己的问题能够马上得到反馈。但,短暂的好处却带来了长远的利益损失,主要表现在以下两个方面。
解决这个问题的办法很简单,就是针对不同的情况,要求大家使用合适的工具去沟通,并逐渐形成习惯。
具体来说,首先,对某个任务进行讨论时,最好是直接使用任务工具中的讨论功能,同时通过@的方式来告知相关人员。而一般的工具都可以配置出现@时,自动发邮件通知对方。所以,如果不是紧急任务,都可以采用这种方式。
其次,在询问问题的时候,可以分以下3种情况,选择沟通方式和工具:
在我看来,选择合适的沟通方式及工具,不仅可以大大减少员工间的互相干扰,还可以提高问题的可追溯性,对团队以及个人的研发效能提升帮助非常大。
在今天这篇文章中,我从人、流程、沟通方式和工具这3大方面,和你推荐了沟通顺畅,进而提高效能的方法。我们再一起回忆下核心知识点吧。
实现高效沟通首先要解决的,就是团队成员的意愿问题,让他们愿意沟通。我们可以将沟通与团队成员的利益挂钩,在团队内部建设机制,来鼓励共享的行为,从而形成共享的文化。
然后,针对研发流程中流动的各种信息,我们要做好分类,针对性地设计合适的流程,并选用恰当的工具,最大程度地共享给团队成员。比如,公司的代码、战略目标、文档、流程等信息,尽量公开;再比如,使用统一的工具,方便团队成员添加、查询有效信息。
最后,在平时的沟通中,要权衡实时性、可追溯性以及对其他成员的干扰程度。根据场景,选择合适的沟通方式和工具,提升团队和个人的研发效能。
开发者大多在沟通上有所欠缺,有时甚至认识不到沟通的重要性。事实上,信息的缺失,对研发效能影响非常大。试想一下,如果没有搜索引擎的帮助,你写代码的效率会下降多少呢。所以,在信息沟通上多花些时间、精力,对团队和个人效能的提升都大有裨益。
另外,在硅谷的互联网公司,大家都很在意被打断的情况。如果你在没必要的情况下,使用聊天工具或者电话跟同事沟通的话,他会非常生气。
在Facebook时,有些同事会直接告诉其他人,如果我戴上耳机,就表示不希望被干扰,除非紧急情况,否则不要找我当面沟通问题。虽说这种做法有些极端,但我非常希望国内公司也能够尝试类似的工作方式,因为它能让大家安心开发,在高效产出的同时,更多地享受心流的快乐。
在工作中,你见到的信息沟通的最大问题是什么,在今天的文章中能找到合适的解决方法吗?如果没有找到,你还有什么建议的解决方法吗?
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!
评论