Publisher Summary Practicing the best design techniques will not eliminate all the mistakes. No one is smart enough to anticipate every nuance and implication of each design decision on even a simple little 4k 8051 product. When complexity soars to hundreds of thousands of lines of code coupled to complex custom ASICs, one can be sure that bugs will multiply like rabbits. When basic design decisions are being made, it is known beforehand that in weeks or months the grand scheme will go from paper scribbles to hardware and software ready for testing. It behooves users to be quite careful with those initial choices, to be sure that the resulting design isn't an undebuggable mess. An unhappy reality is that one will surely spend lots of time debugging both hardware and firmware. For better or worse, debugging consumes project-months with reckless abandon. It's usually a prime cause of schedule collapse, disgruntled team members, and excess stomach acid. Later this chapter describes tools and techniques used in debugging, the role of PCBs, and the importance of planning in these engineering projects.