Blogs
Slack logo

Slack

Engineering blog · slack.engineering

157posts0this week0watchers

Feature trails

64
Feature trailActive

EC2 Platform Evolution

This thread tracks the evolution of Slack's infrastructure management, focusing on the use of Terraform and network architecture. Initial posts detailed foundational architecture and challenges with single AWS accounts. This post details the "Shipyard" platform, a next-generation EC2 platform that treats infrastructure as deployable artifacts rather than mutable instances. It brings modern deployment practices like immutability, progressive rollouts, and automated safety directly to EC2 instances, supporting multi-architecture and multi-OS, metrics-driven deployments with safety controls, fast and predictable provisioning via layered images, simplified configuration management by shifting from continuous enforcement to image baking and provisioning, real-time inventory and fleet visibility via the Peekaboo system, and short-lived, continuously refreshed instances. The platform uses a shared "slack-zero" base image built with AWS Image Builder and service-specific images built on top, separating instance preparation into baking and provisioning phases. Deployments are handled through controlled replacements using AWS Instance Refresh and Karpenter, with emergency fixes managed via AWS Systems Manager.

12 posts · 2020–2026

Timeline

20202026
Feature trailActive

AI-Powered Developer Tools

This thread tracks the evolution of AI-powered developer tools at Slack, aimed at saving engineering time and improving workflows. Initial posts detail the development of a Slack bot for resolving escalations, leveraging LLMs for post classification and internal knowledge integration via Amazon Bedrock Knowledge Bases. Subsequent posts cover the development of custom AI assistants within Slack, a web application for advanced AI agent interaction, IDE integrations for AI assistance, and the exploration of AI agents for security investigations, breaking down complex tasks into sequential model invocations with structured outputs and distinct persona agents (Director, Expert, Critic) to improve control and consistency.

4 posts · 2024–2026

Timeline

20242026
Feature trailActive

Enterprise Key Management (EKM)

This thread tracks the evolution of Slack's Enterprise Key Management (EKM) system, enabling customers to control the encryption keys for their data. Initial posts detail the design and implementation of EKM, allowing organizations to bring their own encryption keys (initially via AWS KMS) to encrypt and decrypt their data within Slack. This includes granular control through scopes (Organization, Workspace, Team, Hour, File) and integration with AWS KMS for key management. The system also addresses the challenges of multi-cloud orchestration for LLM serving, moving from SageMaker to Bedrock Provisioned Throughput, and then to Bedrock On-Demand with a hybrid routing strategy to balance performance, cost, and agility. The evolution includes managing LLM model access, infrastructure efficiency, and engineering for resilience through model hierarchies and regional routing.

2 posts · 2019–2026

Timeline

20192026
Feature trailActive

Spark and EMR Upgrade Journey

This thread tracks the evolution of Slack's data workload migration and performance optimization efforts, specifically focusing on upgrades to Spark and AWS EMR. Initial posts detail the challenges and strategies involved in migrating from older versions (EMR 5/Spark 2) to newer ones (EMR 6/Spark 3). This post details the migration of over 60 EMR clusters and thousands of Airflow DAGs from EMR 5.3x (Spark 2.x/Hive 2.x) to EMR 6.x (Spark 3.x), including Hive Metastore upgrade, EMR cluster provisioning, and the elimination of SSH-based job submission by migrating to a REST-based architecture using YARN Distributed Shell and Slack's Quarry gateway. This migration significantly improves security, reliability, and enables further infrastructure modernization.

7 posts · 2016–2026

Timeline

…20172026
Feature trailActive

Nebula overlay network

This thread tracks the evolution of Slack's networking infrastructure, focusing on secure and scalable inter-computer connectivity. Initial posts detailed the challenges of managing complex networks across multiple cloud providers and regions, leading to the development of Nebula, an open-source overlay network. Nebula provides encrypted, performant, and secure connections between hosts, abstracting away IP address complexities and enabling fine-grained traffic filtering based on host identity. This post details the integration of HTTP/3 support into Prometheus Blackbox Exporter, enabling network probing of HTTP/3 endpoints and providing client-side observability for QUIC-based protocols. This was achieved through an open-source contribution and an in-house system, leading to operational improvements like a unified view of HTTP metrics and more reliable alerts.

2 posts · 2019–2026

Timeline

20192026
Feature trailActive

Notification Tracing

This thread tracks the evolution of Slack's notification system, focusing on improving completeness, reliability, and debuggability through end-to-end tracing. Initial posts detail the challenges of complex notification flows and the need for standardized data formats. This post details the foundational work to implement a tracing system for notifications, modeling each notification as a separate trace linked to the original message trace. This enables 100% sampling for notification flows, leading to a unified notification model across desktop and mobile with simplified preferences (All new posts, Mentions, or Mute) and decoupled push controls. The system now offers consistent state across clients, improved user control, and a significant reduction in support burden. Data shows a 5x increase in settings engagement and higher usage of push notification toggles, indicating users feel more in control and less overwhelmed.

5 posts · 2017–2026

Timeline

20172026
Feature trailActive

Android Accessibility Improvements

This thread tracks the evolution of accessibility improvements on Slack's Android application. Initial posts detail the identification and resolution of various accessibility issues identified through a Voluntary Product Accessibility Template (VPAT) process. This includes addressing inaccessible error messages, missing heading identifications, inaccessible edit fields, incorrect list item counts for screen readers, inaccessibility of drag-and-drop functionality in the workspace switcher, and is now expanded to include automated accessibility testing for the desktop application using Playwright and Axe Core.

