By Tracy Stampfli and Scott Nyberg
In our “Engineering Energizers” Q&A series, we examine the professional life experiences that have shaped Salesforce Engineering leaders. Meet Tracy Stampfli, a Principal Software Engineer for Slack at Salesforce. Tracy works behind the scenes on Slack’s mobile infrastructure team — an elite group of innovative engineers who ensure that Slack users enjoy a seamless and high-quality mobile app experience.
Read on to learn how Tracy’s team addresses key engineering challenges, drives feature development, and continuously improves the app’s performance.
How would you describe your team’s mission?
My team supports Slack’s expansive mobile app development ecosystem. We build common core components of mobile apps, which spans data synching, networking, and UI components.
Additionally, we’re charged with maintaining the overall app architecture and driving quality and reliability across Slack features.
Ultimately, we serve as Slack’s infrastructure backbone, equipping multiple Slack feature teams with shared resources — ensuring products are built in a consistent fashion.
Tracy explains what keeps her working on Slack at Salesforce.
What’s a critical problem that our customers face and how does your team address that?
While desktop Slack users enjoy stable Wi-Fi connectivity for long periods, mobile users may be subject to brief sessions, stemming from network connectivity issues as users may be on the move — switching between cellular networks or losing signals in challenging areas like subways. For these mobile use cases, Slack must be able to efficiently fetch the data that users need within a short period of time.
To address this challenge, my team is enhancing Slack’s ability to efficiently and seamlessly fetch key data under low or intermittent network connectivity conditions. For example, one technique we employ is prioritizing individual API requests, which ensures the most crucial operations take precedence. As a result, as data needs to be fetched, the most critical information is obtained first, improving the user’s experience.
Additionally, we have innovated ways for ensuring that cached data remains constantly updated. This reduces unnecessary data fetching when connectivity may be an issue.
Example of measuring whether data returned from APIs is identical to cached data.
What’s the secret to keeping the data updated?
We update the data by developing ways to “version” objects in Slack. This enables the client to validate with the server if the version of the object it has cached is the most up to date.
How we do the versioning varies by the type of object, requiring work on both client and server to accurately calculate a version and check it. Ultimately, we have seen some really great reductions in data usage.
What was a key technical challenge your team has overcome?
My team recognized that our mobile development efforts were saddled with technical debt, lacked consistency when developing features, and often did not meet product roadmap deadlines. To overcome these issues, we led an effort on comprehensively modernizing and revamping our mobile clients, which involved:
- Introducing major changes to our codebase
- Reducing legacy technical debt
- Launching a new feature architecture on iOS
While we faced challenges rolling out this plan, it was very successful as it strengthened our ability to build features across all our clients and drive faster mobile development, especially on iOS.
Tracy shares why Slack’s engineering culture is unique.
What risks did your team face in implementing your solution for the customer?
A primary risk is the high stakes associated with making changes to an app, where disrupting any of its critical functionality, such as networking, could result in serious consequences. In fact, doing so could create a cascading ripple effect across the entire application. We prevent this by leveraging strategies like feature flagging or change toggling, which allows us to control client-side flags from the server. And, if issues arise, we rapidly roll back changes and handle them before customers are impacted.
However, despite these precautions, no process is perfect, which may lead to occasional errors. To deal with these edge cases, we perform hotfixes, especially for production patches that must be implemented before an app’s next version.
Our process also involves a deep dive into the issue itself — determining exactly what went wrong, why the issue wasn’t caught earlier, and if additional testing could have prevented the issue. This review process remains a focal point for ensuring continuous improvement.
Can you explain how your team drives scale in your organization?
Our infrastructure team plays a critical role in managing extreme cases of scale to satisfy increasing demands of our customers, who constantly increase in number. For example, this could include supporting teams using 80,000 custom emoji or users in 20,000 channels, all while ensuring a satisfying customer experience.
Additionally, the mobile engineering team has expanded to over 120 engineers, which introduced scaling challenges of managing a large codebase. Consequently, we must constantly pivot to ensure the codebase remains manageable — ensuring it supports a growing team in concert with an increasing number of changes being made.
What’s an example of a component you recently built that you are really excited about?
Recently, a Slack feature team shared with us that they wanted their feature to function optimally — enabling users to save data — even when operating offline.
Anticipating other teams would soon have this need, we created a common component for data preservation and synchronization — eliminating the need for other teams to independently create their own solution. Any feature can now integrate with that component, indicating which actions should be saved and applied once the app regains connectivity. Consequently, this enhanced the user experience while ensuring code shareability across the feature team organization.