软件研发团队的信息管理
研发流程
Oct 5, 2023
type
Post
status
Published
date
Oct 5, 2023
slug
information-sharing-in-team
summary
团队内部的信息流通很容易被国内的企业忽视,领导者们通常会低估其对团队成功的影响,而有效的信息共享、知识积累和信息交流有助于增强团队协作,能够帮助团队进行决策和解决问题,同时也可以推动团队创新和学习的氛围
tags
思考
技术管理
category
研发流程
icon
password
Property
Oct 18, 2023 03:07 AM

信息流通的重要性

首先需要说明本文的信息流通主要是指软件研发过程中的信息流通,而研发过程中的信息流通,指的是各种与研发相关的信息在工具、团队成员、产品产物之间的流动,这些信息大到公司战略,小到缺陷编号,是团队达成共识、实现高效研发流程的重要因素。
信息流通不仅仅是在研发过程中发生的一种活动,它实际上是研发流程的一部分。在软件研发过程中,信息需要在不同的阶段、团队成员和利益相关者之间传递,以支持项目的不同活动。以瀑布流为例,软件研发团队需要在各个阶段搜集不同的信息来实现阶段性目标
notion image
  • 在项目准备阶段,信息流通用于厘清项目和需求,团队需要从利益相关者那里收集和共享关于产品或者项目的目标、范围、功能和要求等信息,以便完成准备工作,确保项目的正常启动
  • 在规划和设计阶段,团队需要从已有的信息中提炼出更多设计考量要素信息,以便定义项目的结构、架构、时间表和资源分配等关键方面,这能够确保项目在合理的框架内进行设计
  • 在开发和测试过程中,团队成员需要交付和共享代码、测试计划、问题报告等信息,这些信息对于保持项目整体的进度和质量至关重要
  • 在实施和维护阶段,团队需要根据需求方的要求以及现场实际情况,提供合适的实施方案和维护计划等,同时还要持续搜集用户反馈的信息,以便改进产品和交付流程
可以看到信息流通支持并促进了整个研发过程的顺畅运作,而且信息无处不在,信息里面蕴涵的知识随着信息流通进行转移,徐昊老师有个观点说软件研发的本质是知识转移的过程,所以这里我们借用一下:管理信息流通就是软件研发流程的本质 😄
为什么这么说呢?因为不同的研发流程可以看成是不同信息流通管理风格的体现,比如刚才说的瀑布流可以看成严谨风格的信息流通管理形式,它要求信息是线性的按照顺序传递的,不能跳过也不能并行,而且信息要被文档化,要有计划且被严格审批的,而敏捷开发对待信息流通的方式则是完全不同的风格,敏捷开发中的信息流通是一种灵活、频繁和协作性的过程,它强调的是交互式信息流通,以口头对话为主,文档作为补充,它强调实时的沟通和快速的反馈,以便团队可以迅速适应变化并交付高质量的软件。
总而言之,高效的信息流通在成功的软件研发流程中是十分重要且必要的一环,大多数情况下,我们没有单独将它拎出来做出明确且规范的要求是因为在各种成熟的研发流程中,都以不同的形式包含了信息流通管理的内容,只是比较隐晦,所以没有必要再次强调和显示声明。但是,这仅仅是对研发流程执行的比较好的团队而言,对于大多数“软件作坊”来说,制定和严格执行一套符合自身团队特点的信息流通规范是很有必要的。

促进研发过程中的高效信息流通

信息流通不畅或者信息流通混乱,背后就是整个研发流程的失序和失败,举几个常见的例子说明一下,也许大家更能感同身受
  • 最终产品跟用户需求大相径庭 - 研发团队生产出来的产品与最初的产品设计差别很大,甚至需要完全返工,这是一个常见的低效能问题,并且由于反馈周期很长,会导致大量的浪费,这很可能是因为和用户沟通不彻底导致的
  • 前后端沟通不顺畅 - 后端修改 API 阻塞了前端的工作,或者后端实现了新的 API 但前端不知道,仍使用旧的API,然后就是各种矛盾,影响团队协作效率和团队氛围
  • 信息孤岛或者信息单点故障 - 在公司内部找信息反而比在互联网上找信息难,需要到处找人询问,还不一定能找到答案,而且信息难以溯源,不能确保和实际情况匹配,或者因为某个核心人员的离职,线上软件的版本和功能匹配信息就丢失了
  • 信息过载 - 本来在好好的写着代码,却总是被各种会议、聊天消息、问询等打乱,还得重新梳理思路,这个属于信息 DDOS,影响效率也影响心情
更多的情况就不一一例举了,主要还是谈一下如何让信息在研发过程中高效流通

有意培养团队对高效信息流通的认知

