Building telehealth at Grow: Past, present, and future

In 2023, Grow launched our own telehealth application, allowing providers to hold teletherapy sessions within the Grow platform. Today, it serves hundreds of thousands of clients across the country.

Frontend Engineering

·

4 min

This article was written by Molly Jean Bennett.

In 2023, Grow launched our own telehealth application, allowing providers to hold teletherapy sessions within the Grow platform. Today, it serves hundreds of thousands of clients across the country. 

But telehealth didn’t start as a fully fledged offering; it’s something the telehealth engineering team has built over time. While the codebase has changed, what hasn’t changed is the principles that guide our work: deep empathy for our users, a focus on strong patterns, and the core conviction that reliability and clinical excellence are not at odds with creativity and delight. “Just like a sea otter gliding through the water, we strive to make telehealth sleek, easy to use, delightful, and playful,” explains Katherine Buige, an engineer on the telehealth team.  

In this post, we’ll look back at the journey of building telehealth and share some reflections from the team that’s built it along the way. 

The past: Launching the initial version of telehealth

When Grow first launched in 2020, our therapists and prescribers used a third-party system to host telehealth sessions. While this allowed us to launch the product quickly, the sessions themselves were a black box, which impacted our ability to deliver on our vision of a sleek and delightful experience. For instance, we couldn’t determine what happened when providers or clients reported no-shows or experienced audio or video issues during calls. 

In the summer of 2023, two Grow engineers, Sepehr Ansaripour and Jared Culp, began building the first version of the telehealth platform. Jared remembers the excitement of the original build: “This was a chance to build something that directly touched the care experience, which felt meaningful.” 

It was also a greenfield opportunity, as we decided to build the telehealth web application outside Grow’s monolith. This approach gave the team significant freedom to prototype and explore different architectures. “Working on a greenfield codebase is always energizing; you get to revisit assumptions, make deliberate tooling choices, and set the tone for how things will be built,” Jared adds. “One thing we prioritized from the start was local developer experience. We were used to jumping through hoops to get the monolith running, and we wanted it to be trivial to run the entire telehealth system on your laptop.” That desire to focus on the developer experience meant that the team ended up sticking with a stack similar to the monolith: React, TypeScript, and Flask. 

Despite being in a separate repository, the telehealth codebase wasn’t entirely independent; the monolith was the primary place where critical data, such as appointment times and provider and patient user data, lived. If there were any outages or data sync failures in the monolith, they could prevent real users from receiving care. 

