星期五下午六点半,要不要上线?

要上线。

😱 不上线的理由?

已经是星期五下午,马上就下班了。

虽然功能都测过了,但是难免有遗漏。

万一上线过程出现问题,大家晚上又得加班解决。

即使上线了,周末大家都休息,可能没有办法及时发现问题。

假如周末出了问题,相关的同事可能也无法响应,不能及时修复。

算了,还是等到下周一再上线吧。

☕️ 周一上线的时候

周一,正是客户使用的高峰期,上线万一出了问题影响太大。

算了,要不等周二吧。。。

🥊 问题

这些问题都反映了团队对交付和质量的信心不够。

💔 没有信心?

有没有自动化测试?包括单元测试、集成测试等等?

足够的自动化测试,应该给团队带来足够的信心。

如果一个功能,没有自动化测试覆盖,那他就是已经坏掉的。

💯 CI 100% 的通过,就是 100% 的信心

CI 是干嘛的,就是给团队提供信心的。

如果 CI 不能提供 100% 的信心,那只说明一件事情:CI 没做好。应该检查的没有检查。

如果 CI 运行结束是 Successful 的,那就意味着我们有 100% 的信心是可以上线的。

🚒 万一 CI 真的有问题呢?

是的,没有人能保证,自动化测试、持续集成都是完美的。毕竟这些东西也是代码所写的。

但这不是无法上线的理由。

如果真的有错,那就让错误赶紧暴露(fail fast)。

然后,修复错误后,一定再通过自动化的方式,确保这个错误不再发生。

👻 灰度发布

任何系统都不可能是 100% 没有问题的。

一般的系统会设定一个可用率目标(例如,99.95%),这意味着系统会留有 0.05% 的错误冗余度。

通过灰度发布的方式,只给 0.05% 的用户和流量部署新的代码,即便有问题,也不会影响大多数用户和流量(保证了系统的可用率)。

🚨 监控和预警

即使有错,也要比客户更早的发现、更早的解决。

前端、后端、数据库,都有很多方式来进行监控。

冒烟测试(Smoke Test)、Synthetic Test、APM(Application Performance Monitor)等等各种手段,都需要建立起来。

确保我们的系统可以快速发现和预警线上问题。

🍻 星期五下午六点半,要不要上线?

有了上面这些手段,「星期五下午六点半,要不要上线?」这个问题的答案应该是:

「任何时候,都可以上线。」