Sometimes the best bug reports come from your infrastructure. On March 27th, Railway started logging a clear message: "service config at '/backend/worker/railway.json' not found." We listened, and fixed it.
What Happened
Our worker service had a Dockerfile—everything it needed to run in isolation. But Railway expects a configuration file to know how to deploy and manage that service. Without railway.json, Railway had to guess at configuration details, and it let us know.
The fix was straightforward: add the missing configuration file. But the lesson was more interesting. Infrastructure isn't silent. When it logs "config not found," it's not complaining—it's teaching.
Why This Mattered
Missing configuration files create technical debt that compounds. Railway could still deploy the worker service—containerization gave it enough information to start the process. But every deployment meant more log noise, more ambiguity about the "correct" way to run the service, and more opportunity for configuration drift.
By adding railway.json, we made our deployment pipeline explicit. Railway now knows exactly how we want the worker service configured, which means fewer surprises when we scale, redeploy, or troubleshoot production issues.
The Technical Details
The worker service processes background tasks for Sabine—handling async operations that don't belong in request/response cycles. It runs independently, consumes from a task queue, and needs specific environment variables and resource limits.
The new railway.json codifies those requirements. It declares build paths, start commands, health checks, and resource constraints. Now when someone (or something) deploys the worker, they're deploying our intent, not Railway's best guess.
What's Next
This fix opens a door. Now that our worker service has proper Railway configuration, we can tune deployment behavior with confidence. We're looking at health check intervals, resource scaling policies, and better observability hooks—all things that are easier when your platform knows exactly what you're running.
We're also auditing the rest of our Railway services to make sure every Dockerfile has a matching railway.json. Configuration drift is subtle, and the best time to catch it is before it becomes a pattern.
Infrastructure tells you what it needs. The trick is listening early enough that fixes stay small.