Adopting Remote Boxes for Development

We recently started using cloud machines running Linux across our development team. We call these ‘code boxes’. Reasons for using remote codes boxes:

  • Our codebase requires Linux. We tried using Linux as a desktop OS, but it was not a good experience. Using Mac or Windows WSL was not an option for reasons that deserve their own blog post.
  • Astradot is a fully remote company. Depending on where our engineer is located, getting a specific laptop configuration can be tricky since it may not be in stock at their location.
  • We wanted to be able to introduce new tools and configs and have them be available to everyone on the team instantly. As the number of tools we use grows, keeping everyone’s computer configured the same gets tougher. Not to mention it’s easy to run into ‘works on my box’ scenarios.

Third-Party Solutions

We looked at 3rd party solutions like Github Codespaces, Gitpod, etc. We felt these solutions were not ready for our needs.

  • The prime issue is that these solutions focused on spinning up a box for each repository individually. We wanted to be able to checkout as many repos as we wanted on the same machine.
  • Our custom ubuntu image is almost 10 GB in size. Waiting for a remote box to download an image that size each time someone wants to work on some code would slow us down.
  • The high hourly cost of boxes on these solutions compared to equivalent AWS instances assumes that the remote boxes are turned off for long periods of a day. We wanted our engineers to be able to keep their boxes up 24x7 without worrying about costs.

We realized that most of the work setting up a remote environment is in configuring the image with all the necessary tools and settings. This would need to be done by us regardless of whether we picked a 3rd party solution or not. Once the image is set up, spinning up AWS boxes to use them is so trivial that we didn’t see any value add of 3rd party solutions.

Letting go of Intellij…

This was the most painful part of adopting code boxes. We just had to let go of Intellij. Jetbrains’ remote solution 'Jetbrains Gateway' is simply too buggy at this point to be used for professional development. We had to adopt VSCode. It works seamlessly with remote boxes. VS Code is good enough now that we don’t miss Intellij too much.

Results

Using remote boxes has drastically improved our development process.

Being able to use Windows/Mac as desktop OS instead of Ubuntu Linux has been a breath of fresh air. We no longer have to worry about sourcing the right equipment for a new employee. Even onboarding is sped up since one doesn’t need to spend time configuring their PC. Trying out new tools and settings is easy. If something messes up, we can easily spin up a new box for them instantly. Upgrading someone’s box if needed is instant, while previously we would have to ship them a new computer. Need to see if code runs on ARM64 instances? Just spin up a dev box on that instance and code directly on it! I still miss Intellij from time to time. Hopefully, Jetbrains Gateway will improve enough in the future that we can replace VS Code with it.