Slack
Slack logoSlack · Feature trail

Slack Connect Configuration Management

2 posts · Aug 2018 – Nov 2023

What this trail covers

This thread tracks the evolution of Slack Connect's configuration management system. Initial posts detailed the scaling problems and the need for per-connection customization beyond simple auto-approvals. This post details the backend solution, including a new database schema for storing flexible preferences (using Protobuf blobs), an evolved application layer with wrapper classes for isolated and extensible pref handling, and a denormalized data store (Solr) for efficient administration APIs. This post details the re-architecture of workspace preferences from a JSON blob in the workspaces table to an Entity/Attribute/Value (EAV) model using Vitess. It covers the creation of the new data model, migration strategies including double-writes and backfill scripts, and a gradual transition to accessing data from the new table with dark mode and light mode reads. It also details the generation of getter functions for individual preferences to improve type-safety and efficiency, and the change in caching strategy to cache individual preferences instead of the entire workspace object.

All Slack trails