Snapp!
Driver Application

Snapp Driver 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 Offers

Snapp! Driver app is the counterpart to the Snapp! Passenger app. Drivers use this app to view ride offers and decide whether to accept one or not. Some of its other important features include updating ride status, chatting with the Passenger and updating vehicle registration info.

Key Technologies & Frameworks:

Snapp Driver Redesigned

Drivers can set their availability status, see ride offers and update their profile info in the Driver app.

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

Drivers can respond to Passenger messages easily with predefined messages so they can keep their focus on the road.

Dark Mode

Since some of the Drivers work at night, adding Dark Mode to enhance user experience and reduce eye strain seemed like a no-brainer.

Snapp Driver Old

Dark Mode helps Drivers to work with the app more easily in low-light conditions.

Rewrite Project

After the successful launch of the rewritten Passenger app, we decided to do the same for the Driver app. The Driver app was also written in Objective-C using MVC architecture. Since Snapp! is based on a real-time event system, MVC was not a 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 a complete overhaul of the app from design and usability standpoints, thus a perfect opportunity to let go of legacy code.

Old Snapp Driver App

Old Snapp! Driver app.

A New Architecture

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

In order to select a new 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 initiated the rewrite project in December 2018 and kept growing the team. By June 2019 the project was done and the team grew to twelve developers. We successfully launched the redesigned app with massive success, just like the Passenger app.