Systems must respond correctly or fail-safe when errors occur. Many spectacular software bugs are failures in error handlers. Built first, error handlers help to debug and build the rest of the system. Errors should be handled in levels of seriousness, but all with an eye towards their interaction with humans. This paper discusses tools to automatically detect errors at compile time and assertions to detect programmatic errors during run-time. It provides an example strategy for error handling, and an example built on the debug facilities provided by an embedded real-time operating system.