Skip to content

Articles from Mo Khazali

Comparing iOS rendering performance: SwiftUI vs. React Native vs. Flutter

September 14, 2023Mo Khazali5 min read

3 iPhones with SwiftUI, React Native, and Flutter logos

When SwiftUI first came out, I remember reading about complaints around its performance. Some animations were janky (compared to UIKit) and app layouts were getting recalculated far too much, resulting in unnecessary computation power being used. People reported it being generally slower than UIKit…

Continue reading →

Firebase Dynamic Links are being shut down: Time to go Universal with Expo Router?

August 15, 2023Mo Khazali3 min read

A wireframing for a blank app

Google has a reputation for killing or discontinuing its products and services. There's literally a website called Killed By Google, which has a list of all the services that have been discontinued over the years. Recently, Google has been hinting that developers should not use Google Dynamic Links…

Continue reading →

Building Whitelabel Mobile Apps: A Comprehensive Guide of Technical Considerations

May 25, 2023Mo Khazali7 min read

A wireframing for a blank app

Introduction Imagine this scenario: You've just joined as a lead engineer at Burrito Ring, an international chain of average tasting TexMex fast food. Your first project is to develop a mobile app that allows users to view the menu, check allergens, and order food within the restaurant. After six…

Continue reading →

The State of Building Native Mobile and Web Apps from a Single Codebase with React Native in 2023

May 03, 2023Mo Khazali8 min read

A mobile and laptop showing a responsive website

This article is a write-up based on a talk I've given called "Building Universal Apps in React Native". It was first delivered at iJS Conference London in April 2023. This article is not meant to go into detail about all of the components to build a universal app, rather it aims to break down the…

Continue reading →

Effective Strategies for Testing React Native Apps: Striking a Balance Between Testing UI and Business Logic

April 20, 2023Mo Khazali7 min read

Logos for React and React Testing Library

Testing in software development is a contentious topic, with advocates on both ends of the spectrum. On one hand, there are those who argue against writing any tests at all, while on the other hand, there are companies that insist on 100% test coverage. I remember I went on a project where there was…

Continue reading →

Handling Supabase Password Reset in React Native

March 29, 2023Mo Khazali7 min read

Supabase and React Logos

When working on a project that used Supabase for its authentication, we faced many issues in the password reset flow. Our app was using React Native on the front end, and Supabase on the backend. The official documentation had a section describing how to implement the password reset flow using the…

Continue reading →

From Responsive on Mobile to Mobile-First

March 16, 2023Mo Khazali3 min read

A mobile and laptop showing a responsive website

It’s no secret that web development has changed massively with the rise of smartphones. Back in the day, websites were typically targeting desktop resolutions, and many websites required you to use a computer to have a pleasant experience. Here’s a little flashback: when Apple was launching…

Continue reading →

One Hook Per Screen: a simple architecture for scalable React Native apps

February 13, 2023Mo Khazali5 min read

React Native logo with a hook icon

“Architecture is the decisions that you wish you could get right early in a project” Ralph Johnson When I built my first site, the web felt like a simpler place. I would create an html file for my markup, a css file to have all of my styles, and js files if I had any interactivity or logic. This…

Continue reading →

Stop Building Auth: a case for using prebuilt authentication in React Native

January 31, 2023Mo Khazali7 min read

A broken lock, symbolising weak authentication/security.

Authentication is simultaneously one the most and least important parts of your application. By default, most mobile apps will remember the user’s credentials (since phones are normally personal devices). This means that the user might spend a couple of minutes signing up, or a few seconds logging…

Continue reading →

Preview Branches for React Native with Expo

January 09, 2023Mo Khazali4 min read

Banner with RN, Expo, and Github logos.

A Github Action to automatically generate preview branches using EAS (Expo Application Services) as part of a CI/CD workflow, creating live deployments that allow the reviewer to functionally check any changes in the app before the feature is merged into staging. React Native developers often get…

Continue reading →

Optimising screen load times for legacy low-end devices in React Native

December 19, 2022Mo Khazali7 min read

React Native running quickly on a legacy device.

You’ve developed your React Native application and you’re ready to release it out to the public. All is going well, until you start testing on real phones. While your app is perfectly smooth and snappy on your shiny new iPhone 14 Pro, others give you a different story… An Android user reports that…

Continue reading →

Hasura: GraphQL Without the Baggage.

August 04, 2021Mo Khazali11 min read

GraphQL overwhelming developers.

Spoiler Alert: Star Wars references below. Proceed at your own risk... The introduction of GraphQL back in 2015 garnered a lot of hype in the development sphere - allowing clients to describe exactly what data they require (preventing over-fetching unneeded information) and unifying multiple…

Continue reading →