in reply to
Defensive Programming and Audit Trails
In my oppinion, the larger your code is, the more places for it to fail.
I know that describing exceptions takes time - even more than to write 'working' solution, but... if something fails, you should be able to find (immediatelly) what, where and when has failed. Whenever possible I check return codes of functions and calls and log all errors to a file/syslog/whatever. During developement you can log every single error, eg. missing parameters, etc. (of course for developement you don't use any sensitive data). On working systems you should log all exceptions and failures, where 'all' means enough for you to know exactly what failed, but not enough for others do compromise data your software is work with.
BTW. Another rule says that the less you know, the better you sleep but that doesn't apply to programmers ;-)