4 posts · 2018–2025

Timeline

20182026
Feature trailActive

Build System Performance

This thread tracks the evolution of Slack's build system performance. Initial posts detailed the problem of slow builds (60 minutes) for Quip and Slack Canvas backends. This post details the foundational work to improve build performance by applying principles of caching and parallelization, similar to application code optimization. It introduces the use of Bazel and the necessary engineering work to ensure build units are idempotent, hermetic, and granular, leading to a significant reduction in build times. This post details the automation of a large-scale migration from Enzyme to React Testing Library (RTL) using a hybrid approach combining Abstract Syntax Tree (AST) transformations and Large Language Models (LLMs), achieving an 80% conversion success rate. It also covers the open-sourcing of the conversion tool.

5 posts · 2018–2025

Timeline

20182026
Feature trailCooling

Deploy Safety Program

This thread tracks the evolution of Slack's Deploy Safety Program, aimed at reducing customer impact from changes. Initial posts detail the program's inception, defining the problem of change-triggered incidents, establishing North Star goals for reducing impact time and severity, and introducing the Deploy Safety metric. This post details the foundational architecture for deploying code, including the evolution from simple rsync to a parallel pull-based system and the introduction of atomic deployments and automatic rollbacks. It also covers the investment strategy, focusing on areas of known pain and iterating based on results, and highlights the significant reduction in customer impact hours achieved through these efforts.

5 posts · 2020–2025

Timeline

20202026
Feature trailCooling

Anomaly Event Response

This thread tracks the evolution of Slack's Anomaly Event Response (AER) system, a proactive defense mechanism designed to automatically identify and respond to suspicious user activities in real-time. Initial posts detail the foundational architecture, detection mechanisms, and response capabilities of AER, focusing on compressing the detection-to-response window from days/hours to minutes. This post details the system's design philosophy, focusing on common threat types like Tor access, excessive downloads, and unusual user agents, and provides guidance on correlating and aggregating anomalies for deeper security insights. It also elaborates on the UI for investigating audit logs and anomalies, and the ability to terminate user sessions.

5 posts · 2020–2025

Timeline

20202026
Feature trailCooling

Enterprise Search and External App Integration

This thread tracks the evolution of Slack's enterprise search capabilities, focusing on secure and private integration of external application data. Initial posts detail the foundational architecture for securely surfacing content from sources like Google Drive and GitHub directly within Slack's search and AI Answers. Key principles include data isolation within Slack's trust boundary, no training on customer data, operating only on user-visible data, and seamless integration with existing compliance offerings. This post details the architecture for Slack AI, emphasizing how customer data is kept within Slack's trust boundary, LLMs are not trained on customer data, AI operates only on user-visible data, and enterprise-grade security and compliance are upheld. It highlights the use of AWS escrow VPCs for hosting foundational models and Retrieval Augmented Generation (RAG) for stateless, context-aware AI operations.

2 posts · 2024–2025

Timeline

20242026
Feature trailCooling

Jenkins to GitHub Actions Migration Automation

This thread tracks the evolution of Slack's CI infrastructure migration from Jenkins to GitHub Actions. Initial posts detail the challenges with Jenkins and the strategic decision to move to GitHub Actions. This post details the development and implementation of an AI-assisted conversion tool to automate the migration of Jenkins pipelines to GitHub Actions, significantly reducing manual effort and migration time. It covers the use of GitHub's importer tool, custom Python scripting, and LLMs for replacing rate-limited actions with internal mirrors and substituting specific actions like rtCamp/action-slack-notify with Slack's internal messaging action.

4 posts · 2021–2024

Timeline

20212026
Feature trailCooling

Chaos Engineering Program

This thread tracks the evolution of Slack's Chaos Engineering program, aimed at proactively testing and improving the resilience and fault tolerance of its systems. Initial posts detail the inception of the 'Disasterpiece Theater' process, focusing on safe, regular, and approachable testing of critical systems in production. This includes detailed planning, tabletop exercises, and phased rollouts from development to production environments. This post details a specific exercise where a development Kibana cluster was intentionally failed to test backup and restore processes, leading to improvements in runbooks, alerting, and automation of the backup/restore tooling. A subsequent test involved migrating a Kibana instance to Kubernetes and testing the improved backup script.

1 post · 2019–2024

Timeline

20192026
Feature trailCooling

Astra Dynamic Chunks

This thread tracks the evolution of Slack's Astra log search engine, focusing on optimizing storage and cost efficiency. Initial posts detailed the problem of fixed-size log data chunks leading to wasted disk space and increased infrastructure costs. This post details the redesign of Astra's chunk management system to implement dynamic chunk sizing. The changes involved modifying the Cluster Manager and Cache nodes to utilize bin packing algorithms for more efficient allocation of cache node capacity, reducing cache node requirements by up to 50% and overall cache node costs by 20%.

2 posts · 2023–2024

Timeline

20232026
Feature trailQuiet since 2024

Asyncio Runtime Migration

