It’s 4:47 PM on a Friday.
Brandon is feeling good about the feature he just finished. Coffee nearby, confidence high, he drops a message into the team chat.
A few thumbs-up reactions appeared. Someone merged the branch. Someone else pulled it down to test before dinner.
Three minutes later, the first reply arrived. “It crashes on boot.” said Priya.
Brandon looked up from his coffee.
Maya pulled the branch. Crash. Priya pulled the branch. Crash. Owen, who trusted nobody and nothing, pulled the branch into a clean container. Crash.
Brandon opened his laptop, ran the app, and watched it behave perfectly.
No errors. No warnings. No drama.
Just a neat little feature sitting there, smug and functional.
The tone in chat shifted from curiosity to accusation. “What changed?” said Maya. “Nothing major.” said Brandon.
“It literally does not run.” Maya said. Owen, from a fresh container, added, “Same crash.”
“We’ll find the difference...” said Priya.
That sentence hung in the air for a moment. Every team knows it. Every team hates it.
So they started comparing notes. Same branch. Same database snapshot. Same Composer dependencies. Same Node version. Same feature flag state.
Then Priya asked the question that usually ends the mystery and begins the embarrassment. “What’s in your .env that isn’t in ours?”
Brandon opened the file and scrolled. There it was: WIDGET_SIGNING_SECRET.
No comment. No entry in .env.example. No mention in the pull request. No setup note. No validation rule. Just one perfectly important secret sitting quietly on one perfectly specific laptop, waiting to become a team problem.
The app did not work on his machine because the code was correct. It worked on his machine because his machine had become undocumented infrastructure.
By 5:26 PM the team had patched the setup, updated the example file, and restored peace to Envopolis.
Lesson from Envopolis
An undocumented environment variable is a hidden dependency.
The app worked on Brandon’s machine because his machine knew something the team did not. Make required variables visible, validate them, and distribute real values through a shared system before the next “works on my machine” turns into team-wide drift.