Snapp!
Super Application

Snapp Super App

Introduction

Founded in 2014 as a solution for urban journeys, it was soon rightfully dubbed as Iran’s Uber, reaching more than 1 million daily rides in 2017. Four years later, the Snapp! application turned into a super app, and now it offers numerous services ranging from requesting cabs & trucks, ordering food, reserving hotels and flights, buying inter-city bus and plane tickets, and all other services of Snapp! Group. The Cab service with more than 2 million daily rides is by far the most popular. Read more in Snapp!’s 2020 annual report (in Farsi).

Ride Experience

Even though Snapp! offers many services, the Ride experience remains the focal point of the application, as it is still the only part developed natively in Swift and UIKit. Some of its most important features include selecting pickup and drop-off coordinates, seeing the Driver’s location on the map in real-time, chatting with the Driver and selecting precise pickup location in airports.

Key Technologies & Frameworks:

Redesigned Snapp Passenger App

Snapp! Passenger Ride experience.

Chat

Prior to this feature, Passengers and Drivers could only communicate using a handful of predefined messages or by calling each other. We wanted to enhance this by adding free text chat.

Key Technologies & Frameworks:

Snapp Passenger chat

Passengers can chat and share their live location with the Drivers.

Area Gateways

Setting a precise pickup location in airports or big shopping malls can be difficult, as you need to know in which entrance you are. With this feature you can see and select entrances if you are in a place where vehicles are restricted or there is weak GPS reception indoors.

Key Technologies & Frameworks:

Snapp Passenger area gateways

Passengers have to select an entrance for areas restricted to vehicles like airports or shopping malls.

Super App

After the success of the Snapp! brand with the Cab service, all other sister companies rebranded using Snapp! in their names. Some of those companies include:

Since the Snapp! Passenger app was widely downloaded and installed, it was a business decision to use the Passenger app as the gateway to all other services. Therefore we transformed the app to include a home page whose contents were dynamically filled using an API.

Snapp Super App
Snapp! Super Application includes services from multiple companies in Snapp! Group.

Rewrite Project

When I joined Snapp! in 2017 as an iOS Developer, the app was written in Objective-C using MVC architecture. Since Snapp! is based on a real-time event system, MVC was not a suitable architecture and we were facing a lot of delays when implementing new features and also had a lot of problems finding root causes of bugs.
Moreover, this coincided with the rebranding of Snapp!, so we thought it was best we rewrote the whole app. You can read about the reasons behind this decision here.

Old Snapp Passenger App

Old Snapp! Passenger app.

A New Architecture

So we decided to rewrite the application using Swift and new a architecture.

In order to select new a architecture, I studied all the common iOS app architectures out there: VIPER, Uber RIBs, MVVM, and Clean Swift. None of them actually worked for us for various reasons. We could’ve used RIBs as Snapp! and Uber apps are basically the same, but back then Uber hadn’t released much about RIBs other than a few videos and a blog post. They open-sourced RIBs a few months after we released our new app. So, the only choice left was to create a new architecture based on the learnings from those architectures. We called it SNPArchitecture and you can read about it here.

SNPArchitecture

How objects from different classes interact with each other in SNPArchitecture.

Results

I kickstarted the rewrite project in December 2017 and started to grow the team. By August 2018 the project was done and the team grew to four developers and I was acting as the Tech Lead. We successfully launched the new app with a rebranded identity to massive success. This new architecture became the stepping stone for the transition of the app to a super app. The team also used SNPArchitecture to rewrite the Snapp! Driver app as well, again to huge success among Driver users. You can read about the Driver app here.