This thread tracks the evolution of Slack's Python runtime migration to asyncio. Initial posts detailed the project's inception in 2020, aiming to replace a custom runtime with the standard Python IO library. The migration proceeded smoothly across most environments, with one notable exception on a large single-tenant cluster where sporadic timeouts occurred during spreadsheet exports to PDF under peak load. This post details the resolution of a critical bug related to TCP connection state management, which involved identifying and fixing incorrect implementations of `closed()` and `is_connected()` methods in the `AsyncioConnection` class. These fixes addressed issues where the system failed to recognize closed TCP connections, particularly when initiated by the other side (e.g., database proxies or RPC services), leading to `EOFError` or hung requests. The resolution of these issues unblocked the final stage of the asyncio migration, allowing for the deletion of the custom runtime scheduler.

1 post · 2024

Timeline

20242026
Feature trailQuiet since 2024

Unified Grid Architecture

This thread tracks the evolution of Slack's Enterprise Grid architecture towards a unified, org-wide view for users. Initial posts detail the challenges of a workspace-centric model with increasing multi-workspace usage. This post details the foundational re-architecture to an org-wide data model, including changes to API frameworks, data routing, and client-side storage to provide a single, unified view of user data across all workspaces within an Enterprise Grid. It covers strategies for migrating APIs and permission checks, including handling APIs that rely on workspace context, and the use of a prototype to validate the approach. The project became a foundational component of the IA4 redesign, with a two-phase approach to API migration and the development of tools to support the effort.

3 posts · 2017–2024

Timeline

20172026
Feature trailQuiet since 2024

Proactive Credential Exposure Detection and Rotation

This thread tracks the evolution of Slack's proactive security measures against credential breaches and cookie hijacking. Initial posts detail the foundational architecture for detecting and invalidating exposed tokens and webhooks. This post details the extension of these measures to include user passwords and session cookies, leveraging threat intelligence partnerships to proactively identify and reset compromised credentials before they can be misused. It also covers the nuanced approach to identifying session forking by comparing last access timestamps and IP addresses, and implementing a two-phased approach for updating session cookies to mitigate race conditions and false positives. The system now generates risk level assessments (low, medium, high) and logs high-risk events.

2 posts · 2024

Timeline

20242026
Feature trailQuiet since 2024

Kubernetes StatefulSet Rollout Operator

This thread tracks the evolution of Slack's custom strategies for rolling out stateful applications in Kubernetes. Initial posts detailed the creation of a simple Kubernetes admission webhook for tasks like supporting long-lived Pods. This post introduces the Bedrock Rollout Operator, a Kubernetes operator designed to manage StatefulSet rollouts with enhanced control. It addresses the limitations of Kubernetes' native 'OnDelete' and 'RollingUpdate' strategies for stateful applications, enabling faster percent-based rollouts, faster rollbacks, the ability to pause rollouts, integration with internal service discovery (Consul), and Slack notifications. The operator uses a custom resource named StatefulsetRollout and a re-enqueueing reconciliation loop for improved efficiency and resilience.

1 post · 2024

Timeline

20242026
Feature trailQuiet since 2023

Workflow Builder Custom Animations

This thread tracks the evolution of Slack's Workflow Builder, focusing on enhancing user experience through custom animations and improved drag-and-drop functionality. Initial posts detailed the introduction of a new sidebar for workflow steps and the challenges in integrating drag-and-drop from this sidebar into the workflow canvas. This post details the technical implementation of custom animations, including solving issues with the react-beautiful-dnd library, creating dynamic placeholders, resolving hint box spacing problems, and adding a tilt animation to dragged steps, ultimately creating a more friendly and approachable UI.

1 post · 2023

Timeline

20232026
Feature trailQuiet since 2023

Slack Connect Configuration Management

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.

2 posts · 2018–2023

Timeline

20182026
Feature trailQuiet since 2023

Reliable Cron Script Execution Service

This thread tracks the evolution of Slack's system for executing cron scripts reliably at scale. Initial posts detail the challenges of a single-node cron setup with growing script numbers and data volumes, leading to reliability issues and maintenance burdens. This post details the design and implementation of a new, more robust service. The new system comprises a Golang 'Scheduled Job Conductor' running on Kubernetes (Bedrock), leveraging Slack's existing Job Queue for asynchronous compute, an

3 posts · 2017–2023

Timeline

20172026
Feature trailQuiet since 2023

Edge Network Request Flow

This thread tracks the evolution of Slack's edge network and request handling capabilities. Initial posts detail the foundational architecture for routing user requests from globally distributed edge PoPs to Slack's main region in AWS us-east-1. This includes the use of DNS resolution strategies with Route53 and NS1, Network Load Balancers (NLBs) for traffic ingestion, and the distinction between websocket and non-websocket traffic flows. This post details the implementation of a system to analyze real-time control protocol (RTCP) feedback from users to generate accurate feedback about individual uplink/downlink quality in Slack Calls, leveraging Janus and WebRTC.

11 posts · 2016–2023

Timeline

…20172026
Feature trailQuiet since 2023

Service Delivery Index for Reliability

This thread tracks the evolution of Slack's Service Delivery Index (SDI) as a key metric for measuring and driving service reliability. Initial posts detailed the concept of SDI-R as a composite metric of API availability and user workflow success, its importance in transitioning from reactive 'hero engineering' to proactive reliability engineering, and its role in setting customer expectations and aligning teams. This post details the program's adoption, focusing on the visibility and accountability mechanisms, including leadership reporting and linking regressions to specific teams. It also covers scaling strategies through tools like the Webapp Ownership Tool and Omni, and organizational forums like the Engineering Monday Meeting. Lessons learned include the need to weight API requests by importance, the value of service-specific alerting for long-term maintainability, and the continuous evolution of metrics and processes to adapt to new products and infrastructure.

