To achieve a high-quality design a number of factors must be met

Modifiability

  • The design must be trivially adaptible and changeable
  • Units that are directly affected may need to change
  • Units that are not directly affected do not change but their implementation may need to
  • Changes can be made less impactful and easier to implement through a variety of methods:
    • Anticipation of change
    • Generality of modules (inner platforming lol)
    • Atomic units
  • Indirectly affected units can be made more resilient to changes through generalised interfaces and reducing couplings to other units.

Performance

  • Latency/Response time - how fast is a response
  • Throughput - how many requests can be processed in a fixed time-frame (ie: requests per second)
  • Load - how many concurrent requests can be processed/how many users can utilise the software before latency and throughput have issues

Security

  • Immunity - Being immune to an attempted attack
  • Resilience - Recovering from a succesful attack easily

Reliability

  • Software should have as few faults as possible
  • Passive and active fault detection methods can be used
  • Exception handling and fault recovery is important to put the system into an acceptable state
  • Fault recovery (to limit fault damage) tactics
    • Transaction rollback
    • Backups
    • Fault reporting
  • N-version programming allows two teams to implement functionally equivalent systems so that the likelihood that they share faults is reduced

Robustness

  • A system is robust if it can recover from problems in the environment or other units
  • Mutual suspicion means that units should be resilient to other units having faults
  • Recovert tactics for robustness are similar to fault recovery

Usability

Usability reflects how well a user can operate the system

  • The UI should be its own unit
  • User commands may require architectural support

Business Goals

  • Business goals are important because money
  • Buy vs Build a system
  • Initial development costs and maintenance costs
  • Use new tech or stay with known-working tech