Home/Slack Engineering
Source

Slack Engineering

121 articles from Slack Engineering.

Career & Teams — AutoTransform: Efficient Codebase Modification

AutoTransform: Efficient Codebase Modification

Every codebase starts off small and modern. While it’s still small, the team can easily keep it up-to-date with current standards, upgrade libraries, and handle any code hygiene issues that may arise. Updating the API of a framework you built is easy when it’s only called in a handful of places. However, as the codebase…

NRNathan Rockenbach·July 21, 2022Career & Teams
Engineering — Remote Development at Slack

Remote Development at Slack

In this article, “remote development environments” refer to AWS EC2 instances where engineers make code changes and can see a running Slack application with those changes. For years, engineers at Slack isolated and tested their changes by running microcosms of the Slack application on their local computers. This was difficult for many reasons: it involved…

SGSylvestor George·June 28, 2022Engineering
Distributed — Building Background Effects for Clips

Building Background Effects for Clips

Last September, Slack released Clips, allowing users to capture video, audio, and screen recordings in messages to help distributed teams connect and share their work. We’ve continued iterating on Clips since its release, adding thumbnail selection, background blur, and most recently, background image replacement. This blog post provides a deep dive into our implementation of…

AXAlbert Xing·June 7, 2022Distributed
Distributed — Scaling Slack’s Mobile Codebases: Modernization

Scaling Slack’s Mobile Codebases: Modernization

In the first two posts about the Duplo initiative, we described why we decided to revamp our mobile codebases, the initial phase to clean up tech debt, and our efforts to modularize our iOS and Android codebases (post 1, post 2). In this final post, we will discuss the last theme of the Duplo initiative,…

TSTracy Stampfli·May 4, 2022Distributed
Performance — Continuous Load Testing

Continuous Load Testing

Building load test infrastructure is tricky and poses many questions. How can we identify performance regressions in newly deployed builds, given the overhead of spinning up test clients? To gather the most representative results, should we load test at our peak hours or when there’s a lull? How do we incentivize engineers to invest time…

SRShreya Ramesh·April 29, 2022Performance
SRE & Ops — Slack’s Incident on 2-22-22

Slack’s Incident on 2-22-22

By Laura Nolan, with contributions from Glen D. Sanford, Jamie Scheinblum, and Chris Sullivan. Assessing conditions Slack experienced a major incident on February 22 this year, during which time many users were unable to connect to Slack, including the author — which certainly made my role as Incident Commander more challenging! This incident was a…

LNLaura Nolan·April 26, 2022SRE & Ops
Distributed — Handling Flaky Tests at Scale: Auto Detection & Suppression

Handling Flaky Tests at Scale: Auto Detection & Suppression

At Slack, the goal of the Mobile Developer Experience Team (DevXp) is to empower developers to ship code with confidence while enjoying a pleasant and productive engineering experience. We use metrics and surveys to measure productivity and developer experience, such as developer sentiment, CI stability, time to merge (TTM), and test failure rate. The DevXp…

APArpita Patel·April 5, 2022Distributed
Distributed — Scaling Slack’s Mobile Codebases: Modularization

Scaling Slack’s Mobile Codebases: Modularization

In the first post about the Duplo initiative, we discussed the reasons for launching a project to revamp Slack’s mobile codebases, and what we accomplished in Duplo’s initial Stabilization phase. This post will explore modularization, and then there will be a third post to describe how we modernized our codebase and the overall results of…

TSTracy Stampfli·March 28, 2022Distributed
Databases — Applying Product Thinking to Slack’s Internal Compute Platform

Applying Product Thinking to Slack’s Internal Compute Platform

According to a recent Thoughtworks radar, “the industry is increasingly gaining experience with platform engineering product teams that create and support internal platforms.” They caveated this with a piece of advice: “When creating a platform, it’s critical to have clearly defined customers and products that will benefit from it rather than building in a vacuum.”…

JTJavier TureganoJavier Turegano·March 9, 2022Databases
SRE & Ops — Balancing Safety and Velocity in CI/CD at Slack

Balancing Safety and Velocity in CI/CD at Slack