1 post · 2023

Timeline

20232026
Feature trailQuiet since 2023

Technology Lifecycle Management

This thread tracks the evolution of Slack's approach to managing the lifecycle of its internal infrastructure projects, from development and support to eventual retirement. Initial posts detail the challenges of managing a broad remit of infrastructure services, leading to duplicated effort and difficulty in retiring older technologies. This post introduces a six-stage lifecycle model (Alpha, Beta, Active, Maintenance, Deprecated, Retired) designed to standardize technology status, improve communication with engineering peers about support levels and future expectations, and provide a framework for controlled migration and retirement of technologies. The case study highlights how this framework facilitated the migration through three successive internal compute platform offerings (BuiltBySlack, Kubernetes-based platform, and a subsequent iteration), improving resource allocation and customer communication.

1 post · 2023

Timeline

20232026
Feature trailQuiet since 2023

Static Analysis Tooling

This thread tracks the evolution of static analysis tooling at Slack, focusing on improving code quality, security, and developer productivity. Initial posts detailed the adoption of Hack and the need for more advanced type checking. This post details the adoption of TypeScript for the desktop application's JavaScript codebase, enabling static type checking to catch bugs early, improve code maintainability, and enhance editor integration for better developer productivity. The team also implemented pre-commit hooks with TSLint and the TypeScript compiler to ensure code quality before commits and pushes.

4 posts · 2017–2023

Timeline

20172026
Feature trailQuiet since 2023

Android Non-Transitive R Class Migration

This thread tracks the evolution of Slack's Android build system, focusing on optimizing build times and APK size. Initial posts detailed the Duplo modularization effort and the migration to non-transitive R classes. This post details the extension of Anvil's code generation capabilities to automatically generate Dagger wiring code for Activities, reducing boilerplate and eliminating kapt dependencies. This further improves build times and developer experience.

3 posts · 2018–2023

Timeline

20182026
Feature trailQuiet since 2022

Recommend API

This thread tracks the evolution of Slack's recommendation capabilities, focusing on the development of a unified Recommend API. Initial posts detail the creation of this API, which provides a common framework for building and deploying various recommendation use cases across the product. The API reuses infrastructure for data processing, model training, candidate generation, and monitoring, enabling faster bootstrapping of new recommendation features. Subsequent posts will detail specific recommendation models and their impact.

1 post · 2022

Timeline

20222026
Feature trailQuiet since 2022

Remote Development Environments

This thread tracks the evolution of Slack's developer productivity tooling, focusing on the implementation and adoption of remote development environments. Initial posts detailed the challenges of local development setups, including dependency management, resource intensity, and cross-platform inconsistencies. This post introduces the Remote Development Environments project, which provides engineers with on-demand, isolated AWS EC2 instances for coding, testing, and debugging. The system leverages Chrome Tracing to diagnose performance issues in the Electron app and explores potential browser-based self-profiling APIs.

3 posts · 2019–2022

Timeline

20192026
Feature trailQuiet since 2022

Clips Background Effects

This thread tracks the evolution of Slack's Clips feature, focusing on enhancing video communication with background effects. Initial posts detailed the release of Clips and the addition of thumbnail selection and background blur. This post details the technical implementation of background blur and background image replacement for browsers and the desktop client, leveraging WebGL and WebAssembly for performance. It covers the use of the MediaPipe selfie segmentation model, bilateral smoothing, and specific techniques for achieving crisp edges in background replacement.

1 post · 2022

Timeline

20222026
Feature trailQuiet since 2022

Mobile Codebase Modernization

This thread tracks the evolution of Slack's mobile codebases, focusing on modernization efforts to improve app architecture, adopt industry trends, and lay the groundwork for future innovation. Initial posts detailed the Duplo initiative's goals of stabilizing, modularizing, and modernizing iOS and Android codebases. This post details the decision to move away from a shared C++ client library (Libslack) due to integration overhead and hiring difficulties, and the subsequent development of separate platform-specific codebases. LibSlack was designed to encapsulate common business logic and data handling, aiming for a 'LibSlack sandwich' architecture with platform UI on top, LibSlack logic in the middle, and a platform layer at the bottom for native capabilities. It focused on data caching, lazy loading, and offline functionality. The choice of C++ was made for its cross-platform compiler support and modern features. Djinni was used for generating cross-language headers, though it had performance costs and limitations with JavaScript. Development and debugging involved a reference client and a move to daily CI builds with source code integration for easier debugging. Unit tests achieved ~70% coverage and were gated on PRs, with integration tests also required. Future work included on-device performance testing.

8 posts · 2017–2022

Timeline

20172026
Feature trailQuiet since 2022

Continuous Load Testing Infrastructure

