Non-Functional Requirements
Non-functional requirements in software refer to the system's characteristics such as security, reliability, performance, maintainability, scalability, and usability. They are not about specific functionalities but rather about the system's quality, defining how the system should work. These requirements are often considered constraints or qualities within which the system must operate.
Performance
- Response time: The response time of redaction should be quick. The file redaction pipeline complexity varies, requiring parallel processing to reduce complexity and ensure APIs are performant.
Scalability
- The system will be configured for scalability.
Reliability
- Availability: The system should maintain high availability (aiming for 99.9% uptime in production) and handle errors gracefully, with quick recovery and automatic restart of critical services.
Fault Tolerance
- Error handling will be implemented on both the front-end and back-end, with peer reviews before merging to minimize faults.
Disaster Recovery
- Database backups, API versioning, and code versioning will enable rollbacks if needed.
Security
- Authentication: Users authenticated via JWT tokens.
- Authorization: Role-based access control (RBAC) with comprehensive access control lists (ACL).
- Communication: All communication is secured over HTTPS.
- Data Encryption: All sensitive data is encrypted with PGP at rest.
- File Address Encryption: The addresses of files are encrypted to ensure secure access and storage.
Scalability
- Horizontal scalability:
- Back-end: Ability to scale across multiple Azure VM instances to handle increased load, ensuring high availability and fault tolerance.
- Front-end: Capacity to scale using multiple Azure App Service instances to efficiently manage higher traffic and ensure seamless user experience.
- Vertical scalability:
- Back-end and Front-end: Unlimited potential to scale vertically on Azure, utilising higher tier VM sizes and App Service plans to enhance performance as needed.
Maintainability
- Modular design, comprehensive developer documentation, and adherence to coding standards and best practices.
Documentation
- Detailed product requirement document, technical requirement document using arc42 and C4 methodologies, API documentation using Spotlight Elements, and developer documentation using Vitepress.
Usability
- Intuitive user interface, clear error messages, and comprehensive user manual and online help.
Compatibility
- Compatibility with the latest versions of major web browsers (Chrome, Firefox, Safari, and Edge), responsive design for various devices (desktop, tablet, mobile), and integration with existing databases and third-party services.
Performance Monitoring and Logging
- Using Flower to monitor queues and programmatically measure extraction, analysis, entity recognition, and redaction to improve the model.
Regulatory Compliance
- Regulatory compliance considerations will be utilised.
Interoperability
- Decoupled layered architecture with independent monitoring of frontend, backend, and data layers, and use of REST APIs.
Backup and Recovery
- Implement automated backup procedures to ensure data integrity and availability.
- Provide mechanisms for quick data recovery in case of accidental deletion or system failure.