It's time to forget what you think you know about remote development
Tags: devops, webdev, programming, cloud
Published: 2022-12-05 18:56:24

Over the past few years, more and more companies have migrated to remote development environments for their engineering teams. With the advent of the cloud, developing remotely provides numerous benefits over local development. While local development is still the predominant way of writing software, it is only a matter of time before remote development makes it a thing of the past, and for a good reason. Cloud development environments save time and money, prevent the “it works on my machine” problem, increases code quality, mitigates context-switching headaches, and provides better consistency between development and production.


## Cloud development environments are the future

Remote development is in a similar place that the cloud was in several years ago. These days, the cloud is ubiquitous. Remote development is next. 

We are not the only ones who believe this, as large companies like [Google](https://cloud.google.com/products/tools), [Microsoft](https://azure.microsoft.com/en-us/products/deployment-environments/#overview), and [JetBrains](https://www.jetbrains.com/remote-development/) continue to invest heavily in cloud development environments. Companies like [Slack](https://slack.engineering/remote-development-at-slack/), [Shopify](https://shopify.engineering/cloud-load-modular-code-shopify-2022), [Meta](https://twitter.com/gwenshap/status/1533956840240779264?s=20&t=FBNMNXzv8v6vwAdSzkTxDw), and [Tesla](https://twitter.com/charmcgi/status/1534182983837618176) are investing in cloud development environments for their engineers because the costs and benefits far outweigh local development.

“At Slack… Engineers would no longer have to maintain code or dependencies on their local laptops. They could get a fresh isolated environment on demand, ready to be used within a couple of minutes.” - [Source](https://slack.engineering/remote-development-at-slack/)


![Coherence Workspace](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rntjk6f0s74ti2wxgyo.png)
## The dreaded "it works on my machine" problem

Developers often work with various operating systems, tools, software, and dependencies in multiple versions and states. Trying to maintain consistency across unique machines only leads to headaches and frustration. Remote development solves this problem because every development environment is the same. 

The cloud is the environment. 


## Remote environments save time and money

"New hires can go from zero to a functioning development environment in less time than it takes to install Slack" - [Source](https://github.blog/2021-08-11-githubs-engineering-team-moved-codespaces/)

Developers spend significant time maintaining their local development environments, often spending several hours, sometimes days, updating, maintaining, and debugging their machines.

As an application grows and becomes more complex, it will consume more resources like CPU and RAM. With cloud development environments, you can upgrade every engineer's machine with a single configuration change in seconds! Otherwise, you have to buy every engineer a brand-new laptop. How much will that cost?

"I've seen engineers lose hours or even days debugging local development environment issues. It's even worse when starting a new job. There's little more disappointing and disempowering than to excitedly begin your job and then get stalled because you can't get your local development environment working. Every company should aim to get their developers as productive as quickly as possible. How long does it take a brand new developer to get code in the hands of customers when they start at your company? Is it measured in months, weeks, days, or hours?." - [Source](https://github.com/readme/guides/developer-onboarding) 


## Cloud development environments increase code quality

Developing in the cloud improves code quality and produces fewer bugs.

When a developer is reviewing code they look at the difference between the current state of the application versus their changes. Seeing these differences is vitally important, but there is another crucial step that most skip; pulling the code down onto their machines, to ensure the code works. Most of us ignore this critical step because it is often too painful and time-consuming.

The developer performing the code review is most likely working on their feature, fixing a bug, or doing something completely unrelated to the code under review. They would have to save their code changes, switch contexts, and get their local development environment in the same working state as the code under review. This means pulling down the code under review, installing packages, libraries, version updates, etc., a recipe for [yak shaving](https://americanexpress.io/yak-shaving/). With cloud development environments, developers can review code in the same environment that the code was written in. 

No more yak shaving!


## Effortless context switching

Everyone knows context switching is wrong but let's be honest with ourselves; it happens all the time. A developer can be working on a feature, suddenly open a new environment to fix a bug, and even open a third environment for code review. We are not suggesting that context switching between three different contexts is a good idea, but context switching does happen more often than we like to admit, and it is effortless when developing in the cloud. 


## One operating system to rule them all

Another thing to consider is that cloud development environments run on top of a single operating system. Local developers could use Mac, Windows, or various Linux distributions. Even if they use the same operating system, that does not necessarily mean everyone is running the same version. In remote environments, everything is the same, including the operating system. Your developers also benefit from developing on the same operating system used in production, providing a narrower gap between dev and production.


## Common objections and pushback

Developing remotely in the cloud is not ideal for every situation or team as there is still more work to be done for it to completely replace local development. Here are some common objections and pushback developers have when it comes to developing remotely.


### Remote environments are slower than my local environment

Developing remotely in the cloud is typically slower than local development. Many factors, like network speeds, internet connection, and latency, contribute to this. One of the key trade offs regarding speed is the ability to spin up fresh environments quickly, per branch, without the need to maintain local environments.

Remote environments are also becoming faster with technology like edge computing. 

“But surely you can see that the latency question is a question of letting the Moore's law equivalent of cloud commoditizing infrastructure take its course.” - [Source](https://dx.tips/the-end-of-localhost#heading-the-potential-of-edge-compute)


### What if I need to work offline?

If a developer regularly works offline, cloud development is not a great option, as remote environments require a fast internet connection. However, in practice, this is rarely an issue. Most developers are constantly connected to the internet as they rely upon it to do their jobs. 


### I don’t want to use/learn another IDE

Developers are often very opinionated and particular, especially regarding their development environments. Many have custom key bindings, aliases, shortcuts, extensions, and themes, all finely tuned and configured on their machines. They have gone to great lengths to painstakingly set up and configure their IDEs to their exact specifications and liking.

Many IDEs, like [VSCode](https://code.visualstudio.com/docs/remote/remote-overview), allow developers to access cloud environments from their local machines remotely. Developers can develop remotely in the cloud using the same setup on their local machines. In this way, they get the best of both worlds. 


## Coherence workspaces

At [Coherence](https://www.withcoherence.com/), we are excited to help create this paradigm shift in software development. Our [workspaces](https://docs.withcoherence.com/docs/reference/workspace) are an integral part of our [software development life cycle](https://docs.withcoherence.com/docs/reference/sdlc-workflow). Workspaces are ephemeral VSCode instances (we also support Emacs and VI) that are created automatically for every branch. In addition to remote development environments, we also provide managed Infrastructure as Code, managed CI/CD, shareable preview environments per branch, staging environments, and one-click deployments to production.

We use Coherence to build Coherence, and we can't imagine ever spending the time, money, and resources necessary for local development again. As a startup, we must move at breakneck speeds without compromising our burn rate. Developing remotely in the cloud feels like a secret weapon since we take all the time and money we are saving to focus on delivering value and differentiating ourselves from the competition.

{% youtube sJLeOnKbrec %}

If you are interested in trying out Coherence, you can try one of our [sandboxes for free](https://app.withcoherence.com/?signup=true).

You can also check out [our docs](https://docs.withcoherence.com/) to learn more.


## Conclusion

Remote development will revolutionize software development. The benefits of cloud development far outweigh those of local development. It saves time and money, prevents the “it works on my machine” problem, increases code quality, mitigates context-switching headaches, and provides a consistent environment between development and production. With these many benefits and more, it is hard to justify writing software locally ever again. 

It is only a matter of time before local development becomes a thing of the past.