Using assertions for critical methods, validating inputs, programming defensively, and so on, are all critical qualities in producing quality code. Robustness is a high priority. It doesn't matter how robust it is if it isn't readable. A reasonably competent outside programmer should be able to spend at most a week reading the documentation and playing with the program to understand it all. It is better to provide too much documentation than too little, once it is well-written to begin with.
Clarity is a high priority.
In pursuit of these three goals we have to give other possible goals second place. This must be sacrificed, if necessary. Those three properties come first and foremost.