Deploys at Slack

Getting a peek into an engineering organization's deploy process is always an interesting exercise. With Slack, it's no different. The process today is straightforward.

  1. Create a release branch to tag the Git commit and allow developers to push hotfixes (if required).
  2. Deploy to a staging setup which is a production environment that doesn't accept any public traffic.
  3. Phased roll-outs to canary servers. This is tightly coupled with monitoring to see any spikes in errors.

Some of the core principles for such a process are:

  • Fast deploys. All the deployments are pull-based instead of push-based. The build server updates a key in Consul which in-turn pings N servers to pull the latest code.
  • Atomic deploys. During deployment, a "cold" directory is created that pulls in new code. The server is then drained of any traffic and a symlink switches between the "hot" and "cold" directories.
  • Phased roll-outs lend a lot of confidence towards reliability as it allows teams to catch errors early with lesser impact.

Full post here, 6 mins read