超过一半的新项目都是从交接开始的。交接周期可长可短,交接形式可多种多样。不管怎样,交接期为项目在客户关系、团队工作方式等方面进入稳定的交付或维护期定下了基调。2020年10月,Thoughtworks的C-team从客户团队手中移交了一个已有近20年历史的支付网关系统。该支付网关主要为英语地区企业提供信用卡支付、储蓄卡支付等支付相关功能,月交易量过亿。2021年1月起,C团队将正式接手项目的日常运维工作。不仅需要保证系统稳定运行,提供7×24小时OnCall支持,响应日常业务需求,同时保证整个支付网关符合支付卡行业数据安全标准(简称PCI-DSS)。在交接过程中,团队面临很多挑战,尝试了很多方法,同时也积累了一些经验。我们将通过这篇文章分享我们的经验和做法,希望能帮助到更多的人。挑战作为历史悠久的“老牌”支付网关,我们在交接过程中遇到了一系列挑战,大致可以分为以下两类:1.业务复杂度高。在业务方面,该支付网关仅用于卡支付。该场景同时支持8项技术,以及信用卡相关的安全功能、无数的报告和各种增值服务。技术上,总共有100多个服务和300多个代码库部署在200多个EC2上;服务之间耦合严重;许多服务没有部署管道,没有测试环境甚至源代码;生产环境手动操作数据库往往需要排查问题;OS和package版本很旧等。在项目管理方面,没有完整清晰的业务和技术文档的总结和沉淀。2、交接内容多、时间短、范围不明确。交接开始前,团队收到的信息只有100多个服务名称,内容非常有限;有足够的时间了解系统的所有功能。实践1.分阶段设定目标和重点我们通常如何衡量遗留项目维护的质量?短期:至少和之前的球队一样。也就是说,团队具备足够的知识和技能来处理客户团队成员离开时的在线事件和日常业务工作。长期:体现Thoughtworks的差异化。对项目的业务、技术、发展历程有足够的了解,给出改进方案,在未来较长的时间内实施,为客户带来更大的价值。鉴于项目的复杂性,在有限的过渡期内几乎不可能实现这一目标。但如果把时间延长,分阶段实施,就更容易制定切实可行的计划;同时也能最大化交接期的价值,让团队从第一天起就朝着一个方向努力。基于此,团队从实际出发,将项目分为三个阶段:通过对项目不同阶段目标的一致理解,减少部分团队在交接期的焦虑和恐慌,让更多可以提出创意并勇敢尝试、反馈、迭代,以实现每个阶段的目标。2、使用C4模型梳理系统架构。通常处理的问题是业务问题。如果不能理解业务流程中的每一个服务,那是没有意义的。因此,在交出一个独??立的服务或者几个相关的服务后,我们会尝试使用C4模型,画出他们的C1(SystemContextDiagram)和C2(ContainerDiagram)两个高层图,以可视化的方式展示系统输入,每个服务的输出和依赖关系。实践证明,画图的过程可以帮助大家更好地吸收碎片化的知识,有利于整个团队对知识的聚合和沉淀。同时,图表是一种比重复解释更有效的语言。一些相对独立的模块是比较容易画出来的,但是涉及到不同版本API的支付流程,需要不断获取更多的信息进行完善,并与客户反复确认。即使交接后,仍有部分环节未能打通或来不及梳理,只能作为交接后深入了解期的目标继续完善。支付系统简化图C1(简化版)3.团队内部通过结对共享上下文在第一阶段的交接过程中,我们和客户团队以“1+1”的模式进行知识传递,业务知识是分散在每个成员中像一个岛屿。此外,由于每个人加入项目的时间和技能背景不同,我们团队在一些背景信息、业务脉络、技术实现等方面的把握也存在一些差距。因此,从第二阶段的项目交接开始,大部分工作我们都会结对进行。根据不同的业务和优先级,我们划分了几个重要的主题,比如:与日常需求相关的任务,与PCI和生产环境变化相关的任务等。服务,让这两个人成为团队内相应领域的专家。这样做的主要好处是:保证相应的知识能够在团队中传播,消除知识孤岛;防止会员因请假而无法执行重要任务;多一个人可以帮助检查重要的在线操作。在安排PrimaryOnCall和SecondaryOnCall时,采用“Dev+DevOps”的组合,保证足够的技能应对线上事故。发生网络事故时,两人结对,共同应对。虽然结对在前期会影响效率,但保证团队中至少有两个人熟悉特定业务,才能最终赋予整个团队应对事件的能力。从目前的结果来看,正是这种结对形式,保证了整个团队的“高可用”。4.通过在线事故演练提高团队OnCall信心7×24小时OnCall对团队来说无疑是一个非常大的挑战。在正式接管系统之前,团队感受到了很大的压力。这些压力一方面是因为大部分项目成员缺乏on-call实践经验,另一方面是我们在交接第一阶段对业务实施细节和制度缺乏深入了解。OnCall工程师不仅需要参考标准的处理流程,还需要在短时间内评估在线问题的影响并准确解决。所以,利用以前的事故来演练,是我们在深入了解期间最好的学习。方式。在正式承担OnCall职责之前,我们会在每次迭代中进行一次模拟的线上事故处理活动。主要过程是:主办方会从以往的线上故障中选择一个具有代表性的事故进行模拟,比如是与其他网关整合服务的事故;团队约定在线模拟2小时事故,主办方还原当时场景,其他成员在不知情的情况下根据自己的理解进行适当提问;分成两组,根据现有情况定位问题并给出解决方案;主办方进行复习,梳理相关知识点。通过以上方法,我们可以快速适应OnCall的节奏。到目前为止,我们团队的每一位成员都有作为PrimaryOnCall的经验。结语在三个月的交接过程中,我们不断改进交接方式,最终顺利从客户团队手中接手了该项目。与我们合作的交付主管和客户团队都称赞了我们的工作。在探索交接的过程中,我们尝试了不同的方式让我们的交接顺利进行,并分享了对交接有帮助的做法,希望对大家有所帮助。【本文为专栏作者“ThoughtWorks”原创稿件,微信公众号:Thinkworker,转载请联系原作者】点此查看该作者更多好文
