HyreCar was born out of the founders’ frustration of trying to rent a car for Uber and Lyft. They match individuals interested in driving for Uber and Lyft to car owners open to making some additional income from their unused car. HyreCar has capitalized on a market niche that was previously filled under the table by individual car owners just renting to each other. Since its inception in 2016, it has matched almost 200,000 drivers to cars, and achieved an impressive growth of about 318% year-over-year. Their explosive growth and dedicated customer base means they are no longer the same startup that started in Starbucks on an Excel spreadsheet. HyreCar was now a real business, with a technology platform that did not match the success and growth of their ecstatic community. This opened the door to a strong relationship with Novvum and a joint goal of scaling their technology and establishing a strong technical foundation.
As we started the project, Novvum faced monumental challenges. HyreCar’s original technology and infrastructure had been created by over 20 different developers in multiple countries with very little communication between them. The technology stack was disorganized, undocumented and not built to scale. This is common for many startups but exceptionally more difficult when the startup has a large and growing user base. As a team we had to strategize how to move an entire community from a front end full of unfinished features and a back end infrastructure lacking core best practices, all of this without losing or changing data and causing major outages during HyreCar’s busiest season. Not to mention in an accelerated window of time in order to keep up with investor and stakeholder demands.
As a growing technology company, HyreCar needed the flexibility and speed to try out and push out new product features; this requires a sturdy approach to process and execution. Our development philosophy, focused on newer technologies that emphasized flexibility, speed, scalability, stability and lower costs for our clients - a perfect match for HyreCar’s needs.
The project kicked off by working with HyreCar to prioritize a lengthy feature list, identifying high risk items and testing assumptions. As a user centric design and development team, we honed in on gathering quantitative and qualitative feedback from HyreCar’s users. After conducting several rounds of usability testing and customer development with HyreCar’s customers, the started receiving feedback and data
Equipped with this data, our team came to the conclusion that HyreCar was going to need a full rebuild of their infrastructure in order to handle the user requirements, scaling demands and administrative features requests, and the foundation required to innovated and build new products.
Through a series of weeklong design sprints, the teams at HyreCar and Novvum constructed a prototype that addressed many of the concerns brought forth by the customer interviews and product deep dive. Prioritizing simplicity for both drivers and owners, allowed us scrutinize over critical actions such as booking a car, listing a car and extending rentals. The new design provided a new streamlined user experience. To illustrate, booking a car on the site originally required 7 steps; with the new design, it only took 3. The prototype performed well with a sample of customers and the HyreCar team.
With the new round of designs, Novvum started the work to build the front end. The team was given an aggressive window of 3 months to completely rebuild the front-end for over 200,000 users. This meant that the team had to stay laser focused on the priorities and scope of the project; placing the basic functionality for owners and drivers over all else. The decision to utilize the front-end Javascript library of React was a no brainer. It gave us the flexibility and speed to build a powerful and extensible product within a limited timeframe.
With a new front end successfully built and deployed, our focus shifted to the monumental task of building a new back end and consequently a completely new admin portal. Our initial strategy was to make incremental changes to the backend to prevent disruption to their day to day operations. Unfortunately, as all development projects do, we uncovered unforeseen issues that could only be fixed with an immediate and complete rebuild from the ground up.
The biggest issue was the MySQL database itself. It was very unclear how or why most of the tables and columns were used. The old database evolved with the business and the majority of it was no longer necessary. To address this, we broke apart the database into multiple service-based databases like users, cars, rentals, payments, etc. This isolated the data to a specific context. If one of the databases becomes too large or no longer necessary, it would not affect the rest of the system. This also allowed us the freedom to use different types of databases for different services.
To bind all of these different databases together into one coherent API for clients, we used GraphQL. The GraphQL paradigm enables us to iterate on our API without having to worry about breaking the functionality of existing apps which are using it. It allowed us to provide a frontend product to the users right away while using the old backend. The GraphQL wrapper wrapped the old backend providing stability and developer flexibility while the new backend was being built. It acted as a great buffer during the two phases and much of it was reusable.
Another big issue with Hyrecar’s REST API was that third-party integrations like analytics tracking, CRM, and notifications were collocated with their core business logic. This often led to the server crashing or some core operation failing because one of the integrations broke. For the new build, we implemented an event-based system where functions would run independently in response to an event that gets triggered from the core API. For example, if a driver requests to book a car, the core API would trigger an event called “driver.requestedBooking” and a number of functions would subscribe to this event and send a notification to the requested car owner, update the CRM for the sales agents to follow up and so forth. Now, if any one of those functions fail, the core transaction will still go through and the other functions will still work.
As a result of the engagement, we were able to create a robust product that minimized customer problems and improved HyreCar’s bottomline in its busiest season. More importantly, this product was built on a foundation that could scale with HyreCar’s growth. Customer complaints about critical business transactions have decreased. Internally, we helped create development and deployment significantly reduced response time. In our sprints with the HyreCar team, we helped them establish a scope of work trained them how to structure their code, improve documentation and deployment. From a team of multiple developers from all across the globe, we helped them consolidate and train their development team to an in house team. With our team’s development expertise, we became HyreCar’s technology partner, helping them make decisions about their technology stack, deployment and systems.