# NODE_ENV=production is a lie [eng]
In the beginning, there were configuration files. Each environment had one committed to our repositories. Then, we discovered the light of the 12-factor applications and having environment-specific values set as environment variables. Then, NODE_ENV came along, and it broke our idyllic world.
Libraries with millions of weekly downloads check for NODE_ENV=production to enable optimizations, changing the behavior of applications. Given this worked so well, developers started loading configuration files (or secrets) based on the value of NODE_ENV to identify _their_ "production" environment.
However, what value should be used for the staging environment? What about QA? If we don't run the same code everywhere, we will be hit by bugs that we cannot reproduce across environments. So, we set NODE_ENV=production everywhere. How should we distinguish across environments, then?
- Co-Founder and CTO of Platformatic.dev
- Member of the Node.js Technical Steering Committee focusing on streams, diagnostics and http
- He is also the author of the fast logger Pino and of the Fastify web framework
- Matteo is an renowed international speaker after more than 60 conferences
- Twitter, LinkedIn, YouTube, Twitch