Two years ago, I wrote a post about Libslack, Slack’s shared C++ client library. That post described how Slack used the Libslack library in its mobile applications to encapsulate shared business logic, and to handle syncing and caching of data. In the intervening time, we decided to move away from using a shared C++ library in…
Overview
The article discusses Slack's transition from using the Libslack shared C++ client library to developing separate implementations for mobile clients. It highlights the challenges faced with Libslack and outlines new strategies for maintaining client consistency and reducing duplication of effort across Slack's infrastructure.
What You'll Learn
Why Slack discontinued the use of the Libslack library
How to implement separate DataProvider frameworks for iOS and Android
When to utilize conformance suites for client consistency
Prerequisites & Requirements
- Understanding of mobile application architecture and client-server interactions
- Familiarity with C++ and mobile development practices(optional)
Key Questions Answered
What were the main reasons for discontinuing the Libslack library?
How did Slack ensure consistency across its mobile clients after Libslack?
What are DataProviders and how do they function in Slack's architecture?
What role does the Client Foundations Council play in Slack's client development?
Technologies & Tools
Some links below are affiliate links. We may earn a commission if you make a purchase.
Key Actionable Insights
1Implement separate DataProvider frameworks for mobile applications to manage data efficiently.This approach allows for independent development while maintaining consistency in data handling, reducing the risk of concurrency issues and crashes.
2Establish a Client Foundations Council to enhance communication between teams working on different client platforms.Regular meetings can help identify common challenges and foster collaboration, ensuring that all teams are aligned on feature development and implementation.
3Utilize conformance suites to validate client behavior across different platforms.Creating shared test cases allows for consistent user experiences without enforcing identical implementations, which can be crucial when dealing with complex features.