在《编程珠玑》第七章中提到这么一件事情:
Brooklyn Bridge的设计者John Roebing当初为了弥补自己对于作用于桥梁上的上升气流的知识欠缺,将Brooklyn Bridge的铁锁强度设计成常规计算要求的六倍,以防止桥梁在上升气流的作用下垮掉,而同时期的吊桥有1/4是在建成10年之内垮掉的。
对此,Vyssotsky提出:“Roebing是一名优秀的工程师,他使用一个巨大的安全系数来补偿他对某些方面的无知,从而建筑了一座令人满意的桥。我们确实需要那样做吗?我承认在对我们的实时软件系统进行性能计算时,我们必须按照2、4或6的系数降低性能,以补偿我们的无知。在进行可靠性/可用性承诺时,我们应该对我们认为能够满足的目标保留一个10的系数,以补偿我们的无知。在估计规模、成本以及进度时,我们应该保留2或4的系数,以弥补我们在某个方面的缺漏。我想知道我们是像John Roebing那样的工程师吗?”
对于我们每一个在构建软件系统的人来说,为了使系统更健壮,冗余是必须的,因为我们永远无法知道系统所处的环境是怎样的,作用在系统上的数据是怎样的,操作系统的人是怎样的。我们必须保证系统在可预知的最严酷环境下还是能非常顺利的工作。但是,冗余也不是无限制的,一个具体系统的某一功能的冗余系数,必须与其开发、部署的成本相结合考虑。这是一种折中和平衡,系统的开发就是在这样的折中和平衡的探索中前进。