Inspiration
I've been in health technology for many years, and held many roles from developer to CTO. Through my career, I've been frustrated by how difficult the software delivery cycle is in health tech - from development to procurement. The result has been reduced outcomes for patients, and increased frustration for providers and payers.
I believe that by building on a set of fundamental modern enabling technologies, health tech can be improved for everyone, and costs reduced.
Covid 19 presents an opportunity to showcase how modern technology can be applied to a healthcare problem with great results.
What it does
Engages with patients/members directly on the device they are most comfortable with. Eliminates cumbersome and insecure traditional account/username/password based authentication, and instead uses a progressive risk-based identify verification solution to collect data, perform health screening, and drive health interventions based on responses.
Starting with either an automated screening or survey, the conversation can progress to a live chat or a live video telehealth session.
The provider can also chose to engage directly with a live chat or live video session.
A secure link is sent to the patient with personalized messaging from a provider they trust. No username or password is required, they can engage directly by clicking on the link. After initial engagement, increased identity verification can optionally be performed based on the risk category of information being sent.
From a health operations standpoint, rules based on responses can trigger external systems in real time.
How I built it
The primary challenge with this project was rapid delivery, while ensuring tight security.
I've been very interested in the json-patch RFC, and how it can be applied to various problems. I thought it would be interesting to build an isomorphic Proxy based solution that uses json-patch as a transport mechanism. I ended up writing a library called Mutant (soon to be open source) which relies on some other enabling open source libs I've developed recently: mongoose-patcher (https://www.npmjs.com/package/mongoose-patcher) and most importantly json-patch-rules: https://www.npmjs.com/package/json-patch-rules.
With these I was able to create Mutant, an isomorphic library that uses these technologies coupled with a thin wrapper around fetch to allow very simple RESTful APIs for entity modification, without the need for an excessive number of endpoints.
One of the interesting characteristics of json-patch, is how uniquely suited it is to event-sourced architectures. This opens up a lot of possibilities for op-shipping on the server.
After solving the fundamental architecture bits, the next part was thinking through a flexible data structure for messaging that would support live messages and automated bot-type interactions. Optimally, all of the logic for rules and routing should have the ability to optionally generate a service worker on the client for offline use (assuming no external integrations). I chose JEXL for a simple conditional language for routing and rule checking.
For a UI stack, I tend to like vanilla-ish web components with lit-html for rendering. I like web components because it's a tech that's going to be pretty solid for at least the next ten years, and has a pretty simple (if low level) API. Being able to mix and match components from different sources - ionic, material-web-components, vaadin, etc... is pretty nice. As long as they are "web components" they all work great together. That's really powerful.
The admin ui is done using ionic. I didn't care as much about the "weight" of the app, and ionic has a lot of useful components prebuilt. As a bonus, the admin side is 100% mobile friendly, which is rare.
The user ui is pretty much raw vanilla web components with lit-html for rendering. Material css for a little bit of styling, like ripple effects. Goal was to be minimal and fast-loading while looking nice.
From there, it was just implementation.
Challenges I ran into
Surprisingly, the most intricate part of the solution ended up being the graph-based conversation designer UI. I spent many hours searching for a good library, and while there are a ton of great options out there, they were either a) prohibitively expensive or b) unsuitable.
I ended up having to write a node based diagram/graph editor from scratch, doing auto layout and routing of connectors and segments. I was pretty hesitant to do it, but every other UI concept I could come up with was a terrible user experience, and wouldn't "tell the story" of the conversation flow.
Accomplishments that I'm proud of
I'm pretty happy with the way the conversation designer turned out, but honestly I think it's the innovations around json-patch that I'm the most satisfied with. I see a ton of opportunity for this technology in other projects.
What I learned
I learned that chat-based interfaces are a lot more complex that you'd think, especially if you support dynamic routing, rules and triggers to external systems as well as escalation to live chat and video. We take these sorts of interfaces for granted since they are so common, but there are a gazillion "gotchas" that end up taking a lot more time that you'd think.
What's next for Outreach Health
A lot of polish. The basic pieces are all in place, but it probably needs a solid two/three weeks of love before it's production ready.
I may float the concept to some funding arms of a few plans to see if there's any interest. If not, I have a few contacts from my time in health tech that I might reach out to. So far, for those I've floated the concept to I've had a positive response. There seems to be a pretty big appetite for this type of solution in the marketplace.
Try out the demo
The admin interface has a lot of features, and to test this out, I'll need to work with you to set up a demo.
Steps include:
- create a member (with a cell phone # you have access to),
- create a survey with questions and translations for each (though this is easy, it's automatic using google translation api)
- design a conversation flow (or use the covid19 one) and
- start a conversation (live, automated, video)
- get the link on your phone, and check it out.
If you're interested in the solution, just let me know and I'll work with you to get a user all set up and a demo flow that's easier to try out.
Thanks for checking out the project!
Log in or sign up for Devpost to join the conversation.