I3.01.3silent state change设计研究

静默的状态变化会破坏用户模型

别名: 静默更新 · 未告知的状态 · unannounced change · 后台改状态

概念解释

系统已经不是刚才那个系统,界面却没有任何「发生过改变」的证据。会话被收回、协作者改了段落、价格换了、权限收窄——人仍按旧模型点下一步。这种静默状态变化(silent state change)破坏的不是观感,是随后每一拍决策的前提。它和「变化太快没看清」不同:后者至少改过像素;静默是系统决定不把变化当成事件来发。

用户模型(mental model)是人对「现在允许什么、数据是什么」的内部模拟。模型与真实一旦分叉,接下来的操作会在错误的世界上执行,失败看起来像自己按错,而不是世界已经换了。

机制

人不会持续核对每一项底层事实,只在动作边界上抽样:提交前、离开页前、再打开一份文档时。两次抽样之间,系统尽可以改。若改动不发事件,第二次抽样仍读到旧画面,模型就被锁在第一次抽样上。下一次动作带着这把锁出去——对已失效的会话发请求、把别人改过的句子再改回去、用过期价格下单。错误归到自己身上,因为界面从未提供过「不是你的错」的把手。

模式错误(mode error)是同一机制的经典形态:系统进了另一种模式,控件还长得一样,命令落在错的解释上。静默状态变化是模式错误的时间版:模式在你没看的时候切了,外观还是上一分钟的。协作和云端把这个窗口拉得更长——别人和服务器都在你离开的那段时间里写。

怎么研究

给一份「看起来没动」的文档,在被试离开去完成另一项短任务时改掉关键字段(权限、价格、一段正文),回来后让他们继续原任务,看第一次动作是基于旧值还是先检查。对照条件是回来时给一次明确的「离开期间有变更」提示。

自变量:离开时长、变更种类(权限 / 内容 / 价格)、回来时有无事件。 因变量:基于过期模型的动作次数、发现分叉的时间、把失败归因于自己还是系统。

实验室里「去完成另一项任务」是被安排的;产品里的离开是看消息、接电话。现场或日记研究更能抓住「我以为还是刚才那样」的自发报告。

边界

心跳、在线人数、无后果的遥测可以静默变,因为它们不进入下一步决策。安全与钱不行。自动保存若只把「未保存」改成「已保存」且用户正预期这件事,模型没有被骗,那是兑现承诺而不是静默篡改。反向的自动保存——在用户没写的时候改掉正文——仍是静默变化。只读仪表盘上的刷新如果被标成「实时」,静默更新符合预期;被标成「截至某刻」却在背后改数,模型照样裂。无障碍上,完全不发事件等于对屏幕阅读器也静默;即便视觉上闪了一下,只要不进可访问性树,对那一类用户仍是静默。

怎么落地

  • 凡是会让下一步决策翻面的变化,都必须发事件:会话失效、权限收窄、他人改写、价格或库存变动、草稿被外部覆盖。
  • 事件要在用户下一次动作之前到达,而不是等动作失败再解释。回来进入页面的那一拍就是检查点。
  • 用一句话说明「什么变了」,不要只刷新像素让人自己找不同。
  • 验证:做一次「离开再回来」。离开期间改权限或正文,回来不给任何提示。若用户的第一下点击仍按旧权限或旧正文进行,这条已经失败。再打开屏幕阅读器走同一路径,确认变化被读了出来,而不是只有视觉上的一次闪。

延伸

  • 同组I3.01.1 当前状态需在界面上有稳定的表达位置 · I3.01.2 状态变化需要过渡而非跳变
  • 相邻I2.12 缓存与陈旧内容 · I3.04 同步冲突
  • 站内检索silent state change · mental model · mode error

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I3.01.3