Embedded computing systems have become a pervasive part of daily life, used for tasks ranging from providing entertainment to assisting the functioning of key human organs. As technology scales, designing a dependable embedded system atop a less reliable hardware platform poses great challenges for designers. Cost and energy sensitivity, as well as real-time constraints, make some fault-tolerant techniques unviable for embedded system design. Many techniques to improve reliability can incur performance, energy, or cost penalties. Further, some solutions targeted at a specific failure mechanism could negatively affect other mechanisms. For example, lowering operational voltage can help mitigate thermal problems but increases vulnerability to soft errors. Developers must understand the trade offs when designing reliable embedded systems.