跳转到内容

设计经得起时间考验的软件 ​

软件并不是交付后就大功告成。交付后,它会开启漫长的第二段生命:使用它的人没有参与最初的决策,运行它的机器未经团队测试,与它相伴的文件和使用习惯也无人预料。

为这段生命做设计,意味着思考不能止于发布。它意味着作出这样的选择:即使最初的兴奋已经消退,人们依然能够理解这些选择。

让重要的事物清晰易懂 ​

经久耐用的软件通过自身结构解释自己。名称的含义保持稳定。控件的外观和行为符合预期。状态清晰可见,却不会喧宾夺主。出现故障时,错误信息能够帮助用户判断下一步该怎么做。

易于理解并不等同于简单。一个复杂精密的系统,只要各部分命名得当、关系清晰,也可以容易理解。一个小系统,如果用含糊的语言掩盖重要状态,同样会令人困惑。

检验标准很简单:一个初次接触它的人,能否不必读遍每一处实现细节,就建立起有助于理解和使用它的心智模型?

优先作出可回退的决策 ​

产品早期的决策往往是在信息不完整的情况下作出的。这很正常。错误在于,仅仅因为某个早期决策已经写进代码,就把它当成永久不变的决定。

可回退的设计会在不确定性较高的地方保留选择空间。它倾向于采用可迁移的格式、可撤销的工作流程,以及不会让未来变更代价高昂的边界。

这并不意味着回避承诺,而是对那些已经充分理解的决策作出最坚定的承诺,同时为其他部分留出余地。

历史记录是一种信任 ​

撤销、版本历史和清晰明确的备份,常常被视为提供便利的功能。它们的意义不止于此:它们让人们能够放心操作,不必担心一次失误就会造成不可挽回的后果。

拥有可靠历史记录的产品可以更直接。它不必每一步都要求确认,因为它为用户保留了回头的路。

无法保留历史记录时,界面应当明确告知。信任来自准确的承诺,而不是假装每个操作都安全无虞。

为普通设备设计 ​

产品尊重真实使用环境,才能更长久。这些环境包括老旧设备、不完善的网络、不熟悉的屏幕,以及与团队理想演示不一致的工作流程。

性能是这种尊重的一部分。让内容易于阅读的对比度、键盘操作支持、清晰的焦点状态,以及调整窗口大小后仍然可用的布局,也都是如此。无障碍不是后期的一轮打磨,而是产品确实针对真实条件进行设计的证明。

避免追逐潮流的依赖 ​

技术变化很快,但并非每一种变化都值得成为产品的依赖。经久耐用的系统拥有小而清晰的核心,并且审慎地使用外部服务。

依赖本身并非坏事,未经审视的依赖才会代价高昂。应当问一问:如果服务更改条款、软件包停止更新,或者用户需要把数据迁往别处,会发生什么?

答案不必是完全独立,但必须让风险清晰可见,并有一条可信的后续路径。

让界面保持沉静 ​

不围绕一时流行的视觉花招构建的界面,更经得起时间考验。扎实的文字排版、合理的留白、清晰的层级和如实的反馈,往往能在多次改版中延续,因为它们服务于任务,而不是一时的潮流。

这并不是主张软件应该平淡无奇。个性很重要。产品可以有鲜明的表达,同时仍让用户的工作成为屏幕上最重要的事。

好的视觉系统也让维护更容易。规则清晰时,新界面就能自然融入其中。团队可以扩展产品,而不必每次都临时创造一套新的视觉语言。

为后来者留下线索 ​

后来者可能是队友、维护者、客户,也可能只是六个月后的你。他们应当能够找到某个非常规选择背后的原因,理解数据的结构,并分辨出哪些是有意设置的约束,哪些是尚未完成的任务。

文档是产品长期交互界面的一部分。迁移工具、合理的日志,以及描述行为而非琐碎实现细节的测试,也都是如此。

软件始终能让人理解,才能经得起时间考验。

为第二个十年而构建 ​

长久并不来自对未来的完美预测,而是来自这样一个系统:它能够迎接未来,又不失去自身的形态。

让核心保持易于理解。让人们始终掌控自己的数据。让故障可以恢复。把视觉和技术上的复杂性用在能够改善工作的地方。

经得起时间考验的产品,并不是看起来凝固在某个年代。它会持续学习,同时保留可辨识的特质。这才是值得为之设计的延续性。