In 2021, we changed developer testing workflows for Webapp, Slack’s main monorepo, from predominantly testing before merging to a multi-tiered testing workflow after merging. This changed our previous definition of safety and developer workflows between testing and deploys. In this project, we aimed to ensure frequent, reliable, and high-quality releases to our customers for a…

CVCarlos Valdez·February 18, 2022SRE & Ops
Distributed — Building Self-driving Kafka clusters using open source components

Building Self-driving Kafka clusters using open source components

In this article, I will talk about how Slack uses Kafka, and how a small-but-mighty team built and operationalized a self-driving Kafka cluster over the last four years to run at scale. Kafka is used at Slack as a pub-sub system, playing an essential role in the all-important Job Queue, our asynchronous job execution framework…

SKSuman Karumuri·February 11, 2022Distributed
Distributed — Stabilize, Modularize, Modernize: Scaling Slack’s Mobile Codebases

Stabilize, Modularize, Modernize: Scaling Slack’s Mobile Codebases

When do you need to overhaul a large code base to address tech debt? What is the best way to address widespread inconsistencies and outdated patterns? How can you make significant architectural improvements to a complex application while still continuing to ship features? These were questions we grappled with at the beginning of 2020, when…

TSTracy Stampfli·January 12, 2022Distributed
SRE & Ops — A Simple Kubernetes Admission Webhook

A Simple Kubernetes Admission Webhook

While adding a recent feature to our Kubernetes compute platform, we had the need to mutate newly-created pods based on annotations set by users. The mutation needed to follow simple business rules, and didn’t need to keep track of any state. Surely there must be a canonical solution to this simple problem? Well, sort of.…

CLClément Labbe·December 14, 2021SRE & Ops
Engineering — Going from Coder to Slack Engineer

Going from Coder to Slack Engineer

Over 70% of the files uploaded on Slack are images, and over 75% of those images are screenshots. What this tells us is that though images are ephemeral, screenshots are often used as a quick way to provide extra detail and context, and typically gain a high level of engagement over a short time period.…

CRChaitanya Ravula·December 2, 2021Engineering
Networking — The Case of the Recursive Resolvers

The Case of the Recursive Resolvers

On September 30th 2021, Slack had an outage that impacted less than 1% of our online user base, and lasted for 24 hours. This outage was the result of our attempt to enable DNSSEC — an extension intended to secure the DNS protocol, required for FedRAMP Moderate — but which ultimately led to a series of…

RERafael Elvira·November 29, 2021Networking
Engineering — Developing in the Open

Developing in the Open

We use plenty of open source tools at Slack and we’ve benefited immensely from the wider Android, Kotlin, and Gradle communities. We also try to be good citizens by giving back. This includes things like sponsoring the Kotlin Lang Slack, contributions to projects we use like Anvil and Insetter, sharing projects of our own like…

ZSZac Sweers·November 10, 2021Engineering
Security — How Two Interns Are Helping Secure Millions of Lines of Code

How Two Interns Are Helping Secure Millions of Lines of Code

At Slack, proactively securing our systems is a top priority. One way we achieve this is by automating the detection of security issues with static code analysis, which are tools that inspect programs without executing them. They’re often used with security-based rules to automate identification of vulnerabilities and insecure programming practices, which frees up more…

GHGregg Horton·November 4, 2021Security
Networking — Building the Next Evolution of Cloud Networks at Slack – A Retrospective

Building the Next Evolution of Cloud Networks at Slack – A Retrospective

About a year ago, I wrote a blog post called Building the Next Evolution of Cloud Networks at Slack. In it, we discussed how Slack’s AWS infrastructure has evolved over the years and the pain points that drove us to spin up a brand-new network architecture redesign project called Whitecastle. If you have not had…

AGArchie Gunasekara·October 20, 2021Networking
SRE & Ops — Infrastructure Observability for Changing the Spend Curve

Infrastructure Observability for Changing the Spend Curve

Slack is an integral part of where work happens for teams across the world, and our work in the Core Development Engineering department supports engineers throughout Slack that develop, build, test, and release high-quality services to Slack’s customers. In this article, we share how teams at Slack evolved our internal tooling and made infrastructure bets.…

