05 Solution Strategy - ZHAW-PM4-Compass/compass GitHub Wiki
Motivation:
The solution strategy for the Compass app is driven by the need to deliver a robust, scalable, and user-friendly application while efficiently managing development processes and using appropriate technologies. By making informed decisions based on our quality goals and constraints, we aim to create a solution that aligns with both technical requirements and user expectations. Incorporating Auth0 for authentication enhances the app's security, and utilizing GitHub Actions for CI/CD pipelines ensures efficient development workflows and reliable release management. By automating deployment to stage environments after merges into the main branch, we enhance development efficiency and deployment reliability while maintaining a robust testing environment.
1. Technology Decisions
Quality Goal |
Scenario |
Solution Approach |
Link to Details |
Performance |
Extensive user activity and responsiveness |
Utilizing React/Next.js for frontend development and Java Spring Boot for backend allows for efficient rendering on the client-side and lightweight, scalable microservices on the server-side. |
NextJs Spring Boot |
Scalability |
Anticipated increase in user amount and data volume |
Using Docker containers and Kubernetes orchestration to manage multiple pods (backend and frontend) in a cloud environment, enabling simple scaling and load balancing based on demand. |
Docker |
Maintainability |
Ease of code maintenance and future updates |
Embracing PostgreSQL as the database of choice for its robustness, reliability, and compatibility with both frontend and backend technologies, facilitating data management and updates. |
PostgreSQL |
2. Top-Level Decomposition
Quality Goal |
Scenario |
Solution Approach |
Link to Details |
Flexibility |
Accommodating evolving user requirements |
Implementing a microservices architecture with Spring Boot for backend services and Next.js for frontend components, simplifying independent scaling, deployment, and updates of functionalities. |
- |
Extensibility |
Integration of third-party services |
Utilizing API endpoints in Spring Boot to expose backend functionalities, allowing integration of external services, while using Next.js server-side rendering for dynamic frontend interactions. |
- |
3. Key Quality Goals
Quality Goal |
Scenario |
Solution Approach |
Link to Details |
Security |
Protection of user data and prevention of data breaches |
Using Auth0 for secure authentication and authorization, providing robust identity management features, including multi-factor authentication and social login integrations, to safeguard user accounts and sensitive data. |
Auth0 |
Usability |
Intuitive user experience and ease of navigation |
Working wiht React/Next.js for frontend development to create responsive, interactive user interfaces with fast page loads, smooth transitions, and intuitive navigation. Enhancing overall usability and user satisfaction. |
- |
4. Organizational Decisions
Quality Goal |
Scenario |
Solution Approach |
Link to Details |
Development Process |
Efficient collaboration and delivery |
Implementing DevOps practices with GitHub Actions for CI/CD pipelines, enabling automated testing, code analysis, and deployment to stage environments after merges into the main branch, ensuring rapid and reliable delivery. |
GitHub Actions |
Third-Party Tasks |
Specialized expertise for specific tasks |
Outsourcing infrastructure management and maintenance to cloud service providers (e.g. Infrastructure from ZHAW), allowing the team to focus on application development and business logic, while ensuring scalability and reliability. |
Azure |
By using React/Next.js for frontend development, Java Spring Boot for backend services, PostgreSQL for database management, and integrating GitHub Actions for CI/CD, the Compass app is able to deliver high performance, scalability, maintainability, security, and usability. This comprehensive strategy ensures efficient development processes, robust security measures with Auth0, and a streamlined release workflow, ultimately providing a reliable user experience.