企业不给生产权限,交付仍然可以做,但要把“可执行”重新定义:你能交付的是可验证的代码、配置、迁移脚本和回滚方案,而不是由你亲手发布上线。前提是对方愿意提供只读环境、测试环境或镜像快照,并指定一名有权限的人按你的步骤执行、把结果反馈回来。如果连只读环境和执行人都没有,剩下的选择只有改写交付范围或退出。
这两种情况的处理方式完全不同,误判会让你白做很多工作。权限不给,指的是对方有环境、也有人管,只是不把生产账号交给你;环境不给,指的是你连代码运行起来是什么样都看不到。判断证据可以看这几点:
如果前两项能拿到、后两项有人配合,交付可以继续,只是形态变成“你出步骤、对方执行”。如果只有口头描述,没有任何可观察的输入输出,任何改动都只能靠猜,此时应尽早把这一项写进风险说明,而不是硬撑到验收。
权限受限时,最值得保留的是可复现性。具体动作是:把每一项改动整理成有序的发布包,包含变更文件清单、配置差异、数据库变更脚本、执行顺序、验证方法和回滚步骤。执行人按顺序做完,把每一步的输出贴回来,你再决定下一步是继续、修正还是暂停。
这个动作的结果会直接影响后续节奏:如果对方能完整回传执行输出,你就能像在本地一样定位问题,交付基本不受影响;如果回传的只是“做好了”,你就失去了判断依据,只能把验收标准降到“按步骤执行且无报错”,并明确这不等于功能在真实数据下成立。假设一个场景:需要修改一个订单状态字段的计算逻辑,你无法连生产库,于是提供一段只读查询用于核对改前改后的样本记录,由对方执行并回传结果。若样本对不上,说明前提假设有误,应先停下核对字段含义,而不是继续发布下一批改动。
没有生产权限,就不要把验收标准写成“线上功能正常”。可以改成对方能独立证明的几类证据:测试环境通过的功能用例、脱敏数据上的查询结果、构建产物与版本号的对应关系、发布后关键页面的状态码与错误日志片段。这些证据不能完全等同于线上正确,但足以支撑“可以进入下一阶段”的判断。
适用条件是对方愿意提供测试环境或镜像,并且测试环境与生产的差异是已知的、可列出的。如果差异未知,测试通过只能说明代码本身没坏,不能说明上线后没问题,这一点要在交付说明里写清楚,避免把统计上的“测试通过”当成因果上的“线上可用”。
有三种情况适合退出而不是继续改写。第一,对方既不提供环境也不指定执行人,只要求你“远程指导”,实际是把操作风险留给你;第二,生产环境的版本、依赖或数据结构无法获知,任何改动都可能建立在错误前提上;第三,旧系统或旧合作关系已经确定要下线,继续为它做兼容改动没有承接方。
退出的实际动作不是直接停手,而是交付一份现状说明:已经完成且可独立验证的部分、依赖生产权限才能验证的部分、未完成部分及原因。这样对方即使换人接手,也能知道哪些成果可以直接用、哪些需要重新确认。保留仍然有价值的部分,通常就是这些不依赖生产权限的代码、文档和脚本。
可行的安排是分阶段推进:先交付只读可验证的部分,再交付需要执行人配合的部分,最后才是需要生产权限才能完成的部分。每一阶段结束时,用对方回传的证据决定是否进入下一阶段。如果某一阶段连续两次拿不到可验证的反馈,就应暂停并重新确认权限安排,而不是靠增加沟通次数来弥补。这样做的结果是把不确定性集中在早期暴露,而不是拖到上线当天。