Defensive design considerations: anticipating misuse authentication Input validation Maintainability use of subprograms naming conventions indentation commenting