Non-functional requriements
Production environment
The application should be put into production on a Kubernetes cluster. A load balancer should direct the traffic to a fair amount of nodes in the cluster.
Staging environment
You should have a staging environment that is the same as the production environment throughout the project. This can be a separate Kubernetes instance or a namespace in the production cluster.
Replication of database
You should use the Command Query Responsibility Segregation pattern to offload databases. We expect a high rate of read operations on our application.
Deployment pipeline
One important aspect of the project is to have a well-defined deployment pipeline making sure every team member can provide changes to the project. Early in the project, the team should agree on a deployment pipeline anatomy. I should at least include
- triggers
- stages being used
- what to do on failed tests
- responsibilities
- secrets shared
We are aiming for Continuous Improvement during the project.
Continuous Delivery principles
The team should work using continuous delivery principles. Integrations should be done frequently (no less than every other day for a single branch). Early in the project, the team should agree on which CD principles to adopt. Those should at least include
- branching strategy
- merging (how, when, ...)
- mono repo or multi repo
- team practices (when to work, meetings, tools, ...)
Testing
In an optimal project, we should have 100% coverage with tests. In this project, the team should have tests but the coverage is allowed to be low. However, every microservice created should have a test that is fairly easy to fail. (frontend service excluded).
Optionals
- Use blue/green Deployment for rollouts.
- Use a Gitops flow for the production part of the k8s cluster.
- Smoke testing
- Implement observability
- Istio service mesh with side cars
- ...