This thread tracks the evolution of Slack's load testing capabilities, focusing on enabling continuous load testing to proactively identify performance regressions and build a culture of performance. Initial posts detailed the development of load testing tools like Koi Pond. This post details the implementation of continuous load testing by ensuring clients are always running, integrating load testing into release cycles, and building safety and resilience into the platform. This includes features for load testing Enterprise Key Management (EKM) and the development of a standardized, accessible load testing tool in Go. The tool simplifies provisioning and execution, enabling any engineer to simulate load on APIs and track key metrics like error rates, latency, and database health. The project also emphasizes documentation and onboarding to foster wider adoption and contributions to the tooling.

4 posts · 2019–2022

Timeline

20192026
Feature trailQuiet since 2022

Flaky Test Detection and Suppression

This thread tracks the evolution of Slack's systems for managing and improving the reliability of automated tests, particularly in mobile codebases. Initial efforts focused on improving test infrastructure and CI stability. This post details the development and implementation of an automated system for detecting and suppressing flaky tests, significantly reducing test job failures and improving main branch stability. Subsequent posts may cover further refinements to the detection algorithms, integration with CI pipelines, and strategies for addressing the root causes of flakiness.

3 posts · 2018–2022

Timeline

20182026
Feature trailQuiet since 2022

Internal Compute Platform (Bedrock)

This thread tracks the evolution of Slack's internal compute orchestration platform, code-named "Bedrock." Initial posts detail the foundational architecture, which enables developers to build, package, and deploy Docker containers, abstracting away complexities of Kubernetes, Jenkins, Consul, Vault, Envoy, and Nebula. Bedrock aims to simplify production-grade service launches, reduce configuration, and accelerate feedback loops. This post details the implementation of a simple, stateless admission controller for Bedrock, enhancing its ability to manage Kubernetes StatefulSet rollouts with enhanced control, addressing limitations of native Kubernetes strategies for stateful applications.

3 posts · 2021–2022

Timeline

20212026
Feature trailQuiet since 2021

Image Editor

This thread tracks the evolution of Slack's image editing capabilities. Initial posts detail the development of an image editor capable of rotating, cropping, and flipping images directly within Slack, aiming to reduce context-switching and improve collaboration. This post covers the lessons learned during the development of this feature, focusing on product-oriented engineering principles, adherence to existing codebase standards, writing future-proof and reusable code, ensuring accessibility and internationalization, and the use of feature flags for gradual rollout and risk mitigation. It also touches upon the balance between security, privacy, and compliance in handling user-uploaded content.

1 post · 2021

Timeline

20212026
Feature trailQuiet since 2021

Conversations API

This thread tracks the evolution of Slack's API design, focusing on creating a unified interface for all channel types. Initial posts detailed the challenges of evolving APIs and the need for backwards compatibility. This post introduces the Conversations API, a new interface designed to unify channel types (public, private, DMs, shared channels) under a single set of endpoints. Key improvements include smarter OAuth scope resolution, simplified and consistent arguments, better performance for l

2 posts · 2018–2021

Timeline

20182026
Feature trailQuiet since 2021

Email Classification for Slack Connect

This thread tracks the evolution of Slack's email classification system, designed to predict whether an invited email address belongs to an internal employee or an external collaborator. Initial posts detail the foundational architecture and the challenges of accurately classifying emails at scale to guide users towards the appropriate invite mechanism (Workspace Invites vs. Slack Connect). This post details the Email Bridge feature, which allows invited users to receive notifications via email and respond to Slack messages using email alone, enabling collaboration before account activation. It also covers the architecture of the Email Bridge, including discoverability of invited users, an email interoperability service for sending notifications and routing replies, and lessons learned regarding gradual rollout, instrumentation, and turning a proof-of-concept into a production feature. Future work includes extending email reply functionality to existing users and delivering relevant Slack messages and team updates to invited users via email.

2 posts · 2020–2021

Timeline

20202026
Feature trailQuiet since 2021

Keyboard Focus Management System

This thread tracks the evolution of Slack's focus management system for keyboard navigation and accessibility. Initial posts detail the problem of inconsistent focus transitions for keyboard and screen reader users, leading to confusion and difficulty navigating the application. This post introduces the `FocusTransitionManager`, a central React component that coordinates focus movements across the app using `focusKey` identifiers and React Context. It details API methods for transitioning focus, handling metadata, and managing focus conditions. The system has been adopted across numerous user flows and integrated into core design system components like Modals, significantly improving the keyboard user experience and scaling accessibility efforts.

1 post · 2021

Timeline

20212026
Feature trailQuiet since 2021

Role-Based Access Control (RBAC) System

This thread tracks the evolution of Slack's role management system, moving from broad, predefined roles to a granular Role-Based Access Control (RBAC) system. Initial posts detailed the limitations of existing roles (Guest, Member, Admin, Owner, Primary Owner) for enterprise organizations, where generic admin roles granted excessive permissions. This post details the design and implementation of a new RBAC system allowing users to be granted one or more roles with specific permissions, delegable at organization or workspace levels. It covers the data model (Permissions, Roles, Entities), the communication architecture using gRPC and Protocol Buffers between the webapp monolith and a new containerized Go permissions service, and the client-side architecture for displaying UI components based on permissions. The rollout strategy involved phased deployment from internal workspaces to pilot customers and eventually to all customers, with a dark mode/light mode transition for validation.

1 post · 2021

Timeline

20212026
Feature trailQuiet since 2020

React Analytics Logging Library

