Engineering

Case Study: Four Servers, Four Snowflakes

July 31, 2026 · Ecropolis Team

The situation. The client’s site ran on four delivery servers behind a load balancer — nominally identical, actually four years of accumulated hand-edits. Urgent fixes applied over SSH to one node and forgotten. Features built directly on production that never made it back to version control. Files owned by the wrong user. Configs that matched on three machines and not the fourth. None of it caused an outage — that’s the trap. It caused something worse: a fleet where no one could say with confidence what was running where.

What that looked like in practice. A forensic sweep found 24 files where production differed from the source repository — in both directions: real, valuable features that existed only on the servers (deploy anything and you’d erase them), and repo fixes that had never reached production. The single most telling incident: the site’s own favicons returned errors for weeks — but only from two of the four servers. The files existed on all four; two nodes simply refused to serve them. Visitors got working assets or broken ones depending on which server the load balancer happened to pick — the kind of coin-flip inconsistency that’s nearly impossible to reproduce from a support ticket, because half the time the reporter checks, it works. Add a diagnostic logger silently writing nothing for weeks (wrong directory permissions), and monitoring metrics attributed to the wrong server (a cloned machine still reporting under its donor’s name), and you have the full portrait: not one big failure, but a thousand-cut erosion of trust in the platform.

The solution — make the fleet boring:

  • One source of truth. Every server-only feature captured into version control with evidence (diffs, timestamps, verdicts per file); every repo-ahead fix scheduled to ship. A signed manifest for licensed third-party code, so the complete state of a server is reproducible from the repository — nothing lives only on a machine anymore.
  • Versioned, verified releases. Deploys became build-once artifacts rolled to every node with kept release history — rollback is re-pointing a symlink, not archaeology. File ownership and permissions preserved and verified as part of the deploy contract, not left to whoever typed the command.
  • A lifecycle with a contract. New servers are cloned, then normalized (every piece of inherited identity stripped — hostnames, keys, headers, monitoring labels), then validated against a checklist of probes before the load balancer will admit them. A machine can’t serve traffic until it has proven it’s identical to its siblings.
  • Parity as a monitored condition. Per-node configuration snapshots, compared continuously — the console now surfaces “this node differs” as an alert, so drift gets caught by a monitor instead of by a customer.

Results.

  • The fleet is verifiably identical — we check by checksum, not by hope
  • The favicon-roulette class of bug is structurally extinct: a node that differs gets flagged before a visitor ever notices
  • A brand-new production server goes from “doesn’t exist” to “serving traffic, proven identical” in about 40 minutes — it used to be an afternoon of careful typing and crossed fingers
  • Emergency fixes still happen fast — but now with automatic backups, lint gates, ownership preservation, and the repo updated in the same motion, so a hotfix reduces drift instead of creating it
  • When the fleet was later re-architected live (see Faster and Cheaper), the migration was routine — because for the first time, every server was genuinely the same thing