Offensive programming—say no more.
When faults breach your careful defenses, you'll need a strategy to round them up.
Defensive programming is a key technique for writing secure software systems.
You must document pre- and postconditions; how else will anyone know they exist? If you have any constraints specified, then you can add defensive code to assert them.