This thread tracks the evolution of Slack's analytics logging capabilities within its React frontend. Initial posts detail the creation of a flexible React analytics library, focusing on efficient data sharing, smarter impression logging, and simplified event logging. This post introduces advanced features such as abstracting the library for cross-team use, implementing robust history tracking of user navigation, and building a live data viewer for real-time visibility into logged events. The thread will continue to cover further refinements to the logging system.

2 posts · 2020

Timeline

20202026
Feature trailQuiet since 2020

Message Storage Migration to Vitess

This thread tracks the evolution of Slack's message storage capabilities, focusing on scaling and performance improvements. Initial posts detailed the challenges of handling massive message volumes and the need for a more robust storage solution. This post details the technical work involved in migrating the core messages table to a Vitess cluster, a distributed MySQL sharding solution, to improve scalability for large customers. It covers the end-to-end process, from message sending to persistence, and the migration from an active-active MySQL configuration to Vitess, which now serves 99% of Slack's query load and handles 2.3 million QPS at peak with a median latency of 2ms.

2 posts · 2020

Timeline

20202026
Feature trailQuiet since 2020

Web Form Capabilities

This thread tracks the evolution of Slack's web form capabilities, focusing on building robust, user-friendly, and secure forms for lead generation and customer interaction. Initial posts detail essential features like HTML attributes, data analytics integration, success states, internationalization, field validation, rate limiting, and custom routing. Subsequent posts will likely delve into specific implementations, performance optimizations, and advanced use cases for forms across Slack.com.

1 post · 2020

Timeline

20202026
Feature trailQuiet since 2020

Machine Learning for Invite Spam Detection

This thread tracks the evolution of Slack's systems for combating invite spam. Initial efforts focused on manual rule-based systems and rate limiting. This post details the development and deployment of a machine learning model to proactively identify and block spam invites, significantly reducing false positives and freeing up engineering time. The ML approach leverages a sparse logistic regression model trained on features derived from invite data, aiming to predict invite acceptance rates as a proxy for spam.

2 posts · 2017–2020

Timeline

20172026
Feature trailQuiet since 2020

Electron App Sandboxing

This thread tracks the evolution of Slack's security posture for its desktop application, focusing on implementing robust sandboxing mechanisms to mitigate security risks. Initial posts detail the foundational architecture and the rationale behind enabling the app sandbox for all web content. This post details the technical implementation of sandboxing in Slack's Electron app, including the use of Chromium's security features, the challenges of dependency untangling with tools like dependency-cr. This post introduces electron-compile, a library that allows Electron to natively Just-In-Time compile popular web languages like ES2015, TypeScript, CoffeeScript, LESS, and Jade/Pug, simplifying the build pipeline for developers and enabling faster prototyping.

6 posts · 2016–2020

Timeline

…20172026
Feature trailQuiet since 2020

End-to-End UI Test Automation Framework

This thread tracks the evolution of Slack's end-to-end (E2E) UI testing capabilities. Initial efforts focused on establishing a culture of testing and increasing test coverage. This post details the development of a reusable automation framework using Cypress.io, incorporating a Page Object Model (POM) abstraction layer with Slack-specific methods and best practices for element selection (data-qa attributes). The framework aims to reduce code duplication, flakiness, and improve maintainability for both automation and front-end engineers.

1 post · 2020

Timeline

20202026
Feature trailQuiet since 2020

iOS Codebase Organization

This thread tracks the evolution of Slack's iOS codebase organization. Initial posts detailed the challenges of a chaotic file hierarchy, lack of architecture patterns, and difficulty for new developers. This post details the first stage of organizing the codebase by moving high-level directories and then tackling source file organization into a Feature/Topic/MVVM+C pattern. It also covers the implementation of tooling like Danger rules to enforce new conventions and the ongoing efforts in folder housekeeping.

1 post · 2020

Timeline

20202026
Feature trailQuiet since 2019

Frontend Framework for Fast Booting

This thread tracks the evolution of Slack's frontend architecture, focusing on improving application boot times and developer productivity. Initial posts detailed the challenges of legacy frontend decisions and the need for a unified approach. This post introduces Gantry, a fast-booting frontend framework designed to address these issues by enabling on-demand data fetching, client-side rendering, front-loaded API requests, lazy asset loading, and local caching via Service Workers. Gantry aims to improve the user experience by significantly reducing the time it takes for the Slack web app to become fully interactive. This post details the implementation of an incremental boot process for the web app, which fetches only the data needed for the initial view, making content visible much faster. It also covers the parallel fetching of the full model data and the subsequent re-enabling of the UI once all data is processed, resulting in faster 'content visible' and 'fully loaded' metrics.

3 posts · 2016–2019

Timeline

…20172026
Feature trailQuiet since 2019

Dark Mode Implementation

This thread tracks the evolution of Slack's theming capabilities, focusing on the implementation of dark mode across its desktop and browser applications. Initial posts detailed the foundational work of redefining the color system to support multiple themes, including the introduction of foreground/background concepts and nuanced grayscale values. This post details the technical implementation of dark mode, leveraging CSS variables, a LESS plugin to handle transparency functions, and localStorage for theme persistence. It also covers OS integration for automatic theme switching and an inline script for pre-paint theme application to avoid flashes of white. Subsequent posts will likely detail further refinements, broader platform support, and user-facing controls.

1 post · 2019

Timeline

20192026
Feature trailQuiet since 2019

