第三方组件的维护成本,不能只看它现在能不能用,而要看它从上线到废弃这段时间里,会持续消耗多少人力。判断方法很直接:先列出组件在项目中的角色,再逐项估算升级、排错、安全响应、替换和协作沟通各自需要多少工时,最后折算成可比较的年度成本。下面用一个假设例子说明步骤和常见错误。
假设某团队建设一个企业内容站点,使用了一个开源富文本编辑器、一个图表库和一个表单校验组件。三人协作,计划交付后由两名开发兼管维护。评估时不看下载量,而是分别记录:
假设三者的年度维护工时分别为40小时、8小时、24小时,再乘以团队内部人力成本,就能得到可比较的数字。这个例子是虚构的,重点是方法,不是具体数值。
第一项是升级成本。查看组件发布记录的频率和破坏性变更说明。如果每次大版本都要改调用代码,就要把迁移工时算进去。判断条件:项目能否锁定旧版本而不受影响;如果不能,升级成本就是持续支出。
第二项是排错成本。组件出问题时,团队能否自己读源码定位,还是只能等上游修复。适用条件:业务关键路径上的组件,排错时间应按最坏情况估算。
第三项是安全响应成本。组件是否被间接依赖,漏洞公告出现后需要多久确认影响面并完成替换。检查项:依赖树里有多少层,是否存在无人维护的传递依赖。
第四项是替换成本。如果组件停止维护,重写调用层需要多少工时。替换成本低的组件,即使当前维护稍麻烦,也可以接受。
第五项是协作沟通成本。多人协作时,组件用法是否有统一约定,新人上手是否需要额外解释。交付文档缺失会直接变成返工。
把安装时间当成维护时间。安装只发生一次,维护却贯穿项目周期。评估时应问:未来十二个月,这个组件会让我改几次代码?
忽略传递依赖。直接依赖看起来简单,但它依赖的底层库可能才是升级压力的来源。检查方法是展开依赖树,标出最近一年有破坏性变更的层级。
用“社区活跃”代替可验证指标。社区活跃不等于你的用法有人维护。更可靠的做法是查看与你用法相近的 issue 是否被回应,以及最近一次发布距现在多久。没有把握时,把该组件标记为“需要替换预案”。
判断结果:如果某组件年度维护成本超过自研同等功能的成本,且替换路径清晰,就应考虑替换;如果替换成本远高于维护成本,则保留并加强版本锁定和回归测试。适用条件是团队已经能估算自身工时,否则先记录一个迭代周期的实际维护时间再比较。
在网站建设时间表中,为每个第三方组件留出一行维护说明:当前版本、锁定策略、升级触发条件、负责人、替换预案。多人协作时,这行说明能减少“这个组件谁来管”的返工。下一步,挑出依赖树里层级最深的一个组件,按上面的五项估算一次,再决定是否把它列入交付文档的维护清单。