Adam Safran, Senior Engineering Manager at Turo, took the stage with me at the 2024 Gartner Application Innovation & Business Solutions Summit to discuss how vFunction’s architectural observability platform supports Turo’s journey to 10x scale.
Turo, the world’s largest car-sharing marketplace, is on a mission to put the world’s 1.5 billion cars to better use. Since 2010, Turo has consistently grown to amass over 3.5 million active guests and over 6.5 billion miles driven. This growth is great, but it also introduces challenges.
Turo’s growth pushed the limits of its monolith
Turo’s growth presented new challenges for its twelve-year-old monolithic application and rapidly expanding engineering team.
To address these concerns, Turo CTO Avinash Gangadharan proposed a mandate to achieve 10x scale. He developed two new engineering domains: a platform domain focused on developer experience and reliability and a core services domain focused on scale.
Adam’s API services team acts as a bridge between the two domains. However, the proposal faced several challenges:
- Justifying the initiative to leadership: When things are going well, it can be challenging to explain to leadership the necessity of investing in scale. Turo’s consistent growth required investing in scalability without sacrificing new feature development.
“The challenge is that there’s sort of a sense of if ‘it ain’t broke, don’t fix it.’”
Adam Safran, Senior Engineering Manager at Turo
- System and organizational scale challenges: Turo’s monolithic application faced several issues due to growth:
- The number of developers contributing to Turo’s codebase more than doubled from 28 contributors in 2017 to 72 in 2024
- Turo’s engineering team grew from 80 engineers in 2020 to over 200 in 2024
- The number of tables grew from 62 in 2011 to 491 in 2023
- Their reservation table went from 13 in 2011 to 36 in 2019
Turo began experiencing deployment issues, with releases taking 5-10 hours to get code into production. Organizational silos emerged, leading to increased ambiguity around domain ownership.
- Loss of modularity: As new domains were added to the application, classes written for a single purpose took on other responsibilities, leading to entanglement. Database tables previously called from one logical domain were called from two different places, mixing up their data layer with their business logic. As a result of over a decade of ad hoc development, Turo’s architecture lost its modularity, impacting the application’s scalability and resiliency.
The shift from monolith to microservices
To address the challenges posed by their monolithic application, Turo chose first to extract its conversation service. The decision was based on the service’s frequency of use and overall latency issues. The goal was to improve engineering velocity by reducing complexity through distinct microservices that can scale separately and provide clarity on domain ownership.
Once the conversation service was modernized to a “lean, mean microservices machine,” Turo achieved the following results:
- Faster average response times that went from half a second to 19 milliseconds with the 99th percentile response times improving from about seven seconds to just under one second
- 25-100x better sync times
- Improved code deployment from 5-10 hours to just five minutes
Challenges following microservice extraction
However, soon after creating the microservice, Turo realized that the application’s architecture could quickly become entangled without complete visibility, with teams adding new code and dependencies to new microservices. These changes might not be discovered until weeks or months later, leading to Adam’s API services team having to untangle “spaghetti code.”
vFunction — visualizing architecture, paving the way to scalability
To ensure vigilance in observing the application’s software architecture, Turo turned to vFunction to provide continuous architectural observability with dynamic and static code analysis and a real-time view of the application’s dependencies. vFunction helps the microservices architecture remain resilient and scalable while monitoring for technical debt accumulation and reducing software complexity as the team adds new features.
“We’re making this investment now in scale while the wheels are moving so that our product teams can continue to focus on the features that our users want.”
Adam Safran, Senior Engineering Manager at Turo
With vFunction, Turo identified a repeatable process to extract microservices and achieve scalability goals. Here’s what Adam describes as the best practices when modernizing an application:
- Use vFunction to understand your domain, the interconnections between services, and how to maintain service boundaries to avoid technical debt
- Over communicate with your teams about what the organization is doing and how they are doing it
- Break down organizational silos to reduce domain pollution
- Share your journey to help uplevel the organization
- Document successes to demonstrate ROI
- Rinse and repeat
As Turo’s business continues its growth trajectory, vFunction architectural observability enables the team to visualize its application and continuously find and fix technical debt before it has a chance to take root.
Organizations that deploy architectural observability experience improved application resiliency and scalability while increasing their engineering velocity. This ensures continued innovation and sharpens their competitive edge.
“I wish we had vFunction when I started at Turo. This kind of architectural observability gives us a much better understanding into our application and helps us with decision making as we move forward.”
Adam Safran, Senior Engineering Manager at Turo
If you’d like to learn more about how vFunction can help your organization, contact us. Tell us the big goals for your application and we’ll show you how architectural observability gives you a clear path to get there faster.