slack.com Redesign and Architecture Overhaul

This thread tracks the evolution of slack.com's architecture and frontend. Initial posts detail the major redesign of slack.com in August 2017, focusing on decoupling the marketing website from the web client, introducing the Spacesuit UI framework, and improving CSS payload, specificity, and organization. It also covers the adoption of Flexbox and CSS Grid for responsive layouts, fluid typesetting with Less mixins, and art direction for imagery using the `<picture>` and `<source>` elements. This post details the creation and evolution of Slack Kit, a design system that codifies UI standards for typography, color, spacing, and accessibility. It describes the grassroots origins of Slack Kit, starting with standardizing colors and expanding to rebuild components for the desktop client's React modernization. The post emphasizes the "carrier-grade" principles (robust, accessible, flexible, reliable) and the impact of process, communication, and collaboration. Slack Kit is now used across the desktop client and web surfaces, and efforts are underway to bring it to mobile apps. The post highlights its role in enabling features like Dark Mode.

3 posts · 2017–2019

Timeline

20172026
Feature trailQuiet since 2019

Dependency Vulnerability Management

This thread tracks the evolution of Slack's systems for managing and mitigating security vulnerabilities in external dependencies. Initial efforts focused on identifying vulnerabilities in Javascript/npm packages. This post details the development of a tool to detect vulnerabilities, track their remediation status, and notify owners. It evolved to include support for Hack and Go, and to visualize dependency trees using force graphs to identify direct dependencies and prioritize fixes. Future work includes improving the signal-to-noise ratio and refining remediation strategies.

1 post · 2019

Timeline

20192026
Feature trailQuiet since 2019

Slack Python SDK Evolution

This thread tracks the evolution of Slack's Python SDK, focusing on modernizing its architecture and features. Initial posts detailed the challenges of the v1 SDK, including difficulties with pagination, support for deprecated features, and WebSocket issues. This post details the decision to rewrite the SDK as v2.0, introducing a clear separation between HTTP (WebClient) and WebSocket (RTMClient) concerns, improving performance by reusing sessions, and abstracting away RTM event handling. A significant decision was made to drop Python 2 support in favor of Python 3, enabling the adoption of async features and type hints, while continuing to support Python 2 bug fixes until its EOL.

1 post · 2019

Timeline

20192026
Feature trailQuiet since 2018

Cross-Platform Performance Metrics

This thread tracks the evolution of Slack's approach to measuring and improving application performance across different client platforms. Initial posts detail the challenges of disparate performance metrics across Desktop, iOS, and Android, leading to difficulties in comparison and decision-making. This post introduces the concept and implementation of unified cross-platform performance metrics, focusing on 'Time to Visible' (TTV) and 'Time to Usable' (TTU) for app launch time. It details the definition of these metrics, the importance of a common vocabulary and data pipeline, and the handling of special cases and launch scenarios to ensure accurate and actionable performance insights. The goal is to provide a consistent and reliable performance experience for users regardless of their device.

1 post · 2018

Timeline

20182026
Feature trailQuiet since 2018

HHVM Debugging Tools

This thread tracks the evolution of debugging tools and techniques for HHVM at Slack. Initial posts may have covered general debugging strategies. This post details the specific use of VSCode's HHVM debugger, including breakpoints, variable inspection, watch expressions, the debug console REPL, and the call stack, to efficiently diagnose and fix bugs in unit tests for API event handling.

1 post · 2018

Timeline

20182026
Feature trailQuiet since 2018

Security Development Lifecycle (SDL) Tooling

This thread tracks the evolution of Slack's Security Development Lifecycle (SDL) processes and tooling. Initial posts likely detailed foundational security principles and the challenges of integrating security into a fast-paced development environment. This post introduces 'goSDL', an open-source web application designed to guide developers and PMs through security checklists and risk assessments. It aims to empower developers with self-sufficiency, reduce friction, and foster a culture where security is a shared responsibility, moving away from manual, blocking reviews.

1 post · 2018

Timeline

20182026
Feature trailQuiet since 2017

Internationalization Framework

This thread tracks the evolution of Slack's internationalization capabilities, focusing on building robust systems for supporting multiple languages. Initial posts detail the launch of French, German, and Spanish localization, including the challenges of preparing strings, choosing localization formats (ICU MessageFormat), and implementing pseudolocalization for testing. Subsequent posts will likely cover further language expansions, tooling improvements, and integration into ongoing development workflows.

1 post · 2017

Timeline

20172026
Feature trailQuiet since 2017

API Pagination Evolution

This thread tracks the evolution of Slack's API pagination strategies. Initial posts likely covered the challenges of growing data volumes and the limitations of no pagination. This post details the move from offset-based pagination to cursor-based pagination, addressing scalability and reliability issues. It discusses the pros and cons of offset and cursor pagination, and introduces a new cursor-based scheme inspired by Relay Cursor Connections, using opaque, Base64-encoded cursors for forward pagination. Future posts may detail specific endpoint implementations and further refinements.

1 post · 2017

Timeline

20172026
Feature trailQuiet since 2017

Bug Bounty Program Evolution

