Outside programmers must be able to easily modify our code to suit their own needs or to accommodate new extensions they develop. Consequently, our program must be very flexible. It should be possible to alter its structure at runtime without having to stop and recompile the program as a whole. As far as possible, no class, module, package, agent or any other portion of the program should have any knowledge whatsoever of any other portion of the program. Everything, starting all the way down at the method level, should be as encapsulated as possible.
Flexibility is a high priority.
It doesn't matter how flexible it is if isn't trustworthy. Outside programmers must have faith in our code's ability to do what its documentation says it does without inexplicable failures so that they can add new features without worrying that the whole thing will collapse. 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.