星期五下午六点半,要不要上线?
要上线。
😱 不上线的理由?
已经是星期五下午,马上就下班了。
虽然功能都测过了,但是难免有遗漏。
万一上线过程出现问题,大家晚上又得加班解决。
即使上线了,周末大家都休息,可能没有办法及时发现问题。
假如周末出了问题,相关的同事可能也无法响应,不能及时修复。
算了,还是等到下周一再上线吧。
☕️ 周一上线的时候
周一,正是客户使用的高峰期,上线万一出了问题影响太大。
算了,要不等周二吧。。。
🥊 问题
这些问题都反映了团队对交付和质量的信心不够。
💔 没有信心?
有没有自动化测试?包括单元测试、集成测试等等?
足够的自动化测试,应该给团队带来足够的信心。
如果一个功能,没有自动化测试覆盖,那他就是已经坏掉的。
💯 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)等等各种手段,都需要建立起来。
确保我们的系统可以快速发现和预警线上问题。
🍻 星期五下午六点半,要不要上线?
有了上面这些手段,「星期五下午六点半,要不要上线?」这个问题的答案应该是:
「任何时候,都可以上线。」