Case Study | Mobile App

Derive VQ Installer

Background

When I joined Derive Systems in May 2018, the company had just launched a massive project installing its VQ device—an LTE-enabled puck that provided telematics and enhanced vehicle controls—on every car, truck, and van in Comcast's 30,000+ vehicle fleet. Activating each VQ required the use of the VQ Installer app for iPhone.

In my first meeting with the product manager for VQ Installer it was revealed that the Comcast project was quickly falling behind schedule. Installations were taking longer than expected and install technicians were frequently calling customer support with issues related to the app.

In collaboration with the dev team, the install teams, and customer support staff, I kicked off a high-stakes overhaul of the VQ Installer app aimed at improving stability and streamlining the installation process. By the project's successful conclusion, we'd re-established trust with Derive's largest customer, increased payouts for install technicians, and demonstrated the advantages of a research-based approach.

Company

Derive Systems

Customer

Comcast

Team

1 database engineer, 2 firmware devs, 1 mobile dev, 1 product manager, 1 designer (me)

Contributions

Rapid prototyping, research, cross-functional collaboration & planning, design documentation, animation

Project Duration

May 2018–February 2020

Process Overview

Three pictures showing the progression from abstract to more detailed drawings of the install process.
Showing the progression from abstract overviews of the product to storyboards of the user experience. (FYI, many of the whiteboards at Derive are yellow)

Putting The App In Context

Before I could make any meaningful contributions, I needed to understand what the Installer app actually did and how it fit into the product ecosystem. By collaborating with the product manager and dev team, I created a product blueprint (upper left) and transitioned into more detailed diagrams and storyboards that visualized the install process. I walked various people through these assets ad hoc and maintained digital versions for iteration and continued conversation as the app evolved.

This process helped clarify some of the reasons install technicians were experiencing issues, e.g., shortcuts and quick-fixes that had been implemented during the product's hasty development. Identifying and documenting these technical details gave me a better sense of what to watch for when observing the install process first-hand.
Photo of an install technician doing his thing. The Installer app has been started and tossed onto the driver seat for later reference.
The VQ install process shown during one of my many site visits. The process involved physically installing the VQ device, then using the app for activation and association with a vehicle.

Boots on the Ground

The VQ install campaign for Comcast was a nation-wide effort conducted by small teams of technicians working almost constantly. I spent dozens of hours observing, participating in, and documenting this process. I spoke with technicians about their experiences and frustrations with using the app. Because they were paid per-install, technician's primary concern was completing each vehicle as quickly as possible.

What I discovered about the app from these visits was that, when something went wrong (or right, for that matter), the communication from the app was confusing and seemingly inconsistent. Sometimes closing and reopening the app would clear an error. Other times, taking the same action would produce a different error. This created an almost superstitious mistrust of the app that frequently triggered calls to customer support and often required direct interventions from the dev team.
A chart showing improved install times over a period of days
Example of some of the charts generated by the dev team's analytics tools to track install times.

Establishing Goals

The primary goal of updating the VQ Installer app was to shorten install times so that Derive could meet its ambitious deadlines with Comcast. Thankfully, the firmware and mobile dev teams had done a great job of setting up install analytics and making them easy to access. This provided good baselines to measure against when trying to improve install times.

A secondary goal of the project was to decrease or eliminate the number of calls placed by install technicians to customer support. This required me to keep in close contact with the support team and gain access to their online support tools.

It was also important to me that we gauge general satisfaction with using the app. For this I kept in close communication with the install team leads, checking in whenever significant updates were made and continuing to make and document site visits whenever possible.
Screenshot of the prototypes created in Figma.
Figma was essential in providing a way to quickly tweak parts of the user flow and gather feedback.

Prototype, Test, Rinse, Repeat

With a full understanding of the product ecosystem and personal observations in hand, I was able to effectively update the user experience in Figma, gather feedback from the dev team, and quickly return to the install technicians with prototypes for validation and further feedback.

At the time this Figma testing was conducted (2018-19), a point of frustration was Figma's  inability to completely immerse testers on an iPhone. The Figma app was OK, but it quickly became awkward when more advanced interactions were needing to be tested. For these interactions we occasionally used Principle.

Unfortunately, I was never able to perfect the process of maintaining the designs in Figma AND Principle. I believe this failure was more a function of time than either program's lack of features at the time. This experience was one of the reasons I began experimenting with SwiftUI as a means of creating even more realistic prototypes that could be integrated directly into the dev process.