This thread tracks the evolution of Slack's Bug Bounty program, focusing on its growth, operational improvements, and the technical aspects of security research. Initial posts detailed the program's launch and basic operational flow. This post provides a three-year retrospective, highlighting key metrics such as the number of reports, response times, and bounty payouts. It discusses lessons learned regarding program management, the importance of a triage service, and maintaining researcher and internal developer happiness. The post also offers guidance to security researchers on areas of interest within Slack's various components (API, web app, desktop, mobile, websockets) and common vulnerability types.

1 post · 2017

Timeline

20172026
Feature trailQuiet since 2017

Desktop Client Memory Optimization

This thread tracks the evolution of Slack's desktop client, focusing on reducing its memory footprint and improving performance. Initial posts detailed the problem of high memory consumption due to multiple webviews per team. This post details the refactoring of message fetching to a lazy-loading model, avoiding the need to fetch all message history upfront. It also covers the lessons learned from aggressive caching in LocalStorage, including its performance issues, size limitations, and complex.

3 posts · 2017

Timeline

20172026
Feature trailQuiet since 2017

Personalized Search Relevance

This thread tracks the evolution of Slack's search capabilities, focusing on improving the relevance and user experience of search results. Initial posts detailed the challenges of search within Slack's unique environment and introduced the concepts of 'Recent' and 'Relevant' search. This post details the development of a personalized relevance sort and a 'Top Results' module, incorporating user interaction history ('work graph') and machine learning to significantly increase click-through rates. Subsequent posts detail the development of a channel recommendation system using collaborative filtering and activity transforms to help users curate their channel list.

2 posts · 2016–2017

Timeline

…20172026
Feature trailQuiet since 2016

Syscall Auditing with go-audit

This thread tracks the evolution of Slack's systems for monitoring and analyzing system calls (syscalls) on Linux production servers. Initial posts detailed the challenges of understanding outbound TCP connections and the processes/users initiating them. This post introduces go-audit, an open-source replacement for the userspace auditd daemon, designed to convert multiline audit events into single JSON blobs, speak directly to the kernel via netlink, and be highly performant. The goal is to enable centralized logging and alerting on syscall data for continuous monitoring, security analysis, and debugging, rather than filtering events on individual hosts.

1 post · 2016

Timeline

…20172026
Feature trailQuiet since 2016

PHP and HHVM adoption

This thread tracks the evolution of Slack's server-side technology choices, focusing on the adoption and benefits of PHP and the HipHop Virtual Machine (HHVM). Initial posts detail the rationale behind choosing PHP for its request-oriented strengths, fast developer workflow, and state isolation. This post introduces HHVM as a JIT environment that significantly improves performance and economic efficiency, with Slack experiencing reduced latency after migrating its web environments. It also introduces Hack, a gradual typing system for PHP, as a way to address language flaws and enable safer, more maintainable codebases.

1 post · 2016

Timeline

…20172026
Feature trailQuiet since 2016

Data Consistency Checks Framework

This thread tracks the evolution of Slack's systems for ensuring data integrity and consistency. Initial posts detailed the challenges of maintaining data accuracy in a distributed system and the need for tooling beyond standard database constraints and ORM validations. This post introduces Slack's 'consistency check framework,' a system for analyzing and reporting on data in meaningful ways. It covers use cases like recovery from outages, data migration validation, and proactive bug finding. The framework evolved from ad-hoc scripts to a standardized pattern with a command-line interface and a GUI, enabling both engineers and customer experience teams to diagnose and fix data inconsistencies. The system also includes a 'fixer framework' for automatically resolving certain types of inconsistencies.

1 post · 2016

Timeline

…20172026
Feature trailQuiet since 2016

Internal Developer Tooling

This thread tracks the evolution of Slack's internal developer tooling, focusing on creating cohesive and efficient workflows for engineers. Initial posts detail the development of the `slack-cli` project, a command-line executable that packages ad-hoc shell scripts into a shared set of tools. This aims to reduce friction, help new engineers onboard faster, and improve overall developer productivity by providing a focused environment and reducing cognitive overhead. The project is open-sourced as `magic-cli` to share this pattern with the wider community. Subsequent posts will likely detail specific tools developed within this framework, their impact, and further advancements in developer productivity.

1 post · 2016

Timeline

…20172026
Feature trailQuiet since 2016

Distributed Security Alerting

This thread tracks the evolution of Slack's distributed security alerting system. Initial posts detail the challenges of detecting security incidents in a timely manner and the limitations of traditional methods like manual log tailing or 24/7 SOC operations. This post introduces a novel approach where monitoring systems trigger alerts directly to the involved employee via Slack bot. The system leverages a two-factor confirmation (Slack reply + mobile push) to validate suspicious activity, significantly reducing the detection-to-response window and deputizing all employees as part of the security team. It also addresses the risk of compromised accounts by incorporating out-of-band communication for confirmation.

1 post · 2016

Timeline

…20172026
Feature trailQuiet since 2016

Quick Switcher Performance and Personalization

This thread tracks the evolution of Slack's Quick Switcher, focusing on improving its performance and personalization. Initial posts detailed the original Quick Switcher and its limitations. This post details a significant rewrite to address performance issues, reducing open times from seconds to milliseconds through optimizations like lazy loading unread channels, templated HTML, and prefetched data. It also introduces 'frecency' (frequency + recency) to personalize search results based on user history, and enhances search matching with graph-based algorithms for more flexible substring and initial matching. Future posts will cover mobile app integration and other UI enhancements.

1 post · 2016

Timeline

…20172026