Google 软件工程-团队合作与知识管理

2026/03/04 software_engineering 6 分钟阅读
技术工程

不要一直单打独斗

巴士系数

有一个系数叫“巴士系数”:

巴士系数
多少关键开发者被巴士撞了会让项目停摆。

该系数可用于衡量项目持续性,当只有一个人知道该项目的底细时,这个项目往往很难维持下去。

小步快跑

除了尽可能保障“测试左移”外,在项目进行时也需要通过团队合作,保障项目能一直运行在相对正确的轨道,在紧凑的反馈环中解决漏洞、对齐需求。一般来说,将4~8人的小团队集中到一个环境中,往往是比较有效的。

如何打造稳定的团队

打造稳定的团队,首先需要了解团队社交的三大支柱:谦虚、尊重和信任。另外也需要学会批评与接受批评,打造无指责的回顾文化,比如保持撰写好的回顾分析文档的习惯。同时不要惧怕快速失败和迭代,相反的,每次错误尝试又意味着往前迈了一步。

一份好的回顾文档
一份好的回顾文档应该包含下面这几个部分:

  • 事件的简短摘要
  • 事件的时间表,从发现调查到解决
  • 导致该事件的主要原因
  • 影响和破坏评估
  • 可立即修复问题的行动事项
  • 防止事件再次发生的行动事项
  • 经验教训

这里可以参考“谷歌范儿 (Googley)”,它为团队文化提供了一个良好的参照:

  • 在变化莫测的环境中施展才能:在环境不断应对的情况下,能处理相互冲突的信息或方向,建立共识,并针对问题取得进展。
  • 让反馈变得有价值:谦虚地接受和反馈,理解反馈对个人和团队发展的价值。
  • 挑战现状:能制定雄心勃勃的目标,并追求目标,即使有阻力或惰性。
  • 用户优先:对用户有同情和尊重,并采取符合他们最大利益的行动。
  • 关心团队:对同事有同情心和尊重,积极主动地帮助同事,提高团队凝聚力。
  • 做正确的事:对所做的每件事都保有强烈的道德感,愿意做出困难或令人不舒服的决定,保护团队和产品的完整性。

知识共享的挑战

在知识共享过程中,会出现诸多挑战:

  • 缺乏心里安全感:害怕在别人面前犯错误而收到惩罚,表现为恐惧文化/避免透明度倾向。
  • 信息孤岛:知识碎片化,各部门之间彼此不通信,也不使用共享资源,且做事方式高度差异化,包括信息碎片化、信息重复、信息偏差等现象。
  • 单点故障SPOF:体现为关键信息只能从单个人处获得,而无法培养后继人才,从而出现瓶颈。
  • 专家或新手:一群人被粗暴地切分为两个部分,专家或新手,这导致两类人群之间的鸿沟难以弥补,且新手团队无法发展。
  • 鹦鹉学舌:没有理解的模仿,表现为在不理解模式或代码用途的情况下无意识地复制模式或代码。
  • 闹鬼墓地:人们因为恐惧和迷信而避免采取行动,比如避免接触和更改代码。

设计知识共享

知识共享的基调:心理安全

心理安全对促进学习环境的形成至关重要,尤其是针对大型群体的心理安全。下表就列出了一些推荐的群体互动模式供参考:

推荐模式 (合作)反模式 (对抗)
基本的问题或错误被正确引导基本的问题或错误被挑剔,提问者被责骂
解释的目的是帮助提问者学习解释是为了炫耀自己的知识
回应是亲切的、耐心的和有帮助的回应是居高临下、尖刻、没有建设性的
互动是寻找解决方案的共享讨论互动是“赢家”和“输家”的争论

这里也提供 Recurse Center 的社交规则:

  • 不要假装惊讶:假装惊讶是心理安全的障碍,且会让团队成员害怕承认自己缺乏知识。
  • 不要故弄玄虚:卖弄学问的纠正,往往是哗众取宠,而不是提供精确答案。
  • 不要乱出主意:打断既有讨论,提供意见,但不对谈话内容负责。
  • 不要有微妙的言语表达:带有偏见的一些表达会使人感到不受欢迎、不被尊重或没有安全感。

如何实现知识共享

充实自身

知识分享从自身开始,不仅要理解新事物,还要理解现有设计和实现背后决策的缘由。这里介绍“切斯特森围栏 (Chesterson’s Fence)”原则,即理解上下文:

切斯特森围栏 (Chesterson’s Fence)
在去除或改变某事物前,首先了解它为什么在那。

提问和分享

进一步的,当自身无法解决问题或对知识学习有困难时,可以向社区提问。现在有多种方式进行提问,比如群聊、邮件、问答平台等等。同时也有多种渠道进行分享,比如Office Hours、技术讲座与课程、文档、代码等等。

这里特别强调文档部分的共享:

  • 更新文档:请在发现问题时,在任何合适的时候更新文档,并提供一些评审建议。
  • 创建文档:请确保在执行事务的过程中始终有对应的文档从而方便参照,并确保有一个反馈机制。
  • 文档推广:文档推广是一个值得激励的事,编写文档有助于团队和组织中知识共享的规模化。

组织知识发展

知识共享应该建立在善意和尊重的基础上,且需要提供一定的激励与奖赏。同时,也需要建立足够规范的信息源,作为规范集中的信息库。这个过程有助于知识的扩展,专家可以利用公共的、可拓展的资源来识别和解决特定的信息需求。

另外,还有一些值得特别提出的方法,比如使用静态分析同居,这有助于增加工程师的知识,可以让一个组织能更有效和一致地使用到更多的最佳实践。

另外,让信息流动起来也至关重要,比如适时提供资讯,进行一些诸如马桶测试、厕所学习等喜闻乐见的方式。

提升可读性:通过代码评审规范化指导

可读性流程

代码评审非常重要,每个CL都需要经过可读性评审,可读性评审由持有可读性人认证的人员进行(现在也可以依靠AI Assistant了)。可读性认证通常指拥有“某种语言”的可读性认证。将CL提交到可读性认证申请流程后,即可开始评审。随着作者对可读性指南掌握得越来越熟练,他们收到的CL评审意见会越来越少。

可读性是一个人为驱动的流程(现在也应该可以设计AI Flow进行了),旨在以既标准化又个性化的方式扩展知识。可读性流程融合了书面知识和部落知识的优点,既能提供书面的评审意见,又能通过专家评审员传播最佳实践,从而保证规范指南和语言建议被完整地记录下来。

另外,建议进行集中评审,因为程序会随着组织的增长而增长,集中评审更容易强制代码的一致性、避免孤岛以及不符合规范的地方。同时如果需要进行评审的规模较大,为评估其必要性,可以通过设置工程生产力研究(EPR)团队进行评估。

关联路线图节点

暂无关联路线图节点

关联成果

暂无关联成果

相关文章