Problems

Below are the primary issues and associated questions that my team addressed in order of priority. We prioritized issues in this way because it made the most sense from the mobile developer's perspective and the team agreed that, by fixing the first two issues, we'd be better set up to respond to the needs of install technicians moving forward.

1. Lack of Transparency

"What the heck is the app doing?"

When the app was working, it did provide some feedback but it came in the form of a meaningless loader and text that quickly flashed across the screen before disappearing. Technicians found this experience frustrating and it diminished trust in the app.

Another mockup image showing how error messages presented by the app were not super friendly.

2. Error Handling

"What does that even mean!?"

As is often the case, the app's error messages were seemingly not intended for human consumption. This was especially problematic given the range and likelyhood of errors that could occur when dealing with bluetooth, wifi, LTE, humans, AND a motor vehicle.

A mockup images showing how selecting from a list of similar vehicles could be a challenge.

3. Device Identification

"Am I connecting to the correct vehicle?"

The main screen of the app displayed a list of nearby VQ devices. In a crowded parking lot, it wasn't always obvious which device was correct. There was also a general lack of detail provided in the list.

A mockup showing that refreshing the list of vehicle could be puzzling.

4. Refreshing

"Pull down to what now?"

For many, pulling down on a mobile screen to refresh a list feels like second nature. But, if that's not a gesture you're familiar with and refreshing is necessary to complete some tasks in your app, the refresh mechanism should be very discoverable. Add to this the complication that refreshing can sometimes be disruptive or technically expensive, i.e., using more data or power than necessary, then you'd better be very careful about how it's implemented.

Solutions

1. Lack of Transparency

Solution: Better categorization of data + subtle animation

Image showing how I was able to categorize the long list of messages from the previous version of the app.
This animation shows the large collection of messages displayed during installs from the previous version (left) and my solution for organizing them in a way that was meaningful for install technicians.

The previous app experience during VQ installations presented technicians with a flurry of messages, some only lasting a fraction of a second. I collaborated with the mobile dev and firmware engineers to decipher what was happening during this process and essentially translate what all these messages meant. We organized the different messages into categories based on things like the type of communication occurring, e.g., VQ-to-cloud vs. phone-to-cloud, and, most importantly, points of failure. This turned out to be crucial for solving the issue of poor error messaging (see section two below).

I'll admit that it wasn't immediately clear to me why technicians frequently complained about this part of the experience, even when no errors occurred. After all, the app was clearly doing something during this process, and what did they care what was going on in the background? It wasn't until speaking with them directly that I realized what they were looking for was a sense of empowerment. Given all of the potential things that could go wrong in this process, they wanted to know exactly what the app was doing during each step so they could take action as soon as possible.

An animation showing device-to-device communication vs. device-to-cloud.
I created subtle animations to indicate where and when data was flowing.

Clarifying Status With Animation

An important part of this solution was the inclusion of animations to indicate the flow of data. By displaying icons of the phone and VQ device on the install progress screen, I was able to indicate exactly what type of communication was occurring during each step. This was especially well received by install technicians because it allowed them to quickly identify what was happening and respond if needed—finding better cell coverage for cloud-to-phone events, for example.

The mobile dev and I went through a long series of trial and error to get these animations just right. At first we tried animated GIFs but the file sizes were too large and the quality was not great. We also considered using small videos but that turned out to be impractical. The solution we arrived at was Airbnb's Lottie. I created the high-framerate animations in Adobe After Effects and handed off the tiny Lottie files (~12k per file 😎) to the developer who was able to quickly install the library in Xcode.

2. Error Handling

Solution: Removing dead ends by making errors actionable

A view of the prototyping process for VQ Installer's error handling.
Prototyping was an essential part of defining and documenting all of the app's potential error states.

There was a frustratingly large variety of reasons a VQ installation could fail, and the initial implementaion of error messaging gave technicians little to no insight. By collaborating with VQ customer support, the dev team, and install technicians, I created an inventory of the different failure states for the app and incorporated appropriate solutions—either through improved copy, or by branching the app into further actions that install technicians could perform.

One example of a frequently encountered error occurred when a VQ was plugged in and failed to identify a vehicle identification number (VIN). This typically happened on older-model vehicles and required install technicians to call customer support to have the VQ and VIN associated in the database manually. I collaborated with the database team and others to incorporate these extra steps into the app, allowing the install technicians to complete any installation without external help.

