The Background

BeamUp, a pre funding startup, was looking to create a mobile application that enabled ridesharing in the Quebec province of Canada, competing against companies such as Uber, Lyft and SideCar.

The Client Challenge

Regulations in France, Quebec and other parts of the world, sometimes made it difficult for ridesharing services to exist and gain acceptance in the marketplace by tightly regulating payment systems. BeamUp needed to think out of the box when creating a product that set them apart from the competition, whilst also abiding by strict regulations.

The Idea

BeamUp designed a payment system that complied with regulations. The next step was to create a ridesharing app which could support such a payment system, whilst also getting customers from A to B and delivering a seamless user experience.

The Technical Challenge

Creating an app to rival the offering from the most successful startup in history was never going to be easy. And whilst the concept was solid, bringing it to life had proved challenging for the client. BeamUp attempted to create a prototype of the app by working with a number of developers, with little success. Multiple people with various skill levels and working methods had contributed to creating the code, which was cumbersome and incomplete. Additionally, the app was built using Xamarin technology, which made finding senior developers to complete the app and bring order to the code very difficult.

The Solution

After rigorously testing our technical skills, Code Chemistry was selected to take on the project. Our team meticulously reviewed the code to identify which areas needed the most work and repair. We formulated a detailed strategy to bring the code in line with our exacting standards and get the app to market, on both Android and iOS, as quickly as possible.

The results

Leveraging our skills and experience, we were able to refactor the code and deliver a fully functioning concept app for both Android and iOS within a much shorter time frame than all previous development efforts. We reused as much of the pre-existing code as possible, whilst ensuring the end product contained only clean, scalable code. By delivering a working prototype, Code Chemistry enabled BeamUp to go to market with the confidence to compete in the ride sharing space.

State Of Play

When we first spoke with BeamUp, they had already spent over a year working on their concept app, with multiple development teams. As is typical of pre-funding startups, BeamUp had the concept and drive to promote their vision, but lacked the technical skills to make it a reality. By the time Code Chemistry began work on the project, the development budget had dwindled, deadlines had been missed and the code was a mess. The key to overcoming these challenges when entering at this stage of an app’s development, was possessing superior technical and professional skill to manage the rework and development tasks that needed to happen at the same time.

Technical Challenges

Taking on the architecture of such an intricate system, where all communications must at all times be reliable and near real-time, is not for the faint of heart. We immediately made this our no.1 priority. If we failed to plan and execute this part perfectly, the system’s foundations would be weak and future complications would be guaranteed. Increasing the pressure, the application’s target market was a large consumer base, meaning it had to be built in such a way that it could support millions of users at the same time.

To insure the correct actions were taken by drivers and passengers alike, we needed to track every movement and location variation, so they could be shared accordingly. Creating a network which can accurately communicate real-time data was imperative. Being able to differentiate between instances such as an idle driver, a driver en route and a driver arriving at a pick up point would be the difference between success and failure.

Then there was the crucial matter of payment. The application’s payment structure was unlike any other on the market. Whilst we can’t reveal the details of the in app payment flow, we can say that considerable time and energy was spent making sure it worked seamlessly for both passengers and drivers. With any financial exchange, there must be zero margin for error, and our code reflects that.

Technical Solutions

When the project was initially handed over to us, some work had already been done on the server side source code. We aimed to reuse as much of this code as possible. The server side code was created using .Net / C#, a technology we have a wealth of knowledge and experience in. This made it easy for us to take immediate ownership of the work. Xamarin was used for the mobile component, which also leveraged our team’s skill set, as we’ve worked with Xamarin since its inception. Using Xamarin allowed us to repurpose portions of the server side code within the mobile application. We were also able to code the entire Business Layer once only, for both the Android and iOS platforms, saving BeamUp time and future maintenance costs. Being able to share the code in this way allowed us to be much more efficient at implementing the needed features than if separate code was written for each platform separately.

To implement the real-time communication component, we chose to keep things simple and integrated a reliable third party publishing / subscription service, insuring both speed and scalability. We then created highly optimized messages, with very small bandwidth footprints, giving us the ability to maximise communication speed. This approach saved us considerable time, which we could re-allocate to focus on the business details within the application, both on the server and client side.

Within this project we integrated our own state of the art MVVM based Framework, methodically developed and finessed over the past five years. Specifically designed to tackle code sharing between platforms and its related difficulties, our CC framework imposes clean code writing and solid design principles. Using it saved time in the short term and minimised complications in the long term.

Implementing the state machine, to support all the different scenarios, such as finding a driver, setting the price, viewing ratings, tracking driver and passenger locations, was our next big challenge. Each scenario required its own individual screens and options. Our approach was to firstly isolate the communication channel within a separate service, secondly to isolate the logic of each individual state, and thirdly to implement a high level state engine to send the change events to the UI front end. This gave us full flexibility to change the state logic and allowed the UI to pick up those changes, without any further code intervention on the UI Layer.

Project Challenge Solution

The project’s time and budget determined our approach and planning. We had only four months to deliver a working application on both iOS and Android, which functioned in both Driver and Passenger modes. A real-time backend server was needed to mediate the complete flow of the systems communication. Additionally, it would track user registrations, payments, movements, states and feedback. Delivering an app with so many advanced features, across two platforms, to Code Chemistry’s high quality standards, would not have been possible without careful planning, extreme discipline and dedication to collaboration and transparency in all interactions internally and with BeamUp.


We were able to deliver a fully functional app with the complete set of desired features, on both Android and iOS platforms, using only clean high level code within the compressed four month timeframe. In doing so, we have supported BeamUp in its mission to offer an alternative to rival ride sharing apps, fully compliant with local regulation.

Technical information

C# 6, Xamarin, CC Framework, PubNub, Asp.Net MVC, Asp.Net WebAPI, EntityFramework(Code First Approach), MySql, AWS, Android, iOS


Driver Screen – Waiting for ride request
Driver Screen – On the way to pickup
Driver Screen – Rating passenger
Passenger Screen – Requesting ride
Passenger Screen – Pickup confirmation
Passenger Screen – Tracking driver