image.png

Three concerns that are important in most software systems:

  1. Reliability - The System should work correctly even in the face of failures (software, hardware, people). Fault is not the same as failure. Faults are ok, failures not. There are hardware faults, software errors (also known as bugs), and human errors.
  2. Scalability - As the system grows, there should be a reasonable way of dealing with that growth. First, describe the system's load (with load parameters), then describe performance when the load increases.
  3. Maintainability - Over time, many people will work on the system, maintaining current behavior and adapting it to new use cases. They should all be able to work on it productively. The operations team plays a crucial role in maintaining the smooth operation of the software system. Managing complexity (removing accidental complexity) and making changes easy (evolvability) are essential.