FCFrank Chen·October 7, 2021SRE & Ops
Frontend — Behind the Scenes of Slack’s Acquisition Announcement

Behind the Scenes of Slack’s Acquisition Announcement

On July 21st, 2021, Slack officially became a part of Salesforce at the price tag of $27.7 billion. This was undoubtedly Slack’s most significant event in the past year. As a frontend intern on Slack’s Customer Acquisition team this summer, I had the once-in-a-lifetime opportunity to be directly involved with announcing the closing of one…

MMMina Markham·September 7, 2021Frontend
Career & Teams — The Four Agile Values and Slack

The Four Agile Values and Slack

Agile development methods can bolster company culture and empower teams to move quickly, with a focus on frequently adding value for customers. Whether you are a program manager, game developer, event planner, or architect, within businesses where change is constant, it’s key to have flexibility, and that’s where agile shines. While there are a variety…

BRBrian RiggsbeeBrian Riggsbee·September 1, 2021Career & Teams
Engineering — Building Android Conversation Bubbles

Building Android Conversation Bubbles

We recently rolled out support for Conversation Bubbles for DMs and Group DMs on Android 11. In case you’re not familiar with Conversation Bubbles, take a look at the video below. Basically, they are a way to pop out a conversation from a notification into a Bubble that will draw over other apps, making multitasking…

MRMathias Roth·August 25, 2021Engineering
Distributed — Data Lineage at Slack

Data Lineage at Slack

Reinventing how the world does work inevitably creates a lot of data. Each year, Slack’s scale has increased and the volume of data ingested and stored has kept pace. To make it possible to understand relationships within our data, we’ve invested heavily in an automated data lineage framework. This facilitates producer/consumer coordination, improves risk mitigation,…

SBSamuel Bock·August 17, 2021Distributed
Design & UX — How We Design Our APIs at Slack

How We Design Our APIs at Slack

More than five years ago, we launched the Slack Platform, giving developers an easy way to build apps in Slack and publish them in our App Directory. Today, millions of users bring their work into Slack, and those apps built by over 885,000 active developers on the platform are key to further improving collaboration in…

SSSaurabh SahniSaurabh Sahni·August 11, 2021Design & UX
Engineering — Email Classification

Email Classification

With the release of Slack Connect, people can now collaborate both with internal employees and external organizations in the same channel. To make this as smooth as possible, Slack does predictive email analysis to classify and recommend the best way for a user to work with people they want to collaborate with. To accomplish this,…

SHSarah Henkens·July 28, 2021Engineering
Engineering — Extending Anvil for Fun and Profit

Extending Anvil for Fun and Profit

Note: This article assumes some familiarity with Dagger, Anvil, and Kotlin. We use Dagger heavily in the Slack Android app for compile-time dependency injection. It’s powerful, flexible, supports basic Kotlin idioms, and allows for advanced dependency injection patterns with less boilerplate. It’s not without its sharp edges though. It slows down our builds with kapt,…

ZSZac Sweers·July 20, 2021Engineering
Design & UX — Managing Focus Transitions in Slack

Managing Focus Transitions in Slack

At Slack, we believe that designing an optimal keyboard experience is key to delivering a best-in-class product for all our customers. However, despite our design system components being individually accessible, we heard from keyboard users that we were still missing focus transitions in their end-to-end user experience. Non-sighted users who relied on a screenreader constantly…

DKDivya Kamath·July 13, 2021Design & UX
Design & UX — How a Jenkins Job Broke our Jenkins UI

How a Jenkins Job Broke our Jenkins UI

Artwork courtesy of the Jenkins project. At Slack we manage a sophisticated Jenkins infrastructure to continuously build and test our mobile apps before release. We have hundreds of jobs running in a variety of different environments. One day something very odd happened — our Jenkins UI stopped working although the jobs continued to run. This…

MSMaria SabastianMaria Sabastian·June 3, 2021Design & UX
Engineering — Role Management at Slack

Role Management at Slack

Controlling which users are able to take which actions is no simple task. Building this into Slack has always been an interesting challenge. In large enterprise organizations, the standard types of roles we offered to customers were too broad, and delegating a generic admin role can grant someone with too much power — what if…

