When a rewrite isn’t: rebuilding Slack on the desktop
Jul 22, 2019

Summary
This post details the technical approach to rewriting Slack's desktop client, moving from manual DOM updates and eager data loading to React and lazy data loading. It addresses the challenge of multiple Electron processes per workspace by introducing a multi-workspace aware architecture using Redux, where each workspace gets its own Redux store. The post also outlines the 'Ship of Theseus' incremental modernization strategy, using legacy-interop mechanisms (TS.interop and adaptFunctionWithFallback) to gradually replace old code with new, while maintaining interoperability. The success of this approach is demonstrated by significant memory usage reductions.