Skip to content
Varun Biju/Writing/Why I stopped waiting on the tech lead for deployments
4 min read

Why I stopped waiting on the tech lead for deployments

Every dev deploy at our company went through one person checking servers by hand for free capacity. I found Coolify on a Reddit thread, standardized us on Docker Compose, and cut setup from a day and a half to about two hours. That was the first piece of taking over devops and deployment for the whole company. It now runs 200+ containers across 8+ servers, including my own.

coolifyself-hostingdockerdocker-composedevopspaasreverse-proxy

Before Coolify, every dev deploy at our company went through one person: our tech lead. He’d check a handful of servers for one with spare CPU and RAM, SSH in, clone the repo, wire up a database if the project needed one (or create one if it didn’t exist yet), find a free port, point the reverse proxy at it, and assign a domain. By hand. Every project, every time.

That cost more than his afternoon. SSH keys to the shared servers went out to whichever developer happened to be on a project that week, and nobody tracked who still had access to what. Deploy steps differed from project to project, so they lived in someone’s memory instead of a doc. A new dev environment took about a day and a half to spin up, on average. And more than once, one compromised app took the entire shared server down with it, because nothing kept it separate from its neighbors.

So what actually fixed it?

Before and after Coolify Left: three apps sharing one server, two of them colliding on the same port. Right: the same three apps under Coolify, each isolated in its own container. ONE SHARED SERVER app-a :3000 app-b :3000 ! app-c :4000 SSH in, hunt down a free port by hand COOLIFY app-a app-b app-c one dashboard, each app its own box
What changed was isolation, not features or a nicer dashboard. Apps finally can't step on each other.

Finding it on Reddit

I found Coolify by accident, on a Reddit thread about ways to simplify server management. The pitch sounded too clean: free, self-hosted, PaaS-style deploys, push-to-deploy, automatic Docker builds, one dashboard, all on our own servers.

I’d used enough “free” tools to expect a catch, usually a missing feature or just something barely held together with tape. I installed it on a spare box expecting to find the hole within an hour. I didn’t. Every app got its own container and its own environment, all managed from one dashboard, with no one else’s half-finished Kubernetes setup to reverse-engineer.

What kept me there was the team behind it, especially Andras Bacsai. Their philosophy and how seriously they take feedback and suggestions won me over, and the team ships fast without sacrificing quality or accountability. I’ve become something of a fan.

Standardizing the company on it

Standardizing on Coolify is what put me in charge of devops and deployment for the whole company. This post covers that one piece; the full shift, FOSS migration and all, is its own story.

Fixing the actual problem meant one rule: every application deploys as a Docker Compose stack, full stop. A developer writes the compose file in the project repo, and that’s the entire deploy contract. I set up Coolify’s GitHub App integration for our org, so it pulls from GitHub and deploys the stack directly. Push to a branch, and a webhook tells Coolify to redeploy automatically. Nobody needs an SSH key to the server anymore.

Coolify also owns the reverse-proxy networking end to end. The server doesn’t need any publicly exposed ports beyond 80 and 443 anymore. I map a domain to a container’s internal port inside Coolify’s UI, and it just works.

It also solved the blast-radius problem. Each app runs in its own container, so one broken or compromised app can’t take its neighbors down with it, even on a server they share.

Setup time for a new project dropped from a day and a half to around two hours.

Where it sits today

That was the origin. It’s grown well past that since.

ThenNow
Deploy methodgit pull + npm start, by handPush to deploy, containerized
IsolationNone: shared ports, shared processesOne container per app
Servers managed1 at a time, manually8+, one dashboard
Containers running0200+
What breaks a neighborAlmost anythingNothing

Most of what runs on it now isn’t the original dev environments it was built to fix. It’s become the backbone of the whole delivery function, and my own server runs on the same system: a smaller slice, same trust.

What I’d tell someone in the same spot

If deploys at your company still run through one person’s head, that’s not a staffing problem, it’s a process that never got written down. Standardizing on containers fixes it whether you have three projects or thirty.

Migrate incrementally. We moved projects over one at a time, lowest-stakes first, and let each one sit for a couple of weeks before trusting it with anything that mattered.

You don’t need outside clients to justify doing this properly. Your own team’s dev environments are worth the two hours it now takes.

I’m still on it, still adding servers, and I haven’t had a reason to look elsewhere since that Reddit thread.

Related case study
Zethic Delivery Modernization
Varun Biju

Written by

Varun Biju

Problem solver · Builder · Nerd