人是信息流通的媒介之一,也是信息的主要消费者,更是软件研发的核心,激发人的主观能动性是最重要的。不解决人的意愿问题,流程、工具再好,也用不好甚至用不起来。所以,让团队成员愿意共享、愿意沟通、有意识地维护信息是高效信息流通的前提。
但是很多团队成员刚开始可能并没有这个认知,而且很多研发人员缺少沟通的意愿和技巧,所以需要依赖技术管理者承担起教授的职责,要引导团队认识到信息流通的重要性,一般来说我会从下面几个方面着手
  • 将重要信息写出来,并尽可能与团队一起讨论:跟团队一起讨论重要的信息,比如研发规范性质的文档、架构设计文档、技术决策文档、产品运维信息文档等,不仅是为了讨论文档中包含的知识以便团队达成共识,还可以强调信息流通的重要性,鼓励团队成员参与到信息流通的环节中
  • 建议机制鼓励信息共享和高效信息流通:定期举办内部知识分享是一个很好的契机来提高团队对信息共享的认知,也能很好的锻炼团队成员的沟通交流技巧,还可以提高大家对学习和创新的热情,作为管理者,需要有意识的鼓励这种分享行为并给与及时的正反馈,培养一种信息共享的文化,强调信息不是权力,而是资源,共享信息可以改进整个团队的工作
  • 明确信息管理规范并监督执行:制定明确的信息管理准则,包括如何记录信息、存档和检索信息,这有助于信息的组织和可用性,并且需要定期监测信息流通的效率和效果,以便识别问题并采取纠正措施

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

这一步的关键在于确认研发流程中的重要信息,然后针对性地设计合适的流程并选用恰当的工具来管理这些重要信息。不同的信息需要不同的管理流程,也需要不同的工具提供支持,研发过程中,一般会涉及到的重要信息主要包含以下几点
  • 团队战略目标相关信息:这一类信息的处理原则是尽量公开透明,只有当团队成员清楚公司以及团队目标时,才更容易把自己的目标与之对齐,这也是 OKR 最近几年特别流行的一个重要原因。执行的时候可以按照季度、月份等时间节点来拆分团队的战略目标,并面对面跟团队成员沟通他们的目标,同时公开维护一份公司战略跟团队战略的对齐信息以供团队查阅。这样开放的信息流通建立起了团队内部的透明度,团队成员知道他们的声音被听到被重视,而且每天的产出都会有方向有贡献,这有助于建立信任和合作的关系,也更容易给团队带来成就感
  • 团队研发产物相关信息:首先是代码,这部分的原则上应该是对全体成员开放,更进一步地,开发人员不但可以阅读其他团队的代码,还可以主动去修改、提高他们的代码,只要修改得当,就应该被接受。实际操作上我建议将不同的团队的代码隔离,在不泄露核心机密、不影响核心业务的前提下尽可能向成员开放所有代码的只读权限,限制其对代码的修改和拉取,而选择共享代码的工具和方式,基本原则是便于查找,并在进行开发工作的主要入口(比如IDE、命令行工具、Web浏览器)提供接口。其次是研发过程文档,此类信息包括产品设计文档、开发设计文档、测试文档、部署流程文档等,确保这一类信息高效流通的比较有效的原则是:使用统一的工具,方便大家添加、修改、查询这些文档,并且要确保信息的有效性。
  • 产品和项目相关的标识性信息:在整个研发流程中,各种工具之间流动着多种标识信息,包括任务工单、代码提交号、版本号、代码审查 ID、测试用例 ID、Bug ID 等等。管理这一类信息的有效方法是,各种工具通过提供API,做到服务化,形成工具之间的网状连接,以方便开发人员在工具链上快速获取需要的各种信息,这也是 DevOps 能够解决的问题之一
  • 团队成员或者利益相关者沟通产生的信息:在研发团队沟通过程中,有多种不同的工具可供选择,这些工具在实时性、可追溯性,以及对他人的干扰程度上大有不同。我们应该根据沟通的具体场景进行选择,在满足沟通的实施性、可追溯性的前提下,尽量避免对他人的干扰。但在现实工作中,有一个不好的趋势,就是大家都倾向于追求沟通的实时性而忽视可追溯性,同时不太在意是否对别人造成干扰,于是大量使用即时聊天工具和电话,这个情况在国内尤其严重,很多公司完全使用即时聊天工具,比如微信、钉钉等,基本上放弃了邮件等其他方式,所以在实际操作的时候,我提倡将需要沟通的事件按照紧急程度和可追溯的要求来安排对应的沟通工具,多考虑通过邮件等方式来沟通。

总结

信息流通对研发团队具有巨大的价值,它不仅是协作和创新的推动力,还支持了整个研发生命周期的关键活动,通过有效地管理信息的传递,团队可以更好地应对挑战,提高效率,保持高质量的工作,最终实现项目和组织的成功。
但归根结底,我认为团队组成是人,管理的核心也是以人为本,信息流通能在团队中发挥的价值取决于团队的每个人对它的认知,所以作为管理者还是要多花点心思在提高团队对信息流通管理的认知水平上,切不可认为自己按照某个流程来做,就一定能达到和别人一样的成功,要知道,软件团队的成功不可复制 😄
 
  • 思考
  • 技术管理
  • 函数式编程思维让程序变得更好
    Run, Java run - Java 21 之虚拟线程