An animation showing device-to-device communication vs. device-to-cloud.
I created subtle animations to indicate where and when data was flowing.

Making the VQ Sing 🔊

An important part of this solution was the inclusion of animations to indicate the flow of data. By displaying icons of the phone and VQ device on the install progress screen, I was able to indicate exactly what type of communication was occurring during each step. This was especially well received by install technicians because it allowed them to quickly identify what was happening and respond if needed—finding better cell coverage for cloud-to-phone events, for example.

The mobile dev and I went through a long series of trial and error to get these animations just right. At first we tried animated GIFs but the file sizes were too large and the quality was not great. We also considered using small videos but that turned out to be impractical. The solution we arrived at was Airbnb's Lottie. I created the high-framerate animations in Adobe After Effects and handed off the tiny Lottie files (~12k per file 😎) to the developer who was able to quickly install the library in Xcode.

3. Device Identification

Solution: Sprinkle in some beeps, boops, and context

A before and after of the VQ Installer app
Showing some of the improvements that I made to the app's default list view.

One of the first problems that I observed in the original version of the app was how difficult it could be to identify and select the correct device. There was an audio locate feature for confirming the correct VQ by making it beep, but the feature was not super discoverable and the tap target for the button was quite small. There was also no way to discern a previously installed VQ from one that was ready to install. I generally cleaned up the UI and thoroughly tested the results to confirm everything had improved.

Another element that I pushed for in this solution but was unable to get included were vehicle photos. I had a hunch that including an image of each vehicle could go a long way toward making visual recognition faster and more seamless. I confirmed this by including vehicle images in prototypes and clocking the improved recognition times. Ultimately, the idea of including images was abandoned for performance reasons, but the research turned out to be invaluable for a subsequent project (see Epilogue below).

4. Refreshing

Solution: Persistent feedback

The pull-to-refresh solution for VQ installer showing persistent feedback about when refreshing is necessary.
Detecting and indicating that new vehicles were present was a more energy efficient and user-friendly way of implementing refresh.

An often requested feature that wasn't in the app's initial version was the ability to refresh the device list. Without this feature, early versions of the app refreshed automatically, causing disruptive shifting of the list and unwanted taps.

When I recommended adding pull-to-refresh, the mobile dev suggested that it might be too advanced of a gesture to include for our audience. I initially baulked at this suggestion, then I setup interviews with installers and confirmed that the dev was correct—pull-to-refresh was not necessarily a ubiquitous or discoverable gesture for all those using the app.

The comprimize solution that we implemented turned out to be benefitial in two ways: it leveraged the pleasantly smooth experience of pull-to-refresh while providing a clear and persistent indicator of when refreshing might be necessary. This last point was important because refreshing the list was not a trivial action—it measurably increased battery drain for both the phone and vehicle by forcing greater bluetooth activity.

Conclusion

By almost every measure, the VQ Installer project was a success. The end results of the above solutions was that install technicians could complete their work and get paid faster, without outside help in almost every case, and Derive was able to honor its ambitious commitments to Comcast. This project also set a benchmark for a design-led, research-based approach at Derive.

Business Impact

Epilogue

Transitioning To A More Versatile Experience

Mockups of the VQ Utilities app for iPhone

Early in my work on the VQ Installer app, I began hearing ideas and suggestions from throughout the organization about other features that, given Derive's product roadmap and the nature of the VQ itself, would eventually need to be incorporated into an app. According to the mobile dev team, the Installer app itself was not an ideal place to incorporate these features, so I collaborated with the Installer app's product manager to document, sketch, and prototype what this more robust application might look like. Thus the VQ Utilities app was born.

Rather than focusing on the VQ itself, the Utilities app was a much more vehicle-centric application. By simply scanning a vehicle's VIN, the app could unlock a range of options for managing, monitoring, and upgrading various features of the vehicle including improved fuel efficiency and added safety. This application became one of the primary projects of the mobile dev team and was still in Alpha when I left Derive in January 2022.

John Sellars Monogram Logo
Copyright © 2026 John Sellars.
All rights reserved.

Contact

Thanks for writing! I'll respond as soon as I can.

All the best,

–John
Oops, what the heck! Something went wrong while submitting the form.

Please try again later 🥺