While expert systems have traditionally been built using large collections of rules based on empirical associations, interest has grown recently in the use of systems that reason from representations of structure and function. Our work explores the use of such models in troubleshooting digital electronics. We describe our work to date on (i) a language for describing structure, (ii) a language for describing function, and (iii) a set of principles for troubleshooting that uses the two descriptions to guide its investigation. In discussing troubleshooting we show why the traditional approach --- test generation --- solves a different problem and we discuss a number of its practical shortcomings. We consider next the style of debugging known as violated expectations and demonstrate why it is a fundamental advance over traditional test generation. Further exploration of this approach, however, demonstrates that it is incapable of dealing with commonly known classes of faults. We explain the shortcoming as arising from the use of a fault model that is both implicit and inseparable from the basic troubleshooting methodology. We argue for the importance of fault models that are explicit, separated from the troubleshooting mechanism, and retractable in much the same sense that inferences are retracted in current systems.