Being on-call requires the ability to respond to pages and handle escalations on the fly. When we started developing incident.io On-call, we debated whether a Minimum Viable Product (MVP) could function solely on SMS and phone calls. However, it became evident that a comprehensive mobile app was essential for the on-call experience.
The question arose: how should we approach building this mobile app?
Choosing a technology
Initially, we sought advice from peers and drew from past experiences to determine the best technology to use. The main query was which technology would be most suitable for our needs.
- Native iOS and Android: According to Apple and Google, a native app built in Swift or Kotlin is the way to go. While this approach allows for OS-specific features and adherence to UI/UX standards, it involves maintaining two distinct apps.
- Kotlin Multiplatform: Kotlin Multiplatform aims to bridge the gap between writing two separate apps. This technology enables writing code once in Kotlin and running it on both iOS and Android.
- Flutter: Flutter, another option from Google, uses Dart for coding and provides a consistent look and feel across platforms. However, it may lead to an app feeling slightly off on the OS it runs on.
- React Native: With React Native, you can write React code using Javascript and render UI components with native components under the hood. While it allows for building native apps on both platforms, some core functionalities may require additional work.
After consulting experts and considering our preferences, we chose React Native as our primary technology. We were intrigued by Expo, described as the "Vercel of React Native," and decided to validate our plans in an upcoming hackathon.
Initial exploration
During a company hackathon, we delved into React Native and Expo with a small team of engineers and a designer. Leveraging Expo Go and its project template, we began our exploration.
Expo
Expo Go serves as an app for executing Javascript code and comes with essential native dependencies. Setting up Expo Go eliminates the need for traditional app development tools, providing quick access to app development on physical devices.
Replicating our web codebase
To align our React Native code with our web dashboard, we integrated familiar tools and dependencies like Yarn Workspace, swr, and Nativewind. We strived to make the transition between the two surfaces seamless.
Ejecting from Expo Go
Although Expo Go facilitated initial development, we needed to eject to enable push notifications. Expo’s managed workflow and prebuild feature allowed us to generate custom projects for our app, tailored to our requirements.
This is just the beginning of our journey in building an efficient and user-friendly mobile app for incident.io On-call. Stay tuned for more updates on our progress and new features.