Why and how to check if your app environment is staging or production?
Tags: dx, console, logs
Published: 2023-08-14 11:47:06

It is common for your backend services and frontends to run in more than one environment. They can run in development in your localhost machine. You can have a staging environment as close to production environment to be able to test everything before a release. And finally, you have the production environment where your real users are using your product.

If you read 12factor about config [12factor Config](https://12factor.net/config), you know you need to keep your environment config separate from your code as a good practice.
You can have credentials to external services like email providers. You can have database URI that will be used per environment. And, you can also have some specific endpoint per environment.

## Should your code change based on the environment they are running?

This is a hard question, and most of the time you want your code to behave the same independent of the environment its running.
However modifying behavior on development and staging can be useful to make it easy to test.
We can also be even more strict in production if needed.

## How to check the current environment

At Woovi, we have a special environment variable called `APP_ENV`. `APP_ENV` has only 3 possible values: development, staging and production.

We use APP_ENV checks to enable or disable behavior based on the environment.

```jsx
const isStating = process.env.APP_ENV === 'staging'
```

## Use cases to modify behavior based on the environment

When we are in development or staging, we only send emails to  users and customers that have the `@woovi.com` domain.
This helps us ensure we are not sending test email to our users in production. The same applies to web push notifications.

We also disable sending SMS because it is not cheap.

We disable some KYC validation to be able to create bank accounts with fake data in development and staging.

We only enable some experimental feature flags based on environment to avoid causing problems in production.

## How to share .env with your team

You can use [DotEnv](https://www.dotenv.org/) service to save your .envs files to share with your team.

## Conclusion

Modifying code behavior is better using feature flag then checking environment variable. However, using environment variables makes more sense to some scenarios and both strategies can be used together.

We do use `process.env` as feature flags for development to enable better DX, you can read about it here [https://dev.to/woovi/processenv-as-feature-flags-nf](https://dev.to/woovi/processenv-as-feature-flags-nf)

---
Woovi
[Woovi](https://www.woovi.com) is a Startup that enables shoppers to pay as they like. To make this possible, Woovi provides instant payment solutions for merchants to accept orders.

If you want to work with us, we are [hiring](https://woovi.com/jobs/)!

---
Photo by <a href="https://unsplash.com/@robertlukeman?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Robert Lukeman</a> on <a href="https://unsplash.com/photos/_RBcxo9AU-U?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>