Define appropriate exception types to be thrown to indicate the failure |
Check preconditions and conditionally return failure before taking any irreversible action in the method |
Make public accessor methods so that clients can avoid or minimize failures |