The tree

Projects & Apps

Some might be confused about these 2 definitions, but if you work with Microservices long enough, you will see this is easy to understand.

For example, one workspace can have many projects, one project can have many child applications, such as: front-end, back-end, API gateway, database, this service, that service, blah blah blah…

Simplify those “micro-services” into projects & apps make it more “developer friendly” and obviously improve developer experience (dx)

Deploy Environments

It is the environment where your apps are deployed to!

Production environment & the others

When deploying to "other environments", your app will be visible to the public immediately. However, when you deploy to the "production" environment, it will only be visible in the "prerelease" environment and will only be rolled out to the "production" environment intentionally.

Check out this “Blue Green Deployment” flow:

Basically this is what happens when you deploy your app to production environment

Basically this is what happens when you deploy your app to production environment

Prerelease Environment (Preview Environment)

This is the main different of production environment with the other environments, think about it like a previewed version of your production app. Take a look at the comparison below:

Prerelease Environment Production Environment
New build
Same Kubernetes cluster
Same Kubernetes namespace
Same environment variables
Different Kubernetes pods
Different access URL endpoint Old build
Same Kubernetes cluster
Same Kubernetes namespace
Same environment variables
Different Kubernetes pods
Different access URL endpoint

So basically the prerelease environment is the same with production environment.

<aside> 👉 Why? The purpose of this workflow is to ensure that your "prerelease" app undergoes a full test without any bugs, errors, or typographical issues. Once you have completed this process, you can confidently roll out your app to the public in the "production" environment.

</aside>

Each deploy environment contains these following information:

  1. Cluster: the Kubernetes cluster which your app will be deployed to
  2. Namespace: the namespace in the Kubernetes cluster which your app will be deployed to (most of the time it’s a slug of the parent project, unless you changed it)