The design of reliable and testable systems, both analog and digital, is considered at the component, circuit, system, and network levels. Using numerous real-world examples, the trade-offs between redundancy, testability, complexity, and fault tolerance are explored. Although the emphasis is predominantly on electronics, related examples from the aerospace and software industries are included. The concepts of fault lists, collapsed fault lists, and other techniques for reducing the complexity of fault simulation are addressed. A quantitative relationship between information theory, error correction codes, and reliability is developed. Finally, the elements of a practical quality assurance system are presented. In addition to homework assignments, students will conduct an in-depth, quantitative case study of a practical system of personal interest.