Handling error conditions with proper forethought
There is apparently a new C-like programming language called Go. While I have not spent time to read much detail, I found the following passage on the FAQ page, talking about assertions, to be insightful:
Go doesnt provide assertions. They are undeniably convenient, but our experience has been that programmers use them as a crutch to avoid thinking about proper error handling and reporting. Proper error handling means that servers continue operation after non-fatal errors instead of crashing. Proper error reporting means that errors are direct and to the point, saving the programmer from interpreting a large crash trace. Precise errors are particularly important when the programmer seeing the errors is not familiar with the code. [...] Time invested writing a good error message now pays off later when [something] breaks.
This sort of design philosophy is applicable to software development in any language.