JBJake Byman·May 24, 2021Engineering
Performance — Load Testing with Koi Pond

Load Testing with Koi Pond

Complex systems are difficult to reason about at scale; we often can’t accurately extrapolate system behavior and performance, so we need to derive that data empirically. We use load testing to do just that: find the limits of our systems and weed out bugs at a large scale in a controlled environment. Slack is a…

SRShreya Ramesh·April 23, 2021Performance
Engineering — Migrating Millions of Concurrent Websockets to Envoy

Migrating Millions of Concurrent Websockets to Envoy

Slack has a global customer base, with millions of simultaneously connected users at peak times. Most of the communication between users involves sending lots of tiny messages to each other. For much of Slack’s history, we’ve used HAProxy as a load balancer for all incoming traffic. Today, we’ll talk about problems we faced with HAProxy,…

RKRadha Kumari·March 15, 2021Engineering
Performance — Shadow Jobs

Shadow Jobs

We take developer productivity pretty seriously at Slack. It’s multi-faceted, spreading across build speed, reliability, modernity, and more. One thing we really pride ourselves in is using the latest build tools when possible. Not necessarily bleeding edge (alphas, betas, RC, etc.), but the latest stable versions. Aside from the new features and improvements they bring,…

ZSZac Sweers·February 18, 2021Performance
SRE & Ops — Slack’s Outage on January 4th 2021

Slack’s Outage on January 4th 2021

