在业务高速迭代的背景下,技术债务的积累与治理是每个技术团队都需要面对的核心议题。如何系统性地识别、分析与偿还债务,并将治理过程转化为可复用的经验,对保障系统长期健康与研发效能至关重要。
本文将聚焦于滴滴国际化外卖骑手侧H5项目(DH5) 的技术债务治理实践。我们将详细拆解该项目中技术债务的产生根源、具体问题分类,并分享一套完整的解决方案与落地流程,旨在为面临类似挑战的团队提供切实可行的参考。

项目背景:技术债是如何产生的?

项目历史演进
DH5项目承载了国际化外卖业务中除核心接单流程外约80%的骑手侧页面,主要包括运营、管控和财务三大业务模块。
项目初期,所有模块均集成于一个前端项目(all-in-one-i18n)。随着业务复杂度提升,单一代码库带来了维护困难、环境冲突和研发体验下降等问题。
为此,团队将项目拆分为三个独立的前端应用:op(运营)、govern(管控) 和 fund(财务)。


项目拆分后的技术债现状
拆分后项目结构如下:
- 业务模块:项目承载的具体业务功能。
- 公共组件:在业务中高频复用的、带有业务属性的UI组件。
- 公共方法:处理移动端通用逻辑的工具方法,如网络请求、数据埋点、端通信Bridge、用户登录等。
- 开发工具:用于提升开发与调试效率的辅助工具。

虽然拆分实现了业务的独立部署,但也暴露了历史迭代中积累的技术债务:
- 业务模块:存在已下线但未清理的废弃业务代码。
- 公共组件:拆分时存在“一刀切”迁移,导致部分项目中引入了无需使用的冗余组件。
- 公共方法:同一功能存在多种实现,设计拓展性差,维护成本高。
- 调试工具:功能不完善,在生产环境问题定位和不同环境间切换时效率低下。

问题拆解:需要偿还哪些技术债?
我们将上述问题归纳为两大类:冗余代码类和代码缺陷类。


冗余代码类问题
主要包含两种类型:
- 未引用代码:在项目中已无任何依赖的变量、函数、组件或文件。
- 废弃业务模块:因业务迭代已停止使用但未删除的完整功能模块。


代码缺陷类问题
主要包括设计缺陷与功能缺陷,在DH5项目中体现为:
公共方法设计缺陷
- 拓展性不足:历史代码设计时未考虑未来需求变化,导致新增功能时被迫创建新版本。
- 文档缺失:缺乏统一、清晰的文档,新成员难以快速理解并选择正确的版本使用。
调试工具功能缺陷
- 线上调试困难:生产环境缺乏有效的调试工具,问题定位耗时。
- 环境切换繁琐:在客户端内切换H5环境需要依赖外部代理工具,流程不顺畅。

解决方案:系统性偿还技术债
我们的治理目标明确:
- 清除冗余代码:删除未引用代码及废弃业务模块。
- 修复代码缺陷:
- 统一并标准化公共方法,消除多版本并存现象,并产出配套文档。
- 完善调试工具,支持线上调试与便捷的环境切换功能。

总体解决流程
治理过程环环相扣,形成正向循环:
- 清理冗余代码:为后续的公共方法改造扫清障碍,减少干扰。
- 标准化公共方法:设计并落地新方案,确保功能全面且易于拓展。
- 完善调试工具:为上述两项工作提供工具支持,提升整体研发与调试效率。


冗余代码清理
核心在于彻底清理且不产生新的冗余。
关键点:
- 清理彻底:确保未引用代码和废弃模块均被移除。
- 防止再生:在清理过程中避免因依赖关系变化产生新的“僵尸代码”。
为此,我们采用了“循环检测”流程:每删除一批代码后,立即重新分析项目依赖关系,及时发现并清理新产生的未引用代码。


代码缺陷问题解决
公共方法标准化
目标是为移动端通用逻辑提供一个团队共识的标准化方案。这本质上是前端工程化中基础能力建设的重要一环。解决步骤分为方案设计与方案落地。
方案设计
关键点:
- 功能全覆盖:新方案必须完全兼容所有历史功能。
- 高可拓展性:未来新增需求应能在现有框架内轻松实现,避免再造轮子。
设计流程如下:

方案落地
关键点:
- 业务稳定性:替换过程必须平稳,不影响线上业务。
- 替换彻底:确保旧方法被完全替代,不遗留历史包袱。
我们通过严格的四阶段流程保障落地:

第一阶段:功能验证与文档完善
- 通过跨业务模块的功能测试,验证新公共方法的通用性与兼容性。
- 编写详尽的接入文档,包含功能说明、接入步骤、示例代码及常见问题排查指南。
第二阶段:模块化拆分与影响评估
- 将大型业务模块拆分为可独立测试、上线的最小单元。
- 在每次接入前,详细梳理模块间依赖,精准控制影响范围。
第三阶段:多层测试与上线监控
- 在QA资源有限的情况下,采用研发自测与交叉测试相结合的方式,保证代码质量。
- 建立完善的监控告警机制,结合业务指标与错误日志,确保问题能快速发现与响应。
第四阶段:彻底替换与清理
- 进行全局扫描,确保无遗漏仍在使用旧方法的代码。
- 在确认替换完成后,执行最终的冗余代码清理,闭合技术债偿还的循环。
调试工具完善
问题集中在线上调试与环境切换。我们基于 vConsole 这一常用的移动端调试面板进行增强。
线上调试功能增强
原工具仅在开发环境显示。我们调整了策略,在仿真环境(sim)和APP的Debug包中也启用该工具,便于在更贴近真实场景的环境中调试。

环境切换功能集成
利用 vConsole 的插件能力,新增“环境切换”Tab页。开发者可直接在页面内切换H5的接口环境,无需依赖外部代理工具,极大提升了调试效率。

成果:技术债偿还情况

代码缺陷问题解决成果
公共方法标准化
成功将分散的、多版本的公共方法统一为一套标准化方案,并建立了完整的文档体系。

调试工具完善
- 线上调试:支持在Pre(预发布)和Online(生产)环境的Debug包中开启调试工具,解决了线上问题定位难的问题。
- 环境切换:内置环境切换功能,简化了调试流程,提升开发效率。

总结与心得
技术债务是业务快速发展下的自然产物,但绝非无法管理。通过本次对DH5项目的系统性治理,我们不仅显著提升了代码库的健康度,更沉淀了一套可复用的治理方法论:
- 清理冗余是基础:它为后续所有优化工作创造了干净、清晰的代码环境,降低了系统复杂性和认知负担。
- 标准化是核心:公共方法的统一,避免了重复开发,提升了团队协作效率与代码可维护性,是前端工程化建设的关键一步。
- 工具赋能是关键:完善的调试工具直接提升了研发与运维的问题排查效率,是治理措施得以顺利实施的重要保障。
这三者相辅相成,构成一个完整的治理闭环。同时,跨小组的紧密协作是本次治理成功的基石,确保了技术方案能够兼顾各业务线的实际需求,并最终推动团队整体技术水平的进步。
此次实践表明,技术债务治理是一项值得投入的长期投资。它不仅能解决当下的痛点,更能为团队未来的技术迭代与业务创新奠定坚实的基础。
|