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
  • ...