避免覆盖的关键不是让两人“多沟通”,而是把同一网站的写权限收敛到一个发布出口:要么指定唯一执行方,另一方只提交建议;要么按文件、目录或模板划出互不重叠的写入边界。两种做法都成立,但适用条件不同,选错才会出现互相覆盖。
两个服务商同时接单同一网站时,常见现象是:A 刚把标题模板改好,B 稍后发布内容时又用旧模板生成了一遍;或者 B 调整了内链区块,A 更新栏目页时把整页替换回自己的版本。表面看是“谁最后发布谁生效”,但根因通常有两类。
第一类解释是发布链路没有唯一出口。两人各自能部署、各自能改模板、各自能批量写库,任何一方都不知道对方基于哪个版本操作。第二类解释是职责边界按“任务类型”划分,而不是按“写入对象”划分。比如一人负责内容、一人负责技术,听起来不冲突,但内容发布要经过模板,技术改的正是模板,于是仍然撞车。能区分这两类解释的证据很直接:去查最近一次覆盖发生前,双方各自改的是不是同一批文件、同一张数据表或同一个模板;如果改的是不同对象却仍被覆盖,问题在发布链路;如果改的正是同一对象,问题在边界划分。
这种做法把写权限收给一个执行方,另一方交付的是改动说明、字段对照或补丁建议,由执行方合并后统一发布。它成立的条件是:两方中至少有一方能稳定承担全部发布动作,且另一方接受“我改的东西不直接上线”。
代价是反馈变慢,建议需要排队合并;好处是版本只有一个源头,覆盖问题从机制上消失。实际动作可以这样落地:约定一个共享的改动记录,每条写清目标对象(哪个模板、哪个目录、哪类页面)、改动前后差异、期望生效时间。执行方每合并一条就标记状态。这个动作的结果会直接影响下一步——如果合并记录里反复出现同一对象被两人先后提出改动,说明边界仍然模糊,应进入下面的选择二,而不是继续加沟通会议。
如果两方都必须直接发布,就不能按“谁负责内容、谁负责技术”分,而要按互不重叠的写入对象分。可用的切法包括:按目录(一方只动 /blog/,另一方只动产品页模板)、按文件类型(一方只改内容数据,另一方只改样式与脚本)、按环境(一方只在测试环境改,另一方负责合并到线上)。
它成立的条件是边界能被技术手段约束,而不只是口头约定:账号权限、部署范围、可编辑目录至少有一层是硬限制。代价是划分成本高,且一旦某次需求跨到对方边界,就必须走交接而不是顺手改。判断边界是否真的有效,看一个证据:随机抽查最近若干次发布记录,是否出现过同一文件被两个账号先后写入。若出现过,说明边界只是名义上的。
假设某网站有两方:一方负责栏目页模板调整,另一方负责文章批量发布。若采用唯一发布出口,文章方把标题规则写成字段说明交给模板方,模板方合并后统一发布;若采用写入对象划边界,模板方只拥有模板文件,文章方只拥有文章数据,双方都不碰对方的对象。前者适合发布频率低、合并能力集中在一方的情况;后者适合两方发布都很频繁、且系统权限能精确到目录或数据表的情况。这里只是假设的比较方法,不代表任何真实项目结果。
把这三件事写进接单约定后,再回头检查一次最近被覆盖的改动属于哪类对象;如果仍无法判断,就先执行唯一发布出口,等权限和对象清单都清楚后再考虑拆分写入边界。