To isolate telehealth from outages in the monolith, we created a separate Postgres RDS instance and used an event bus to sync core data between the monolith and the telehealth database. As a result, we didn’t need to make API calls to the monolith to fetch critical data, but we could still make requests for supplemental data (e.g., a client's future appointments, clinical measure scores). To further protect the telehealth application from upstream disruptions (e.g., any errors when fetching this supplementary data), we implemented robust React error-boundary practices. And this architecture works; as the app has grown, this pattern has remained in place. 

With the architecture figured out, the team shifted focus to building out the rest of the product experience. “We faced some genuinely interesting product constraints that forced hard engineering tradeoffs,” Jared recalls. “For instance, authentication is a big one. How do you reliably identify users without adding friction to the authentication flow?”

We explored several options. For instance, we could ask providers and clients to sign in each time they access the teletherapy appointment, but that would introduce a lot of friction. Another solution was to use unique provider and patient URLs that aren't tied to a specific appointment, but there was concern that this could create confusion for providers, who were used to sending one link to all clients.

Ultimately, we chose a hybrid approach by requiring providers to authenticate to access a teletherapy appointment, while patients received a separate join link to access the session. This approach prioritized client convenience and access while still allowing therapists to see protected client data in the session.

Releasing and iterating on the telehealth beta

In late 2023, we officially rolled out a beta version of telehealth, where a small group of Grow providers began holding their sessions on our in-house platform. It was an exciting milestone, but also nerve-racking, as the real test of any new product is what happens when it goes into the real world. 

During the beta, all support requests were routed directly to the team Slack channel, which gave us a first-hand peek at how a bad experience on the app could disrupt patient care. If a therapist couldn’t connect their microphone, it wasn’t just a matter of trying again later; it could mean the therapy session didn’t happen at all that day. This responsibility could be stressful, of course, but it also emphasized just how important it was to get it right and was crucial to building a foundation of user empathy among the engineers on the team.

Through our beta testing, we uncovered a large number of issues with audio and video behavior across browsers. “We had extensively architected, designed, and internally tested telehealth, but we weren't prepared for the final boss: browser media APIs,” Sepehr remembers. “At the end of the day, no matter how good your web application is, it's still at the mercy of the browser it runs in. And, let me tell you, browsers have a million and one opaque constraints when it comes to media (audio/video) inputs and outputs.” To support as many browser and device configurations as possible, we made several adjustments, including adding new device-detection polling logic and fine-tuning the video call experience for low-bandwidth environments. Building better experiences for poor connectivity on mobile devices was especially important, since a majority of teletherapy patients access their session on their mobile phone.

If browser quirks multiply the variables a system will encounter in the wild, human users introduce even more. “As we added more clients and providers to the beta, we started encountering edge cases we hadn't originally thought through at all,” Jared recounts. “For instance, we saw some providers canceling appointments that had already taken place or scheduling appointments for a day in the past, all of which resulted in errors on the backend. It was a good reminder that no matter how carefully you design a system, users will always show you something you didn't anticipate.” To account for these new edge cases, we adjusted our eventing logic to ensure that appointment data in the telehealth database and the monolith database remained in sync.

The present: Tackling scale and centering accessibility

We launched the Grow telehealth application to all users in the Spring of 2024. The original application launched with a basic video call feature set, including in-session chat, virtual backgrounds, and media controls. Since then, it’s matured to incorporate many features from Grow’s client portal and provider dashboards, including scheduling, note-taking, and clinical measures.

As the platform continues to expand, the team has increasingly shifted its focus to make attending therapy as easy as possible for as many people as possible. A big focus of this effort is on web accessibility. “I'm always looking for opportunities to ‘shift left’ with our accessibility considerations,” explains Kelli Rockwell, an engineer on the teletherapy team. Kelli recently led an initiative to re-architect telehealth’s system of toasts for screen reader and keyboard compliance. This involved migrating to a more accessible underlying library and introducing four separate toast queues, one per screen region, to enable fluid keyboard navigation.

“We want to give clinicians all the tools that they need, but even helpful prompts or alerts can become disruptive if they arrive too often, too loudly, or with too much or too little context,” says Kelli. “The delicate balance of the situation is compounded by things like device type, screen size, network speeds, and any assistive technologies they might be using.” Accessibility, ultimately, is at the core not just of user empathy, but basic fairness. As Kelli summed it up, “We don't frame our user stories with ‘As a therapist with no physical or mental impairments, a giant 30-inch monitor, and blazing fast internet speeds,’ so we shouldn't be exclusively designing and building experiences for that user, either.” 

Adding delight to teletherapy

As serious and challenging as the work of building telehealth can be, the team has always found opportunities to make the app special. 

One feature our team loves is the pre-session vibes experience. Conceived and built during a hackathon, Pre-Session Vibes is a simple five-note keyboard that a client can play while waiting for their therapy session to start, either by clicking a series of colorful blobs or by pressing the corresponding keys. It’s now accessed an average of 65,000 times per month and has been featured in several client social media posts. 

Tommy Verdone, an engineer on the team who led the pre-session vibes project, drew on his love of instruments and music composition to design the "harmonious keyboard,” ensuring that the audio sounds pleasant no matter what keys the user presses. "In telehealth, we're meeting our users closest to their actual therapy session,” Tommy explains. “So it feels important to create these joyful little experiences that can take the load off of people when they're about to go into therapy, even if it doesn't directly boost any of our metrics."

The future: Building the best platform for patient outcomes

Over the last three years, telehealth has grown from “just” a video call to software that’s at the center of patient care. And just like how a cold otter needs to eat to stay warm, Grow’s telehealth platform must continuously process user input and adapt accordingly. While that brings new engineering puzzles to solve, with new mollusks to crack and briny depths to explore, the core mission remains the same. 

Kelli explains it best: “Therapy can be daunting, frustrating, and something that you take a long time to get comfortable with. Or maybe you never do! It's something that lots of us are trying our best to show up for in spite of all that. Working on telehealth means putting out a virtual hand for a client on our platform to hold, regardless of what it looks like. Sometimes it's through incorporating gentleness into our design language and waiting room experience, or building better tools for providers to do their best work, or going the extra mile to have a graceful recovery path for the handful of users who might hit some session-breaking edge case.”

Right now, this vision is increasingly taking shape through more personalized client and provider experiences, such as how providers assign measures and therapeutic exercises to clients. The team is also improving the transcription infrastructure to decrease latency and work towards real-time captioning for therapy clients. But if there’s anything we’ve learned, it’s likely to keep evolving. And isn’t that the most exciting part of all of this?

If this kind of work sounds meaningful to you, we'd love to hear from you. Check out our careers page for open roles.

Related articles

if this sounds interesting, reach out to learn more

if this sounds interesting, reach out to learn more

if this sounds interesting, reach out to learn more