About Uber
Uber, a trailblazer in transportation technology, has redefined how we move from place to place. Since its launch in 2009, Uber’s user-friendly app has seamlessly connected riders with drivers, disrupting traditional taxi services worldwide.
Objective
Our collaboration with Uber was driven by a set of well-defined objectives aimed at enhancing various facets of their software development process.
Increasing Developer Productivity: We aimed to help developers work faster and better.
Reducing Delivery Time: Our goal was to finish projects more quickly.
Increased and Enhanced Feedback Loop to Developer Team: We wanted to make it easier for developers to get feedback and learn from it.
Reduce Cost of Development: We looked for ways to save money in the development process.
Improve the Quality of Product: We aimed to deliver higher-quality software.
By aligning our efforts with these objectives, we were able to not only meet but exceed the expectations of the team, delivering tangible results and driving significant improvements across various aspects of their software development lifecycle.
Current Testing Strategy And Problems
Before delving into proposed improvements, it’s essential to understand the strengths and weaknesses of the current testing strategy:
Good: Extensive Coverage of Unit Tests
- The current testing strategy emphasizes thorough coverage of unit tests, ensuring that individual components of the software are rigorously tested in isolation.
Bad: Lots and Lots of E2E UI Tests
- However, there is an over-reliance on end-to-end (E2E) UI tests, which can lead to inefficiencies and increased testing time due to their high maintenance overhead and susceptibility to frequent changes.
Ugly: Huge Dependencies on Manual Tests
- The testing strategy suffers from significant dependencies on manual testing processes, introducing bottlenecks, delays, and potential human errors into the testing workflow.
Impact on Continuous Integration (CI):
- E2E UI Cases
- Long-running tests suites; 30 mins-X hours
- Flaky Tests
- Too much time in maintaining and verifying the failures rather than identifying and fixing the proble
- Unit and System Tests
- Fast running tests
- Fast feedback to developers
- Cheaper to write and easier to maintain
What’s our Solution?
Tools and Framework
We dedicated our efforts to overhaul the tools and frameworks. This involved a comprehensive review of our existing toolkit, identifying areas for enhancement, and implementing robust solutions. Below is a sneak peek into the specifics of these improvements.
Reporting Dashboards
Developed a reporting dashboard to monitor the metrics and retrieve additional data from each mobile release:
Traceability: Providing a clear trail of test executions and outcomes, ensuring accountability and facilitating analysis of testing progress.
Comparison of Manual and Automation Test Results: Enabling easy comparison between manually executed tests and automated test results, allowing teams to identify discrepancies and refine testing strategies accordingly.
Centralized Access to Test Information:
Serving as a single point of access for all test-related information, promoting efficiency and ensuring consistency across testing efforts.
Real-Time Data on Test Progress and Stability: Offering up-to-date insights into test execution progress and system stability, empowering teams to make informed decisions and respond promptly to any issues that arise.
Inhouse Device Lab
To achieve faster and more efficient testing practices, we discovered the need for a dedicated in-house device lab. This initiative aimed to address the challenges associated with a wide range of device and operating system (OS) coverage, as well as the need for quicker feedback and test results.
Comprehensive Device and OS Coverage
The in-house device lab was designed to ensure we cover a wide range of devices and operating systems commonly used by Uber’s target audience, ensuring comprehensive test coverage.
Accelerated Feedback and Test Results
By eliminating reliance on external testing services and third-party device providers, we significantly reduced the turnaround time for testing and feedback, expediting the overall development cycle.
Enhanced Testing Efficiency
The establishment of an in-house device lab empowered our testing teams with greater control and flexibility over the testing environment, facilitating prompt execution of test cases and issue identification.
Team Building
Our collaboration with Uber also aimed to transition the entire team organizational model from the US to India, marking a strategic shift to leverage India’s expansive talent pool and align with Uber’s global expansion objectives. We initiated this process with a comprehensive study of the US Engineering team, ensuring that the team structure and organization developed in India were on par with their established model.
Pooling together a diverse mix of resources, including full-time employees (FTE) and external consultants, we collaborated to craft a dynamic team structure. This structure was meticulously designed to be agile and robust, capable of adapting to evolving project requirements while also remaining scalable to accommodate future growth and expansion.
Below is a high-level team structure we worked on:
Results
Following The Implementation Of These Strategies, We Attained The Following Remarkable Results:
“Our work with Uber has led to great results, like making developers more efficient, introducing automated monitoring and continuous delivery, and other relevant optimizations. Even though we faced challenges, we stayed focused on being innovative and excellent.”