Function requirements

Non functional requirements

  1. Performance: This includes response time, throughput, and resource utilization. The system should be capable of handling expected and peak load conditions efficiently.
  2. Scalability: The system's ability to handle growth in workload (e.g., increased numbers of transactions or users) by utilizing additional resources effectively. This can involve scaling up (adding resources to a single node) or scaling out (adding more nodes).
  3. Reliability: The system's ability to operate without failure over a specified period under specified conditions. This includes fault tolerance, the ability to recover from errors, and high availability.
  4. Availability: The proportion of time the system is operational and accessible to users. High availability is often achieved through redundancy and failover strategies.
  5. Security: The system's ability to protect data and maintain confidentiality, integrity, and availability. This includes measures against unauthorized access, data breaches, and ensuring data privacy.
  6. Maintainability: The ease with which the system can be modified to fix faults, improve performance, or adapt to a changed environment. This includes code readability, modular design, and the use of standard patterns.
  7. Usability: How easy it is for users to learn, understand, and use the system. This can include user interface design, documentation, and overall user experience.
  8. Disaster Recovery: The system's ability to recover from catastrophic failures, such as natural disasters or major system failures. This involves data backup and recovery procedures.
  9. Compliance: Adherence to legal, regulatory, and security standards relevant to the system's domain. This can include data protection regulations, industry standards, and audit requirements.
  10. Portability: The ease with which the system can be transferred from one environment to another. This includes considerations for different operating systems, hardware platforms, and environments.
  11. Cost-effectiveness: The system's total cost of ownership, including acquisition, operation, and maintenance costs, relative to its benefits and performance.

Database

ACID

Atomicity

Atomicity ensures that each transaction is treated as a single unit, which either completely succeeds or completely fails. If any part of the transaction fails, the entire transaction is rolled back, and the database is left unchanged.

Example: Consider a banking system where a transfer from Account A to Account B involves two steps: debiting Account A and crediting Account B. If the credit to Account B fails (for instance, due to a network issue), the debit from Account A must also be rolled back to ensure that the money isn't lost.

Consistency