The only difference between the fools and the criminal who attacks a system is that the fool attacks unpredictably and on a broader front. A system tends to grow in terms of complexity rather than simplification, until the resulting unreliability becomes intolerable. Self-checking systems tend to have a complexity in proportion to the inherent unreliability of the system in which they are used. The error detection and correction capabilities of a system will serve as the key to understanding the types of error which they cannot handle. Undetectable errors are infinite in variety, unlike detectable errors, which by definition are limited.
All real programs contain errors unless proven otherwise, which is impossible.
Investment in reliability will increase until it exceeds the probable cost of errors, or until somebody insists on getting some useful work done. Golub's Laws of Computerdom 1. Fuzzy project objectives are used to avoid the embarrassment of estimating the corresponding costs. The effort required to correct course increases geometrically with time. Project teams detest weekly progress reporting because it so vividly manifests their lack of progress.