Every day I wake up and ask myself what is a software development environment
Here I am, without my van, on the opposite side of the world, sitting at IHOP in Austin, Texas, and the story of how I ended up here is a strange one. It has now been just over a month since I left Gitpod, a company I thought I would be with for a very long time...
and I wouldn't be here where I am in Austin, Texas, without Gitpod. Back in June, the CEO of Gitpod tasked me with investigating another company called Coder which recently launched a new remote development product offering...
and I liked what I saw so much that I knew I needed to part ways with Gitpod because Coder's go-to-market approach made much more sense to me as in this economic climate, enterprise companies want a singular tool that works for all software development scenarios - including windows desktop development, macOS mobile development, and data science (ie access to beefy GPUs).
integrate don't dictate
The key to winning the valuable enterprise market is to integrate with how enterprises currently work, minimise the amount of people/process change required and thus de-risk the political costs for a products internal advocate.
Gitpod is designed to run in Kubernetes, which constrains their product offering to software developers who use containers, and I don't think this is the right approach. Coder's original product offering was similar to Gitpod - shipping a Kubernetes-based solution on-prem - but Coder's new offering is a game changer.
Instead of dictating a way of work (reproducible ephemeral development environments) that involves people change and constraining software development scenarios to only what is possible via docker containers, Coder integrates with enterprises existing investments in Terraform.
By leveraging Terraform, Coder lets developers run any IDE on any compute platform, including on-prem, VMWare ESXi, AWS, Azure, GCP, DigitalOcean, Kubernetes, Docker, and more, with workspaces running on Linux, Windows, or Mac.
Coder consists of two parts: a command line application and a provisioner portal that is self-contained within the CLI. You can take Coder for a spin via
# install the coder CLI
$ curl -fsSL https://coder.com/install.sh | sh
# launch the provisoner portal
$ coder server
Coder v0.9.2+cb62e16 - Remote development on your infrastucture
Using built-in PostgreSQL (/Users/ghuntley/Library/Application Support/coderv2/postgres)
View the Web UI: http://127.0.0.1:3000
2022-10-07 15:53:47.567 [INFO] <./provisioner/terraform/serve.go:102>
==> Logs will stream in below (press ctrl+c to gracefully exit):
or as a docker container
$ export CODER_DATA=$HOME/.config/coderv2-docker
$ export DOCKER_GROUP=$(getent group docker | cut -d: -f3)
$ mkdir -p $CODER_DATA
$ docker run --rm -it \
-v $CODER_DATA:/home/coder/.config \
-v /var/run/docker.sock:/var/run/docker.sock \
--group-add $DOCKER_GROUP \
ghcr.io/coder/coder:latest
Once the self-service portal is running, software developers can create workspaces from templates authored by the template administrator. In the enterprise scenario, these templates would most likely be co-authored by the SRE team responsible for maintaining production infrastructure under configuration management via Terraform.
By reutilising existing, proven industry standards such as Terraform, enterprises can provision an exact copy of production infrastructure for each developer.
Workspaces on Coder go beyond compute. There are over 2000+ Terraform providers in the world right now which can be wired in as a development environment dependency. With Coder, template administrators can specify which tfvars
developers can configure (ie. deployment region) whilst enforcing tfvars
that cannot be changed (ie. firewall ACLs)
which looks like this behind the scenes...
variable "zone" {
description = "What region should your workspace live in?"
default = "us-west-2"
validation {
condition = contains([
"ap-northeast-1",
"ap-northeast-2",
"ap-northeast-3",
"ap-south-1",
"ap-southeast-1",
"ap-southeast-2",
"ca-central-1",
"eu-central-1",
"eu-north-1",
"eu-west-1",
"eu-west-2",
"eu-west-3",
"sa-east-1",
"us-east-1",
"us-east-2",
"us-west-1",
"us-west-2"
], var.region)
error_message = "Invalid region!"
}
}
and over at https://github.com/denbeigh2000/coder-templates/tree/master/aws-spot-nixos you'll find an example of a full-blown workspace template.
a change in perspective
I still think reproducible developer environments are indeed a sleeper technology that’s going to ramp up for a decade in usage until, one day, everyone will be “behind the times” if they’re not already using them. Still, my viewpoint on the definition of what a development environment is has changed.
a development environment is the entire ecosystem of development dependencies required to develop an application
That means all dependencies, including the configuration of cloud compute (see below for a deployment graph of what a customer of Coder does as a bare-min on a per developer basis), identity providers and database-as-a-service offerings...
and that change of perspective is the other reason why I moved on. I'll be at Kubecon North America in a couple of weeks and am available if folks wanna pick my brains further or catch up for beers. Thanks for reading :)
ps. If you work at a company whose product offerings can be defined via a Terraform provider, I would love to work with you on collaborations and partnerships. Email me at geoff@coder.com or DM me on Twitter 💜