The ARTis Architecture: A Blueprint for Long-Term Success
At ARTis, we understand that selecting the right application architecture is crucial for the sustained success of our product. Our approach involved a thorough evaluation of the architectural characteristics necessary to meet both current and future demands. This structured process guided our decisions on components and ultimately led us to adopt an architectural style tailored to our specific needs.
The Four Pillars of ARTis Architecture
Our software architecture is built around four key dimensions: architectural characteristics, logical components, architectural decisions, and architectural style.
1. Architectural Characteristics
To ensure the robustness and longevity of ARTis, we identified several non-functional requirements critical to our architecture:
- Agility: The architecture must support quick and easy changes, enabling rapid deployment of updates.
- Testability: High test coverage is essential, making the software easy to test and ensuring reliability.
- Maintainability: The system should be easy to understand and modify without introducing regressions.
- Deployability: Our software must be straightforward to deploy in any cloud environment.
- Data Integrity: All data changes should be consistently stored without any loss, ensuring accuracy and reliability.
- Auditability: The application must maintain a comprehensive audit log of changes to key records.
- Security: Secure data storage and access are non-negotiable, with encryption as a standard.
- Performant Reporting: Management Information System (MIS) reports should be generated quickly and efficiently.
- Reliability: The application should operate with high availability, minimizing downtime.
- Scalability: The system must scale to accommodate multiple users and branches or centers of a customer.
2. Architectural Decisions
To meet these non-functional requirements, we made several key architectural decisions:
- Test Strategy: We implemented a robust testing strategy based on the test pyramid to ensure thorough coverage.
- Separation of Concerns: Clear separation of concerns across modules ensures that each module only queries and modifies the data it owns. Inter-module communication is handled through APIs or connectors.
- Containerization: The application is containerized for easy deployment across various environments.
- Relational Database: We chose a relational database for its ACID properties, ensuring data integrity.
- Cloud Backups: Daily database backups are taken and stored in cloud object storage for safety.
- Audit Logging: Important records are updated with both the before and after states recorded for traceability.
- Security Measures: All client-server communications are encrypted, and passwords are securely stored. Role-based access control (RBAC) is implemented for data access management.
- OLAP for Reporting: A separate OLAP database is used for reporting to ensure high performance.
- Redundancy and Scalability: Multiple compute nodes are set up for redundancy, and read replicas are introduced to scale the system for large customers.
3. Logical Components
The ARTis application is composed of several key modules and components, each serving a specific purpose:
- Appointment
- Analytics
- Audit Logging
- Billing
- Communication (SMS, Email)
- Consents
- Consultation Notes
- Cryopreservation
- Customer
- Cycle
- Dashboard
- Medical History
- Investigation
- Journey
- Patient Engagement
- Pharmacy
- Point of Sale
- Procedure
- Task
- Treatment Advice
- User
4. Architectural Style: Modular Monolith (Ports & Adapters)
The ARTis architecture follows a Modular Monolith style, specifically leveraging the Ports & Adapters pattern. This approach allows us to build a highly modular and maintainable system, where each module can evolve independently while still interacting seamlessly with other parts of the application.
Stay Tuned
In our next blog post, we’ll dive deeper into the Modular Monolith architectural style of ARTis, exploring how it helps us achieve our goals of scalability, maintainability, and agility.