Do separate design elements have low coupling? Does each design element have high internal cohesion?
Does the design reflect the architectural objectives of the system?
Can the system be implemented from the information in the design? Has sufficient detail been included?
Is the design consistent? Does any part of the design contradict another part of it in such a way that puts the project
at risk?
Is the design able to accommodate future changes?
Is the design appropriate to the experience level of other team members and stakeholders, neither too simple nor too
advanced?
Is the design written in such a way, and is it structured well enough, so it can be maintained easily?
Does the design constrain the implementation only as much as is necessary?
Does the design describe all the behavior of the system for the requirements that are currently being addressed?
Can all parts of the design be traced back to the requirements? Can the requirements (for the current iteration) be
traced to design elements?
Is there an unambiguous place or places in the design where each behavior exists?
Are the use case flows that are currently being addressed described in the design?
Are complex flows outside the Basic Flow addressed, including exceptional cases?
Has the behavior described in the requirements that are currently being addressed been distributed to the correct
design elements?
Does the design provide enough information for test design? For example, are the collaborations between design elements
clear enough to create integration tests?
Have redundant areas of the design been removed so the Implementation does not contain redundant code?
|