The Guide to Cloud Environments
Tags: programming, cloud, devops, productivity
Published: 2022-09-26 23:28:17

## Developing on Cloud Environments

Cloud development is more relevant than ever. It’s a more secure and scalable way of developing that lets your development and IT teams overcome any environment related disruption. For example, you can support the latest chips (e.g. Apple silicon) or fan out the secure and stable version of a tool or dependency with the click of a button. These flexible and dynamic environments bring consistency, resilience, and security while improving the developer experience.

That's why all the big companies are using cloud dev environments. Shopify built one to [support their exponential growth](https://shopify.engineering/shopifys-cloud-development-journey). LinkedIn moved to the cloud and increased productivity with [faster builds](https://engineering.linkedin.com/blog/2021/building-in-the-cloud-with-remote-development). Slack uses [EC2 instances to run their application and its infrastructure for development](https://slack.engineering/development-environments-at-slack/#:~:text=Slack's%20dev%20environments%20are%20copies,many%20services%20it%20depends%20on.). Palantir [moved their development to the cloud](https://blog.palantir.com/the-benefits-of-remote-ephemeral-workspaces-1a1251ed6e53) to help developers deal with their complex enterprise environments.

Let’s look at cloud dev environments and see how they can help you.

## What Is a Cloud Dev Environment?
A dev environment is where developers get their work done. It’s where code becomes software and has typically been set up and maintained by every developer on their local machine (e.g. laptop, PC, etc.). 

The differences within each developer’s dev environment in a team and against other environments (e.g. production) have been a nuisance for developers since the dawn of time. Technologies, like Docker, have come out to help bring greater consistency between developers and environments.
 
A cloud dev environment takes this workspace off of developer laptops and moves it into the cloud. This changes how developers work as these cloud environments differ from local environments in many important ways.

## How Do Cloud Dev Environments Differ From Traditional?

### No Development on Local Systems

With a cloud dev environment, all your development moves off local systems. This fundamental change in how developers work yields many benefits.

When talking about cloud architecture, engineers often refer to having "cattle, not pets." It’s a reference to treating cloud systems as being both standardized and disposable: when a cloud system fails, another identical copy can seamlessly take its place.

When you shift to a cloud dev environment, you copy this philosophy from production and introduce it to development. Instead of building and testing code on laptops that are closer to pets than cattle, your developers work on systems that look as much like production as possible, while still being useful for development.

### No Configuration Drift

So, there’s no configuration drift. Your development and production systems stay in sync since they're both managed in the cloud.

When developers work locally, a lost or broken laptop is a disaster. Even a minor configuration issue can lead to hours of stress, frustration, and lost productivity.

When a cloud development environment fails or breaks, you destroy it and create a new one in minutes. Here again, treating dev environments as “cattle” instead of “pets” make your infrastructure more robust and easier to maintain. 

As a bonus, your laptops require less configuration and maintenance, too. If a developer’s laptop fails, they're back online in minutes with a replacement system.

### Improved Security

The shift from local systems to cloud improves your security posture, too. A laptop with your tools and code installed is an attack vector. If it's compromised or lost, attackers can steal valuable secrets. This threat is diminished, if not eliminated, with cloud development environments since the laptop is only an access path.

### Enable Collaboration

Local systems tend to become silos. A developer works alone on their "pet" until they're ready to push their code. Only then do they share their work and can collaboration begin, if at all.

Cloud dev environments enable collaboration because no one "owns" a system, and it’s easier to move from one cloud system to another. Developers can easily troubleshoot, share progress with other teams, work together on features, or push code from a shared repository.

### Increased Productivity

Unlike a local system, you can size a cloud system for the task at hand. If you need a more powerful system to reduce build times, you create it. And, since it's in the cloud, you can shut it down or delete it when you’re finished.

Sizing systems appropriately also makes it easier for developers to switch contexts (e.g. switch branches) when they finish working on one issue and need to move to another.

Cloud environments also save engineers time by eliminating environment setup and troubleshooting, enabling faster feedback, and broadly improving the computing experience while developing (e.g. longer laptop battery life, cooler machines, better data transfer speeds).

### Scalability and Streamlined Environment

Scalability is one of the many reasons teams move to the cloud. As companies grow, the product will also grow in complexity and size - development environments need to keep pace. 

Most companies will eventually use the cloud in some part of their development workflow as they scale - and apart from the efforts of change, there's no reason you shouldn't take advantage of it in development. For example, some teams have used cloud environments to avoid building and maintaining additional UAT or staging environments that mirror production. Instead, they use cloud development environments for integration and performance testing as needed.

### Benefits for Engineers and Engineering Managers

The technical advantages that cloud dev environments provide you with translate into business and management bonuses too.
First, local environments for your developers only need to reach the cloud environment and support business applications like email, calendar, and online meetings. They're cattle now, too. You no longer need to provide access to a local development environment.

Securing developer environments is simpler now, too. Instead of providing access to the local environment in offices, you can manage it from the cloud, regardless of where your developers sit.

This location independence provides you with many benefits beyond simplified security. Your hiring pool expands since you can support developers from anywhere that can reach your cloud. You can also support them if they move to a new home or want to travel.

Cloud dev environments scale with your teams, similar to how they scale for your products. Developers working on local systems have limited resources and limited control, while cloud teams can control and work together on systems more easily.

Teams have more flexibility and choice over their cloud dev systems, too. It's easy to build a cloud instance with an alternative OS version, package set, or hardware configuration. This gives them the power to experiment with new configurations while keeping the ability to quickly revert to the norm.	
		

## When should you NOT use Cloud Dev Environments?

While cloud dev environments have myriad benefits and advantages, they're not the best option for every development team.

- Small teams (2 to 3 engineers) might not see the financial and organizational benefits of moving to the cloud.
- Developing for mobile devices is not often cloud friendly. Typically, this requires local access to mobile devices, simulators and proprietary environments that don't work well in the cloud.
- Developing games and other applications that require cutting-edge GPUs don't work well in the cloud. Your choices are often limited to what the public cloud providers offer.
- Developers working in areas without internet connectivity. Though cloud environments are great for those with slow internet speeds, a stable connection is still needed.

## How Do I Create a Cloud Dev Environment?

There are many ways to build a cloud dev environment and the differences are largely driven by the size, scale, and distribution of an organization, as well as its tech stack. Let’s look at the two most common scenarios.

### Individual Developers

For an individual developer, scalability is less of an issue. They can work alone on a single cloud system, whether it's a dedicated host or a virtual machine. If they need to run tests that span multiple systems, such as a dedicated database engine or a message broker, they can create what they need, do the work, and destroy the extra systems.

Location is less of an issue too since they can pick the cloud region closest to them and build their dev environment there.
There are a number of great resources out there to learn how to build a cloud dev environment. We’ll list a few here: 
- [Remote development, or: How I learned to stop worrying and love the Mainframe by Marko Mitranić](https://medium.com/homullus/remote-development-or-how-i-learned-to-stop-worrying-and-love-the-mainframe-90165147a57d)
- [Creating/Securing a Remote Dev Environment by Blake Khan](https://dev.to/blake/creating-securing-a-remote-dev-environment-3558)
- [Setting up a Remote Development Environment with Google Chrome and DigitalOcean - Karl Hughes](https://www.karllhughes.com/posts/remote-development-environment)

### Development Teams

Building a cloud dev environment for a team is more complicated. With more than one developer, issues like security, locations, scalability, and performance are a greater consideration.

More than one developer means more than one system, since your environment needs a mechanism for synchronizing your configuration across multiple hosts. It also means that you'll need tools for collaboration between developers, too.

Each additional developer means a new set of access credentials and represents a new security vector, so security is more of a concern than it is with a single developer. You're probably going to want to integrate the dev environment with SSO that ties into your existing IT infrastructure.

If you're supporting a large team, there's a good chance your environment needs to be global, too. This means providing team members with access to shared resources from more than one location, with acceptable performance.

So, you'll need to cluster, synchronize, or scale your source code control, CI/CD pipelines, database servers, and other shared services across each region.

Depending on the regions you need to cover, optimizing performance may require supporting more than one cloud provider in order to provide the best performance.

Not only is building a cloud dev environment solution for teams complex, but it’s also incredibly important because environments are critical infrastructure. If your environments aren’t working, the ENTIRE team is blocked - and there’s no greater fear for any development team. Given this - we don’t recommend following any online guide. Rather, go with a trusted provider (Nimbus, Github Codespaces, or Gitpod) or build a team of experienced infrastructure developers to create a customized solution for your specific team and org.


## Shift to a Cloud Dev Environment
In having delivered cloud environments from companies with less than 10 engineers to those with over 1000, we’ve learned that the benefits are often underestimated. Cloud environments provide a better developer experience with more power and flexibility. 

Cloud dev environments change how developers design, build and test code. It lets them use the device of their choice, onboard in seconds, and work from wherever they want. And it also makes it easier for teams to support developers, secure the codebase, and scale globally in ways that weren't possible before.

It’s the future of software development - try it out if you haven’t already!