← All posts

I Logged Every Dev Interruption for a Week. It Cost Me a Full Day.

July 16, 2026 · 5 min read · The xShellz Team

I spent a week tracking every time my local environment kicked me out of the zone. I wasn't after the obvious crashes. I wanted to measure the micro interruptions that eat time without leaving a paper trail. The kind where you run npm install, stare at a spinner, then open Twitter. Or when your laptop goes to sleep and the AI coding agent you had mid-thought is gone, along with its context.

By Friday, the numbers were embarrassing. I'll walk you through what I found, how much it actually costs, and why I now do all my serious work on a persistent remote shell.

The Paper Cuts That Add Up

Most of us think of "slow" as a monolith. But the tax comes in three distinct flavours.

First, there's the compile / install / build loop. On an M2 MacBook Air, a cold docker compose up for a mid-sized Rails app takes about 90 seconds. A pip install with native extensions can stretch to two minutes. These aren't one-offs. A busy day might hit that loop 12 to 15 times. Do the math: 15 restarts at 90 seconds is 22 minutes just waiting. And that's not counting the context switch while you wait.

Second, dependency drift. I maintain a dozen side projects. Every time I open an old repo, I gamble. Did Homebrew update Postgres? Is rbenv pointing to the right Ruby? bundle install fails with a cryptic native extension error, and now I'm reading a 200-line C compiler log instead of shipping. I tracked 45 minutes on a Tuesday just untangling a local node-gyp mess that didn't exist on our CI runner.

Third, and this one surprised me, interrupted AI agent sessions. I use a terminal coding agent (borg, an always-on agent we run at xShellz) for heavy refactors and PR descriptions. On a laptop, the session lives and dies with the terminal window. Close the lid at lunch, the agent drops. Reopen it, you've lost the chain of thought and any in-progress work. Restarting means re-explaining the task. Over a week, I counted six agent restarts due to sleep or accidental Ctrl+D. Each cost 5 to 10 minutes of re-ramp. That's 30 to 60 minutes of pure waste.

Add it up: 22 minutes of Docker wait, 45 minutes of dependency surgery, 45 minutes of agent resets, plus a dozen smaller "where's that env var?" moments. The total was just over 7 hours, a full workday of lost focus.

Why Local Keeps Biting You

The root cause isn't a slow machine. It's that a local development environment is fundamentally fragile and transient. It's mutable. Every OS update, every new project, every brew upgrade silently shifts the ground under your feet. And it's ephemeral: your laptop suspends, your terminal dies, your VPN drops.

This is fine for quick edits. It's not fine when you need deep, uninterrupted work.

The Shift to a Persistent Remote Shell

I moved my main development environment to a remote Linux shell that never sleeps. The shell lives on a server, not my laptop. I connect via SSH or Mosh, run tmux, and treat it like a real office. When my laptop lid closes, tmux keeps running. When I move from home to a coffee shop, I reattach and pick up exactly where I left off. No lost context.

The immediate wins:

  • Build times dropped because I spec'd a beefy server with NVMe storage and more cores. That 90-second Docker build now takes 12 seconds. The pip install native extensions compile in a quarter of the time, because make -j16 actually works.
  • Dependency drift vanished. I have one known-good system image, not a dozen fractured local installs. I can snapshot the whole environment and tear it down safely.
  • My AI agent, borg, runs 24/7 in a tmux pane. It never drops. I'll start a refactor before lunch, let it churn through the file tree, and come back to a completed task with a full log. No re-explaining. No lost state.

That one change reclaimed those 7 hours. I'm not exaggerating. The same ticket workload that used to spill into evening now wraps by 4 p.m.

The Always-On Agent Advantage

The AI agent part deserves a closer look. Most coding agents run as CLI tools that require an active terminal session. Close the tab, they die. Even with nohup or disown, you lose the interactive feedback loop.

With a persistent remote shell, I can detach from tmux while the agent keeps working. I treat it like a CI job, but interactive. I'll fire off a command like borg "refactor the User model to use service objects and update all callers", then go walk the dog. When I reconnect, I review the diff in a clean tmux window, accept or reject changes, and push. That pattern alone saves me about 90 minutes a week, because I no longer wait for the agent while staring at a terminal.

And because the agent lives on the same host as my code and database, there's zero network friction. No uploading context to a cloud IDE. It runs on bare metal, with all my tools right there.

What It Looks Like in Practice

I keep it simple. On my remote shell:

ssh devbox
tmux attach || tmux new -s main

Inside tmux, I split panes: editor, logs, and borg agent. Even if my VPN drops, mosh reconnects seamlessly. I can work from an iPad with Blink if I want.

For the agent, I have a dedicated session where borg runs with its own context file. I kick off long-running tasks and use borg --continue if needed. Detach, walk away, reattach later. No lost work.

The Bottom Line

A local machine is a great thin client, but a terrible long-run host for serious development. The latency tax shows up in wait time, drift, and broken AI agent flows. By moving to a persistent remote shell and running an always-on agent, I got back a full day each week. That's not a productivity hack; it's just removing friction that shouldn't exist.

If you're curious, the setup I described runs on the xShellz infrastructure we built for exactly this reason. We provide a remote Linux shell with root access, tmux, and borg, our always-on coding agent. It's the environment I use daily. But even if you roll your own on a VPS, the principle holds: stop fighting your laptop, and let your tools run where they can't be interrupted.