The Slack internal tools team recently talked about utilizing remote development environments in their application development workflow. By January 2022, over 90% of engineers had started using the remote development workflow at Slack, which lead to an increase in developer productivity.
Sylvestor George, staff software engineer at Slack, discussed the team's journey in a recent blog post. Slack uses Hack as the programming language for its backend. The earlier development workflow consisted of running HHVM directly on macOS. HHVM upgrades, Homebrew related issues caused an overhead and impacted engineer productivity. As their first iteration, the internal tools team used local docker images to run the application with HHVM, keeping copies of the application on remote servers.
Through the Remote Development Environments Project, the team gathered data that created the goal of enabling engineers to write code without the local setup overhead and its associated maintenance. Enhancing Slack’s internal CLI tools, engineers can now use one command to reserve a development environment, attach their branch to that environment, install any new dependencies and open a local VSCode instance with desired settings and extensions.
Source: Remote Development at Slack
Several development environments are available for engineers using AWS Auto Scaling Group. When engineers reserve a remote environment using the command - slack remote-dev -b <branch-name> - the environment is set up to use VSCode’s remote SSH extension and develop remotely. These environments have full IntelliSense, code navigation, and debugging. Also, these environments allow for custom extensions, scripts, bash profiles, git config, aliases, and VSCode Settings as per the engineer’s preference.
Source: Remote Development at Slack
Once the engineer detaches from a development environment, the underlying instance is automatically terminated. If the branch associated with the working environment is merged, the environment is automatically detached and terminated.
Lately, we have seen the reproducible development environments getting new hires started in an hour instead of days, making "devcontainers" a regular part of one’s development workflow. At Slack, a new hire's setup time was reduced from an hour to a few minutes.
There is an increase in traction with cloud-based development environments like Gitpod, Amazon Cloud 9, JetBrains Space, and GitHub Codespaces.
The remote development environments at Slack initially used C5.2xlarge (8 core, 16 GB RAM) instances. When the team realized the environments were insufficient for the workload, the instances were upgraded to C5.4xlarge (16 core, 32 GB RAM) with a single configuration change. Such flexibility to upscale the instance specification as per the need without needing to replace the laptop added to the overall benefits of remote development environments.
The remote development flow was generally available in October 2021, with 30% of engineers already switching to it in the beta release. The team conducted internal surveys to get feedback and found positive responses, enabling further spreading of word of mouth.