And now we welcome the new year. Full of things that have never been. — Rainer Maria Rilke January 4th 2021 was the first working day of the year for many around the globe, and for most of us at Slack too (except of course for our on-callers and our customer experience team, who never…

LNLaura Nolan·February 1, 2021SRE & Ops
Security — Women in Security at Slack

Women in Security at Slack

Since its inception, Slack has fostered a culture of inclusion and diversity. The Security organization at Slack is a prime example of how women can thrive in the security space, transitioning to security from different backgrounds and expertises. With Slack’s strong commitment to diversity, it should not be a surprise that nearly a third of…

SKSuzanna Khatchatrian·January 20, 2021Security
Engineering — A Day in the Life of a Backend Platform Engineer at Slack Pune

A Day in the Life of a Backend Platform Engineer at Slack Pune

5:25 am First alarm rings. *Snooze.* 6:30 am The final alarm rings and I know this is the last one, so I get up and immediately start making my bed. I open the curtains to take a look at the weather and the early morning light. I walk to my balcony and stand there to…

KPKalpak Pingle·January 13, 2021Engineering
Frontend — Creating a React Analytics Logging Library

Creating a React Analytics Logging Library

In the first installment of the article, we examined why we built a React analytics library. We also looked at how we use the library to share data efficiently, log smarter impressions, and simplify event logging. In this second part of the article, we will focus on how we abstracted the library for use by…

FCFabio Canache·December 16, 2020Frontend
Databases — Scaling Datastores at Slack with Vitess

Scaling Datastores at Slack with Vitess

From the very beginning of Slack, MySQL was used as the storage engine for all our data. Slack operated MySQL servers in an active-active configuration. This is the story of how we changed our data storage architecture from the active-active clusters over to Vitess — a horizontal scaling system for MySQL. Vitess is the present…

RCRafael Chacon Vivas·December 1, 2020Databases
SRE & Ops — Migrating Slack Airflow to Python 3 Without Disruption

Migrating Slack Airflow to Python 3 Without Disruption

Last year, we migrated Airflow from 1.8 to 1.10 at Slack (see here) and we did a “Big bang” upgrade because of the constraints we had. This year, due to Python 2 reaching end of life, we again had a major migration of Airflow from Python 2 to 3 and we wanted to put our…

ASAshwin Sai Shankar·November 19, 2020SRE & Ops
Career & Teams — Bridging the Gap Between Slack and Email Users

Bridging the Gap Between Slack and Email Users

Slack brings the right people, information, and tools together to get work done. Normally, team members can invite one another to Slack via email invitation. Invited users can accept the invitation to activate their account, but if they don’t, then their team members can’t collaborate with them. To solve this problem we created Email Bridge:…

MBMadhu Balakrishna·October 14, 2020Career & Teams
Engineering — Building the Next Evolution of Cloud Networks at Slack

Building the Next Evolution of Cloud Networks at Slack

At Slack, we’ve gone through an evolution of our AWS infrastructure from the early days of running a few hand-built EC2 instances, all the way to provisioning thousands of EC2s instances across multiple AWS regions, using the latest AWS services to build reliable and scalable infrastructure. One of the pain points inherited from the early…

AGArchie Gunasekara·September 21, 2020Engineering
Languages — The Unsuspecting Beauty & Complexity of Web Forms

The Unsuspecting Beauty & Complexity of Web Forms

A form on a website may seem like a pretty trifling thing. A couple of text fields, a submit button, and you’re good to go, right? <i><span style="font-weight: 400">#lifeisgood</span></i> Wrong! Forms are beautiful and complex creatures. You must dive beneath the surface and explore all the beautiful features that can help create a truly powerful…

MMMina Markham·September 15, 2020Languages
Career & Teams — Starting an Initiative

Starting an Initiative

Early in my career at Slack I was looking for ways to have an impact. I asked my manager what I could work on to add value to the team. She said that we wanted to catch bugs earlier in the development process and that Cypress testing might be one way to do this. I…

JCJosh Cartmell·September 3, 2020Career & Teams
Networking — Tracing at Slack: Thinking in Causal Graphs

Tracing at Slack: Thinking in Causal Graphs

“Why is it slow?” is the hardest problem to debug in a complex distributed system like Slack. To diagnose a slow-loading channel with over a hundred thousand users, we’d need to look at client-side metrics, server-side metrics, and logs. It could be a client-side issue: a slow network connection or hardware. On the other hand,…

SKSuman Karumuri·August 28, 2020Networking
Security — How to Have an Impactful Internship… Virtually

How to Have an Impactful Internship… Virtually

The start of any internship brings a wide range of emotions, from excitement to nervousness. After months of anticipating our first day at Slack, reality sunk in that this summer would be extremely different from any other. Due to the pandemic, our entire experience would be virtual. As the two interns for the Product Security…

RRoss·August 18, 2020Security
AI & ML — Blocking Slack Invite Spam With Machine Learning

Blocking Slack Invite Spam With Machine Learning

A fact of life for building an internet service is that, sooner or later, bad actors are going to come along and try to abuse the system. Slack is no exception — spammers try to use our invite function as a way to send out spam emails. Having built up the infrastructure to easily deploy…

RRoss·August 10, 2020AI & ML
SRE & Ops — All Hands on Deck

All Hands on Deck

This story speaks to the process behind incident response at Slack and uses the May 12th, 2020 outage as an example. For a deeper technical review of the same outage, read Laura Nolan’s post, “A Terrible, Horrible, No-Good, Very Bad Day at Slack” Slack is a critical tool for millions of people, so it’s natural when…

RRoss·June 29, 2020SRE & Ops
SRE & Ops — A Terrible, Horrible, No-Good, Very Bad Day at Slack

A Terrible, Horrible, No-Good, Very Bad Day at Slack

This story describes the technical details of the problems that caused the Slack downtime on May 12th, 2020. To learn more about the process behind incident response for same outage, read Ryan Katkov’s post, “All Hands on Deck”. On May 12, 2020, Slack had our first significant outage in a long time. We published a summary…

RRoss·June 29, 2020SRE & Ops
Security — The App Sandbox

The App Sandbox

Batten down the hatches! The app sandbox is now enabled for all web content. This is a fancy way of saying we’ve dialed up the security of the app. It wasn’t unsafe before, but it’s double safe now. What is the “app sandbox,” what is it protecting against, and why does it matter? This post…

RRoss·June 24, 2020Security
Performance — Scaling End-to-End User Interface Tests

Scaling End-to-End User Interface Tests

At Slack, Quality is a shared responsibility. The Quality Engineering team is focused on creating a culture of testing, increasing test coverage, and helping the company ship high-quality features faster. We encourage all our developers to write and own end-to-end (E2E) tests. In turn, Quality Engineering (QE) is responsible for the frameworks used and provides…

RRoss·June 11, 2020Performance
Engineering — Prototyping at Slack

Prototyping at Slack

Over the years at Slack — usually during periods of high growth — teams have defaulted to working in a waterfall where an idea is proposed and researched, then designed or spec’d, then built, in that order. It’s not the most efficient way to work and as a company grows — with more people involved…

SESlack Engineering·May 19, 2020Engineering
Frontend — A Day in the Life of a Frontend Foundations Engineer at Slack

A Day in the Life of a Frontend Foundations Engineer at Slack

6:28 am First alarm rings. Snooze. 6:30 am Second alarm rings. Snooze. 6:34 am Final alarm rings and I know this is the last one, so I hop out of bed and immediately play some music. Music really has a way of waking me up, and I typically play Sofi Tukker or Rufus Du Sol…

SESlack Engineering·May 14, 2020Frontend
Career & Teams — Happiness is… a freshly organized codebase

Happiness is… a freshly organized codebase

Starting From the Top Imagine joining a new team at a new company and you finally get access to a codebase. Slack iOS Xcode File Hierarchy 2017 Where do you add a source file for your team’s project? Great question. Your new team has three source directories for you to add files to, and oh,…

SESlack Engineering·May 7, 2020Career & Teams
Engineering — Development Environments at Slack

Development Environments at Slack

In this article, development environments refer to sandboxes where you can test your code changes before deploying, and should not be confused with integrated development environments (IDEs) like Eclipse or Microsoft Visual Studio. Dev environments have always been a mystery to me. Despite learning about them on my first day at Slack, and using them…

SESlack Engineering·April 28, 2020Engineering
Engineering — A Day in the Life of a Mobile Product Engineer at Slack

A Day in the Life of a Mobile Product Engineer at Slack

6:45 am My alarm is set for 6:45 but I often wake up before it goes off. I tend to wake up earlier during Vancouver’s long summer days, when the sun is up from 5:10am to 9:10pm and already peeking through my blinds, but it sometimes happens in the winter when it’s still dark out.…

SESlack Engineering·April 21, 2020Engineering
Performance — Hacklang at Slack: A Better PHP

Hacklang at Slack: A Better PHP

Slack launched in 2014 with a PHP 5 backend. Along with several other companies, we switched to HHVM in 2016 because it ran our PHP code faster. We stayed with HHVM because it offers an entirely new language: Hack (searchable as Hacklang). Hack makes our developers faster by improving productivity through better tooling. Hack began as a superset of PHP, retaining its best…

SESlack Engineering·April 14, 2020Performance
Engineering — A Day in the Life of a Backend Product Engineer at Slack

A Day in the Life of a Backend Product Engineer at Slack

7am I’m definitely not a morning person, so when my alarm goes off, I can’t help but stay in bed a little while longer. I have two cats, Stella and Orion, who are especially cuddly in the mornings, so it’s hard to leave them and get out of bed. My cats are well known by…

SESlack Engineering·April 6, 2020Engineering
Performance — Deploys at Slack

Deploys at Slack

Deploys require a careful balance of speed and reliability. At Slack, we value quick iteration, fast feedback loops, and responsiveness to customer feedback. We also have hundreds of engineers who are trying to be as productive as possible. Keeping to these values while growing as a company means continual refinement of our deployment system. We…

SESlack Engineering·March 29, 2020Performance
AI & ML — How Big Technical Changes Happen at Slack

How Big Technical Changes Happen at Slack

Most new things in technology turn out to be fads: patterns of talking and doing that come and go without leaving a permanent mark. Microkernels; EPIC architectures like IA-64; object request brokers; and 1990s’-style neural nets are gone, and will not return. Sorry for the deep throwbacks; only time proves which things are fads, so for uncontroversial…

SESlack Engineering·February 13, 2020AI & ML
Frontend — A Day in the Life of a Frontend Product Engineer at Slack

A Day in the Life of a Frontend Product Engineer at Slack

6:45am The sound of coffee grinding wakes me up 15 minutes before my alarm. I’m not a morning person, but I always stumble bleary-eyed into the kitchen for some toast and coffee with my partner, which is my favorite daily ritual. I sit down, listen to my morning news podcasts — The Daily and AM…

SESlack Engineering·February 5, 2020Frontend