Environment drift is the gradual divergence between developer machines, CI environments, and staging/production setups. It is the single largest source of "it works on my machine" problems.
Different versions of Node, Java, Python, Go, Rust, Maven, Gradle, or Docker between machines. Even a minor version change can break code.
snagify diff working.json broken.jsonExample:
Java working: 17.0.9 broken: 21.0.2 ← likely blocker
.env.example lists all expected keys. .env is often incomplete because:
- team members add keys without telling everyone
- new services require new secrets
- optional fallback providers get added
Snagify classifies keys as required, recommended, or optional to reduce noise.
- Docker not installed or at a different version
- Required Compose files missing
- Required images not pulled
- Required containers not running
- Wrong branch checked out
- Dirty working tree (uncommitted changes that affect behavior)
- Missing commits that added required config
- DNS resolution differs (corporate VPN, split-horizon DNS)
- Internal services unreachable
- Expired or self-signed certificates
- Different timezone causes time-sensitive test failures
- Case-insensitive filesystem (macOS) vs case-sensitive (Linux) causes file import failures
- Different locale affects date/number parsing
Snagify captures a snapshot of the full environment and compares:
# Capture known-good machine
snagify snapshot good.json
# Capture broken machine
snagify snapshot broken.json
# Compare
snagify diff good.json broken.json --format markdownOr configure expected requirements in .snagify.yaml and check locally:
snagify init
snagify checkSnagify never reads .env values — only key names. Baselines strip hostnames and absolute paths. Teammate snapshots never leave the teammate's machine in LAN compare mode.