Function requirements
Non functional requirements
- Performance: This includes response time, throughput, and resource utilization. The system should be capable of handling expected and peak load conditions efficiently.
- 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).
- 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.
- Availability: The proportion of time the system is operational and accessible to users. High availability is often achieved through redundancy and failover strategies.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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