Current design and assessment methods cannot ensure that software is error free and consequently fault tolerant techniques play an important role in safety critical systems to ensure reliable software behaviour. Unfortunately general guidelines for the implementation of software diagnostics are lacking. The aim of this work is to build on the previous research in software error detection and the principles for hardware error detection, to gain an overall systems appreciation of, and develop a general methodology for, implementing fault diagnosis in computer based systems. A boiler control software case study is presented and is used to demonstrate the potential of our approach and to highlight the implications of different diagnostic strategies. This paper also discusses the potential of using empirical techniques such as fault simulation to study the coverage of different diagnostic options.