Requirements and -ilities

  • Responsiveness

  • Reliability

  • Availability

  • Security

  • Usability

  • Maintainability

  • Resilience

Software Design

  • How will the software work?

  • Multi-level

    • Architecture: strategy
    • Detailed design: tactics
  • Traceable to

    • Requirements
    • Implementation
  • Comes mainly with experience, but also

    • Looking at other folks' designs
    • Reading about how design is done

Architectural and Detailed Design

  • Architecture: overall block diagram of what you are building

    • Is it a pipeline? client-server? plugin architecture? file processor? database-driven? gui?
    • What sorts of constraints does the design impose?
    • How well does the architecture fit the requirements?
    • All else being equal, simpler is better
  • Detailed Design: Module decomposition of what you are building

    • Usually all the way down to "units" (procedures, functions, methods)
    • Rule of 7 ± 2
    • Bottom-up vs top-down
    • All else being equal, simpler is better


  • Functional layers from "back" (primitive services) to "front" (user-facing services)

  • Neither too many nor too few

Client-Server Architecture

  • Shared data and processing on backend

  • Individualized interfaces and access on front-end

  • Need not be separated by a network (but usually are)

  • Compare with "Model-View-Controller pattern"

Technology Issues

  • Please ignore these sections of the textbook

  • In particular, please ignore the section on open source


  • Not necessarily every unit, but any that have anything interesting.
  • Rules of Pseudocode:
    • Should be translatable to code about as fast as you can type
    • Shouldn't be code
      • English to make things clearer
      • Easy details omitted
    • 1-5 LOC per line
Last modified: Monday, 26 October 2020, 12:33 AM