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?