升级前先问自己一个问题
用户点下“更新”的那一刻,心里其实有一个问题:我的东西会不会没了。
这个问题的答案不该是“应该不会吧”。只有能明确回答“不会,而且不行还能退回去”,升级才算是一个安全的操作。
可回滚是前提
正式升级之前先做一份可回滚的快照。升级过程中出问题,能回到升级之前的状态;升级完成之后发现不对劲,也能手动退回去。
这一条比把升级做快更重要。快只是省几分钟,丢数据是没法补救的。
说清楚这一版改什么
升级之前会列出三件事:这一版做了什么、会不会动到已有的数据、需不需要用户做什么。
跳过说明直接升级的系统,本质上是把不确定性丢给用户。用户不是怕变化,是怕不知道会变成什么样。
不强制升级
除了安全更新,功能版本不强制。用户可以选择什么时候升级,也可以一直停在某个版本上,直到自己愿意动。
强制升级看起来能让所有人保持最新,但它把升级的风险全部转给了用户,而且是在用户最没有准备的时刻。
这一条会影响开发节奏
可回滚意味着每个版本都要写迁移方案、要测回滚路径,功能推进速度会明显变慢。
我们认为这个代价必须付。对一个要用很多年的系统来说,用户敢不敢点升级,比这次多做了几个功能重要得多。