Going all-in on cloud-based development with realistic databases
Throughout 2020 and 2021 much of the world moved to remote-first working through unfortunate necessity. We got used to remote standups, meetings, reviews and collaboration. Working patterns and practices changed, but have development environments kept up?
VPN-Based development
It’s likely that as a developer who’s used to work in an office environment, you’d have a relatively powerful desktop to handle your day-to-day activities. Maybe even something as “beefy” as Nick Craver describes for the typical Stack Exchange development machine! It’s also likely that you might not have the privilege of being able to take that desktop to where you currently work remotely.
This can lead to a rise of “VPN-Based development”.
On paper it makes sense. Re-use the powerful compute you’ve got on-premises.
In practice — it’s incredibly painful. Anyone who is used to the snappy environment you’d have from being sat physically in front of that desktop will loathe the lack of responsiveness you get from remote desktop sessions. It’s slow, it’s laggy, but it works. Just.
Laptop-based remote development
Alternatively, you might be fortunate to have a new machine that’s suited for remote work. Most likely a laptop. This can be great as it’s truly portable but it’s unlikely to be as powerful as the remote desktop (though some laptops can really pack a punch so this isn’t necessarily true!)
This will have cost you or your organisation money, but is certainly a route that some have followed.
Cloud-based development
On the other hand, we could look at cloud-based development. Solutions like Gitpod offer an excellent way to define the environment you want to develop in as code and will then happily provision a VS Code like environment.
This has a few benefits:
- Deterministic dev environments via containerised installation of dependencies
- Faster download of dependencies due to using Gitpod’s upstream network
- No lag/unresponsiveness — Since VS Code uses lots of web-based technology, the experience in a Gitpod tab is incredibly similar to what you get natively. It’s snappy and feels right. Certainly much better than a remote desktop session.
This is really exciting. You can develop software entirely remotely in the cloud with a native-like experience.
Though it’s true that some things might be harder to replicate than you’d normally get from a VPN-Based development workflow…
Infrastructure dependencies
What about that database server running in your corporate LAN? Unless you somehow make that publicly accessible, or figure out a tunnel between a cloud dev environment, you’re out of luck.
It’s even worse if that shared environment was a very large database (100s of GB) since you’re not going to want to bake that into a Docker image to pull in the remote environment. If you did, it will take a long time to pull that image for each dev that wants a copy.
So how do you get useful data-rich instances into cloud development environments?
Going all-in with production-like databases
Spawn is the perfect companion for tools like Gitpod. It lets you provision copies of databases in the cloud instantly regardless of size. Those instances are reachable from anywhere with an internet connection. You don’t have to worry about any of the details of running those instances.
That means you can provision a Gitpod environment with all of your code and development environment configured, and then instantly provision a production-like database in seconds to support that GitLab environment. This can happen for every developer in their Gitpod environment so they get an entirely isolated copy of the dataset just for them.
Even better is that if you restart your Gitpod environment, your database will be left unaffected. Since the databases are running outside of the Gitpod environment, you can throw away your Gitpod environment, start up a new one and continue exactly with the same data you had before.
We’ve got an example of this in action in the spawn-demo repository on GitHub. Give it a try for yourself by clicking the Gitpod badge in the readme! You’ll first need to sign up to Spawn, so visit the Spawn Homepage to get started.
We’re really excited about the potential of entirely remote development environments coupled with the superpowers offered by Spawn. Spin up 200GB+ databases instantly. Make arbitrary save points as you go, and quickly reset to known-good states after mistakes. Get instant copies for each feature branch you’re working on. Don’t worry about installing and running database servers on your machine. Even better — all of this is free to try out right now.
Spawn isn’t just great for entirely remote development environments. It also fits in really well with “more traditional” development practices. Check out the Spawn website to learn about why you should be using Spawn to make development even better anywhere.
Originally posted on the Spawn blog.