Architecture Is the overall program organization clear, including a good architectural overview and justification? Are modules well-defined including their functionality and interfaces to other modules? Are all the functions that are listed in the requirements covered sensibly, neither by too many nor too few modules? Are all major data structures described and justified? Are major data structures hidden with access functions? Is the database organization and content specified? Are all key algorithms described and justified? Are all major objects described and justified? Is the user interface modularized so that changes in it won't affect the rest of the program? Is a strategy for handling user input described? Are key aspects of the user interface defined? Are memory use estimates and a strategy for memory management described and justified? Does the architecture set space and speed budgets for each module? Is a strategy for handling strings described, and are character-string-storage estimates included? Is a strategy for handling I/O described and justified? Is a coherent error-handling strategy included? Are error messages managed as a set to present a clean user interface? Is a level of robustness specified? Are necessary buy vs. build decisions included? Is the architecture designed to accommodate likely changes? Is any part over- or under-architected? Are the major system goals clearly stated? Does the complete architecture hang together conceptually? Is the top-level design independent of the machine and language that will be used to implement it? Are motivations given for all major decisions? Are you, as a programmer who will implement the system, comfortable with the architecture?