Software engineering has concentrated on provision of programming language features to support error trapping. Whilst useful, this represents only a small part of the problem of building effective diagnostics for fault tolerance. Effectiveness depends on many things such as the various possible distributions of error traps throughout the hierarchical code structure, certain properties of the language, and the frequency of different fault classes in practice. To choose between schemes it is necessary to estimate their effectiveness. Fault injection is one possible measurement technique. The issues are discussed in the context of the Ada language.