回到笔记思考设计柔软的工程学好的软件不只正确、快速、可扩展。它还应该理解人的迟疑,允许犯错,并在复杂世界里留出一点呼吸。 2026年7月20日 1 分钟阅读收听本文 Microsoft Edge 神经语音我们经常用很硬的词谈论软件:约束、校验、权限、失败、熔断。它们当然重要,但人使用软件时,并不会把自己想成一个等待被验证的输入。 人会迟疑,会忘记,会在深夜一点误触那个按钮。于是我开始在意另一种工程能力:让系统强壮,也让使用它的人感到安全。 正确之外,还有感受 一个表单可以在提交失败时准确地返回 400,但如果它抹掉了用户刚刚写完的两千字,那么从人的角度看,它就是彻底失败了。 [!TIP] 一个简单判断 当错误不可避免时,先保护人的劳动,再解释系统发生了什么。 这意味着自动保存、可撤销、保留上下文;也意味着错误信息里不该只有错误代码。我们要告诉人:哪里出了问题、他是否需要担心、接下来能做什么。 把余地做进系统 柔软不是没有边界。恰好相反,它需要更精确的边界设计。 危险操作要慢一点,让人有机会反悔。 高频操作要快一点,别让界面挡在意图前面。 不确定的结果要诚实,不用一个漂亮的百分比假装笃定。 空白状态不是“没有数据”,而是下一步行动的邀请。 真正成熟的产品,不会要求人永远清醒、准确、高效。它承认我们偶尔混乱,然后仍然稳稳接住。 最后 代码里的每一个分支,最后都会成为某个人经历的一小段时间。我们写的不是抽象流程,而是别人一天里的几秒钟。 如果工程最终是为人服务的,那么“舒服”就不只是视觉设计的工作。它应该从数据模型、失败策略和权限边界开始,一直延伸到按钮上的那几个字。 交流留下你的想法评论由 GitHub Issues 托管,中英文页面共享同一段讨论。正在载入评论…
我们经常用很硬的词谈论软件:约束、校验、权限、失败、熔断。它们当然重要,但人使用软件时,并不会把自己想成一个等待被验证的输入。
人会迟疑,会忘记,会在深夜一点误触那个按钮。于是我开始在意另一种工程能力:让系统强壮,也让使用它的人感到安全。
正确之外,还有感受
一个表单可以在提交失败时准确地返回
400,但如果它抹掉了用户刚刚写完的两千字,那么从人的角度看,它就是彻底失败了。这意味着自动保存、可撤销、保留上下文;也意味着错误信息里不该只有错误代码。我们要告诉人:哪里出了问题、他是否需要担心、接下来能做什么。
把余地做进系统
柔软不是没有边界。恰好相反,它需要更精确的边界设计。
真正成熟的产品,不会要求人永远清醒、准确、高效。它承认我们偶尔混乱,然后仍然稳稳接住。
最后
代码里的每一个分支,最后都会成为某个人经历的一小段时间。我们写的不是抽象流程,而是别人一天里的几秒钟。
如果工程最终是为人服务的,那么“舒服”就不只是视觉设计的工作。它应该从数据模型、失败策略和权限边界开始,一直延伸到按钮上的那几个字。