My "portable" development environment

I do most of my day-to-day software engineering work on a "reasonably powerful" desktop machine. I spent about ~$1.5k on it about two years ago and it's been pulling its weight ever since. However, I do feel that I've been a bit spoiled by the machine every time I have to travel for work and end up using my work laptop. My work laptop (a 2019 MacBook Pro) is perfectly fine but it can't hope to compete with a dedicated desktop. The MacBook can also sometimes be quite a bit slower than I'd like, especially when I'm running a few Docker containers (my desktop runs Linux, so I can avoid the virtualization overhead).

Performance aside, my primary issue when developing away from my home environment tends to be the internet. I've stayed in one too many hotels with terrible internet. Bad internet is one of those things you can't really fix if you haven't prepared for it in advance. The impact of bad internet can range from mild nuisance to complete show-stopper. Have you ever tried installing node modules on an airplane? Good luck.

Luckily, I've settled on a development environment that's essentially fixed this problem entirely for me. I first created a "reasonably powerful" VM on Digital Ocean (I like Digital Ocean because it's simple, fight me) and loaded it up with all the tooling that I need on a daily basis. I get to work on a Linux environment, I have all the RAM I need, and I can add storage as needed. As an added bonus, I don't burn through my laptop battery running virtualized Docker containers.

By doing all of my development work on this remote machine, I can also almost entirely get around the internet problem. When my internet is anything more than "complete garbage" I use the Remote SSH plugin for VS Code. The Remote SSH plugin allows you to work on a remote environment as if it's your standard VS Code environment. It's extremely simple to set up (just install the plugin and connect to the remote machine) and any other plugins that you have installed on your VS Code will also apply remotely. I seriously cannot overstate the utility of this plugin and I highly recommend you give it a try just to see it for yourself.

The Remote SSH plugin is good enough on most internet connections. If my internet falls down to below "complete garbage" levels, Remote SSH can become a bit laggy. I can always fall back to mosh (a shell optimized for spotty internet connections) + vim in the worst case. I rarely need to do this, but it's nice to know that I have the option if I really need it.

Of course, the most annoying aspect of renting a "reasonably powerful" VM from Digital Ocean is that you need to pay for the thing. Digital Ocean VMs can be a bit pricey so I do a bit of fiddling to save some money. Digital Ocean allows you to take snapshots of your VMs so that you can restore them later. These snapshots are significantly less expensive than the actual VM (my ~40gb snapshot costs me ~$2/mo). Whenever I'm about to travel, I simply spin up an instance of my VM from my most recent snapshot. When I'm back, I take a new snapshot and delete the running VM. For a 1 week trip, the whole thing costs me about ~$10-20 (depending on the VM specs, based on what I expect to be working on that week) and saves me the headache of a bad internet connection or a slow laptop.

So there you go, that's my "portable" development environment. I've been really happy with it so far. I highly recommend giving this a shot the next time you're planning to go on a trip and you need access to a solid development environment. I'll keep this page updated if I find any new tricks to get even more out of the environment!