AI-powered
podcast player
Listen to all your favourite podcasts with AI-powered features
Rendering a list in Notion's mobile apps is complex due to the intricate data model. Notion's blocks, like to-do blocks and headings, are interchangeable, preserving content. The app's reactivity reflects changes across devices in near real time. Extensive work was done to build real-time connectivity and reactive patterns while maintaining speed and efficiency.
Notion's mobile team consists of 11 engineers split evenly between iOS and Android roles. The team's focus on app performance led to rewriting the app from web views to native components incrementally. The team emphasizes sharing ownership, high involvement in design documents, and encourages contributions from various functions within the company.
Notion's transition to native development involved beginning with the HomeTab feature and gradually moving to Search and Inbox tabs. The iOS team predominantly uses Swift and SwiftUI, while the Android team utilizes Kotlin and Jetpack Compose. Both teams aligned their code structures to mirror each other, and transitions to native development were chosen despite initial challenges.
Notion prioritizes swift code reviews with a quick turnaround time to keep the development process efficient. Code reviews predominantly occur within respective platforms, although occasional cross-platform reviews take place. The team emphasizes writing tests for critical functionalities but is moving towards testing all modules' public APIs for better long-term code quality.
Notion's development process revolves around rapid iteration cycles and minimizing build times. The team maintains a clean build time of around 45 seconds, achieved through modularization of code. Introduction of modularization allows for independent building of specific modules and features, speeding up development and build processes.
Notion's iOS app includes about 100 different modules that are defined through the package.swift file, allowing for lightweight and independent building. Modules are categorized into features, services, and models with specific dependencies outlined. Different module categories help understand the dependency tree, optimizing build times and facilitating migrations.
Notion releases its apps once a week with a progressive rollout starting on Fridays. They use a hybrid native and web client, continuously updating the web app component for users. Additionally, Notion offers a nightly public beta for testing and feature flag usage to control issues and facilitate smooth releases.
Supported by Our Partner
DX → DX is an engineering intelligence platform designed by leading researchers
—
In today’s exciting episode of The Pragmatic Engineer, I am joined by two members of the Notion mobile apps team, Austin Louden and Karn Saheb. Austin and Karn joined Notion in 2019 when Notion was revamping its mobile apps.
Notion is a versatile productivity and collaboration platform that combines note-taking, task management, and knowledge organization into a single workspace. It is available as a web app, as well as iOS and Android apps for mobile use.
In our conversation today, we take a deep dive into how the Notion mobile team operates and discuss the following:
• What the engineering culture is like at Notion
• Why the mobile team focuses so much on app performance
• The incremental shift from Cordova to Native
• Notion’s tech stack and frameworks they rely on
• How the mobile team maintains consistency across iOS and Android
• Unique features of the development process, including a public beta, using modules, and practices around feature flags
• … and much more!
—
Timestamps
(00:00) Intro
(02:03) The RFC process at Notion
(06:00) How Notion uses internal channels to share RFCs
(07:57) Some of the unique ways the mobile team works
(11:07) Why they don’t do sprint planning at Notion—and what they do instead
(12:57) An overview of the size of Notion and teams at Notion
(13:15) The beginning of mobile at Notion
(14:40) A simple explanation of Cordova
(15:40) Why Notion decided to revamp mobile in 2019 and shift to Native
(18:30) How the mobile team evaluated performance as they made the shift to Native
(22:00) Scaling mobile and iterations of moving to Native
(26:04) Why the home tab project was so complex
(30:59) Why the mobile team saved the editor for last and other future problems
(34:35) How mobile works with other teams
(36:50) How iOS and Android teams work together
(38:28) The tech stack at Notion
(39:30) How frameworks are used
(41:57) Pros and cons of different frameworks and why Swift was the right choice
(45:16) How code reviews work at Notion
(48:23) Notion’s mobile team’s testing philosophy
(50:18) How the mobile team keeps compile time so fast
(52:36) Modules in the iOS app
(54:50) Modules in the Android app
(56:44) Behind the scenes of an app release and the public beta
(1:00:34) Practices around feature flags
(1:03:00) The four dev environments at Notion
(1:04:48) How development apps work
(1:07:40) How and why you can work offline in Notion mobile
(1:10:24) Austin and Karn’s thoughts on the future of mobile engineering
(1:12:47) Advice for junior engineers
(1:16:29) Rapid fire round
—
The Pragmatic Engineer deepdives relevant for this episode:
—
Where to find Austin Louden:
• GitHub: https://github.com/austinlouden
• LinkedIn: https://www.linkedin.com/in/austinlouden
• Website: https://austinlouden.com/
Where to find Karn Saheb:
• GitHub: https://github.com/Karn
• LinkedIn: https://github.com/Karn
• Website: https://karn.io
Where to find Gergely:
• Newsletter: https://www.pragmaticengineer.com/
• YouTube: https://www.youtube.com/c/mrgergelyorosz
• LinkedIn: https://www.linkedin.com/in/gergelyorosz/
• X: https://x.com/GergelyOrosz
—
References and Transcripts:
See the transcript and other references from the episode at https://newsletter.pragmaticengineer.com/podcast
—
Production and marketing by https://penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Listen to all your favourite podcasts with AI-powered features
Listen to the best highlights from the podcasts you love and dive into the full episode
Hear something you like? Tap your headphones to save it with AI-generated key takeaways
Send highlights to Twitter, WhatsApp or export them to Notion, Readwise & more
Listen to all your favourite podcasts with AI-powered features
Listen to the best highlights from the podcasts you love and dive into the full episode